chem-generic-ui 2.1.1 → 2.2.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chem-generic-ui.es.js","sources":["../src/components/shared/LFormGroup.js","../src/components/elements/KlassAttrForm.js","../src/components/designer/DesignerContext.js","../src/components/elements/SegmentAttrForm.js","../src/utils/pureUtils.js","../src/components/tools/Constants.js","../src/components/elements/AttrForm.js","../src/utils/response.js","../src/utils/template/designer-message.js","../src/utils/template/input-validation.js","../src/components/elements/AttrModal.js","../src/components/icons/FIcons.js","../src/components/tools/MC.js","../src/components/tools/format-utils.js","../src/components/tools/TAs.js","../src/components/shared/LTooltip.js","../src/components/designer/AttrNewBtn.js","../src/components/designer/GridToolbar.js","../src/components/designer/AttrEditBtn.js","../src/components/designer/AttrCopyBtn.js","../src/ui/common/TooltipButton.js","../src/components/details/renderers/ActionRenderer.js","../src/components/fields/ButtonTooltip.js","../src/components/details/renderers/ActiveRenderer.js","../src/components/details/renderers/InfoRenderer.js","../src/components/shared/LCom.js","../src/components/details/renderers/TemplateRenderer.js","../src/components/details/GenGrid.js","../src/components/details/GenGridEl.js","../src/components/details/GenGridSg.js","../src/components/details/GenGridDs.js","../src/utils/grid.js","../src/components/tools/DocuConst.js","../src/components/designer/template/TemplateBar.js","../src/components/tools/ui-styles.js","../src/components/models/GenericSubField.js","../src/components/models/Field.js","../src/components/layers/Layer.js","../src/utils/template/sorting-handler.js","../src/utils/template/group-handler.js","../src/components/details/handler.js","../src/components/designer/template/Prop.js","../src/components/shared/LBadge.js","../src/components/designer/template/LayerHeader.js","../src/components/shared/arrangeUtils.js","../src/components/dnd/DragLayer.js","../src/components/dnd/DnD.js","../src/components/designer/template/ConditionView.js","../src/components/designer/template/GroupLayerOrderContent.js","../src/components/actions/ArrangeModal.js","../src/components/designer/template/GroupLayerOrderBtn.js","../src/components/elements/BaseFieldTypes.js","../src/components/elements/BaseFields.js","../src/components/tools/field-utils.js","../src/components/fields/FieldBadge.js","../src/components/elements/LayerAttrForm.js","../src/components/elements/LayerAttrModal.js","../src/components/designer/LayerAttrEditBtn.js","../src/components/designer/LayerAttrNewBtn.js","../src/utils/api.js","../src/utils/desMgr.js","../src/components/shared/LPopover.js","../src/components/fields/ButtonConfirm.js","../src/components/designer/template/LayerGrid.js","../src/components/details/GenAnaModal.js","../src/components/fields/DateTimeRange.js","../src/components/fields/TermLink.js","../src/components/fields/FieldLabel.js","../src/components/fields/FieldHeader.js","../src/components/models/Attachment.js","../src/components/fields/FieldTooltip.js","../src/components/tools/utils.js","../src/components/tools/build-source-form.js","../src/components/tools/icon-finder.js","../src/components/dnd/GenericElDropTarget.js","../src/components/dnd/GridDnD.js","../src/ui/common/fnConstants.js","../src/ui/common/fnCfg.js","../src/ui/common/fnToggle.js","../src/components/table/GridBtn.js","../src/components/table/GridEntry.js","../src/components/table/UConverterRenderer.js","../src/utils/table/build-table-source.js","../src/components/table/GenericElTableDropTarget.js","../src/components/table/DropRenderer.js","../src/components/table/DropTextRenderer.js","../src/components/table/DropLinkRenderer.js","../src/components/table/SamOption.js","../src/components/table/SelectRenderer.js","../src/utils/fileUtils.js","../src/utils/apiExecutor.js","../src/utils/impExpMgr.js","../src/components/table/TableRecord.js","../src/components/fields/FieldUploadItem.js","../src/components/dnd/DroppablePanel.js","../src/components/dnd/DropReaction.js","../src/components/fields/ButtonDatePicker.js","../src/ui/common/TextLabel.js","../src/components/fields/GenPropertiesFields.js","../src/components/fields/PropCalculate.js","../src/utils/verMgr.js","../src/components/shared/ElementSelectModal.js","../src/components/shared/ElementSelectButton.js","../src/components/fields/SelectElement.js","../src/components/fields/PropDrop.js","../src/components/fields/GenPropSelectMulti.js","../src/utils/vocUtils.js","../src/components/fields/GenProperties.js","../src/components/dnd/PanelDnD.js","../src/utils/template/visibility-handler.js","../src/utils/template/label-handler.js","../src/components/details/GenInterfaceContext.js","../src/components/layers/GenPropertiesLayer.js","../src/components/layers/GenPropertiesGroup.js","../src/components/layers/LayersLayout.js","../src/components/details/GenUIContext.js","../src/components/shared/DotProgressBar.js","../src/utils/template/flow-handler.js","../src/components/flow/ProgressOverview.js","../src/components/flow/ProgressFlowWrapper.js","../src/ui/modals/LayerModal.js","../src/utils/flow/initial-flow.js","../src/utils/flow/split-flow-elements.js","../src/components/tools/orten.js","../src/components/tools/useReducerWithCallback.js","../src/components/details/GeneralDescriptionFields.js","../src/components/details/ElementDetailsIdentifier.js","../src/components/details/ElementDetailsFields.js","../src/components/details/ResourceContextFields.js","../src/components/details/GenInterface.js","../src/components/designer/template/LayerGridView.js","../src/components/designer/template/LayerGridBtn.js","../src/ui/groups/useRestrictionForm.js","../src/ui/groups/OperatorSelector.js","../src/ui/groups/RestrictionFormCard.js","../src/ui/groups/SimpleLayerPanel.js","../src/ui/groups/SimpleLayerBlock.js","../src/ui/groups/SimpleGroupPanel.js","../src/ui/groups/SimpleGroupLayer.js","../src/ui/groups/NoticeBtn.js","../src/components/actions/GroupModal.js","../src/components/actions/GroupButton.js","../src/components/elements/GridSelect.js","../src/components/elements/SystemSelect.js","../src/components/elements/AttrChk.js","../src/components/elements/DefinedRenderer.js","../src/components/elements/GroupFields.js","../src/components/elements/LayerSelect.js","../src/components/elements/FieldSelect.js","../src/components/elements/TextFormula.js","../src/components/elements/TypeSelect.js","../src/utils/table/grid-config.js","../src/ui/tables/FieldTable.js","../src/components/designer/template/FieldRestrictionModal.js","../src/components/designer/template/ConditionFieldBtn.js","../src/components/designer/template/VocabForm.js","../src/components/elements/LayerSaveModal.js","../src/utils/vocMgr.js","../src/components/designer/template/NotificationMessage.js","../src/components/designer/template/VocabSaveBtn.js","../src/components/shared/LLabel.js","../src/components/fields/InputUnit.js","../src/components/fields/OntCmp.js","../src/components/elements/OntologySelect.js","../src/components/fields/ModalOntologySelect.js","../src/components/elements/Fields.js","../src/components/dnd/PositionDnD.js","../src/components/dnd/DnDs.js","../src/components/tools/collate.js","../src/utils/template/remodel-handler.js","../src/utils/template/prune-references.js","../src/utils/template/schema-validation.js","../src/utils/template/action-handler.js","../src/components/fields/ButtonDelField.js","../src/components/fields/ButtonEllipse.js","../src/components/elements/ElementField.js","../src/utils/template/condition-handler.js","../src/utils/template/field-handler.js","../src/components/designer/template/PropFields.js","../src/components/designer/template/NewFieldBtn.js","../src/components/designer/template/LayerForm.js","../src/utils/template/standard-validation.js","../src/components/designer/template/LayerSaveBtn.js","../src/components/designer/template/VocabGrid.js","../src/components/designer/template/VocabularyListBtn.js","../src/components/designer/template/ConditionsDisplay.js","../src/components/designer/template/FieldOrderContent.js","../src/components/designer/template/FieldOrderBtn.js","../src/components/designer/template/PropLayers.js","../src/components/admin/SelectAttrNewModal.js","../src/components/admin/SelectOption.js","../src/components/admin/renderDeleteButton.js","../src/components/admin/SelectOptionList.js","../src/components/admin/Selection.js","../src/components/admin/SelectOptionLayer.js","../src/components/elements/WorkflowModal.js","../src/components/flow/DnDNodes.js","../src/components/flow/DnDSidebar.js","../src/components/flow/LayerNode.js","../src/components/flow/NodeIcon.js","../src/utils/flow/arranged-flow-elements.js","../src/utils/flow/build-flow-elements.js","../src/components/flow/DnDFlow.js","../src/components/designer/WorkflowDesignBtn.js","../src/components/elements/UploadTemplateModal.js","../src/components/designer/UploadTemplateBtn.js","../src/components/shared/ResizablePanel.js","../src/components/designer/template/TemplateProps.js","../src/components/designer/preview/RevisionSelector.js","../src/components/designer/preview/VersionBlock.js","../src/ui/diff/JsonDiffCompact.js","../src/ui/diff/diffConstants.js","../src/ui/diff/jsonPreprocessor.js","../src/ui/diff/valueTransforms.js","../src/ui/diff/diffCalculator.js","../src/ui/diff/CellRenderers.js","../src/ui/diff/gridConfig.js","../src/ui/diff/JsonDiffTreeAgGrid.js","../src/components/designer/preview/CompareModal.js","../src/components/designer/preview/CompareButton.js","../src/components/designer/preview/FullScreenToggle.js","../src/components/designer/preview/ContributeTemplateButton.js","../src/components/designer/preview/PreviewNote.js","../src/components/designer/preview/ContributeTemplateModal.js","../src/components/designer/preview/PreviewFunctional.js","../src/components/designer/template/Template.js","../src/components/elements/UploadKlassModal.js","../src/components/designer/AttrUploadBtn.js","../src/components/details/renderers/RepoRenderer.js","../src/utils/extMgr.js","../src/components/repo/RepoGridDs.js","../src/components/repo/RepoGridSg.js","../src/components/repo/RepoGridEl.js","../src/components/repo/RepoNewModal.js","../src/components/repo/SyncButton.js","../src/components/designer/Designer.js","../src/components/actions/ArrangeContent.js","../src/components/actions/ButtonArrange.js","../src/components/flow/FlowDesigner.js","../src/components/actions/ButtonDraw.js","../src/components/flow/FlowView.js","../src/components/flow/FlowViewerBtn.js","../src/ui/common/FileExportButton.js","../src/components/icons/LoadingSpinner.js","../src/components/designer/preview/VersionModal.js","../src/components/designer/preview/VersionListBtn.js","../src/components/fields/ButtonReload.js","../src/components/fields/LToolbar.js","../src/components/flow/FlowViewerModal.js","../src/components/flow/Workflow.js","../src/models/DatasetFactory.js","../src/models/ElementFactory.js","../src/models/SegmentFactory.js","../src/components/elements/GenericElCriteriaModal.js","../src/components/elements/SegmentCriteria.js","../src/components/addon/DatasetMetadata.js","../src/components/designer/preview/Preview.js","../src/components/designer/preview/PreviewModal.js","../src/utils/unitHelpers.js","../src/ui/common/SysUnitButton.js","../src/utils/validate.js","../src/components/tools/source-finder.js","../src/components/tools/finder.js","../src/components/tools/action-utils.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form } from 'react-bootstrap';\n\nconst LFormGroup = ({ children, className, ...otherProps }) => (\n // eslint-disable-next-line react/jsx-props-no-spreading\n <Form.Group className={`mb-3 ${className || ''}`} {...otherProps}>\n {children}\n </Form.Group>\n);\n\nLFormGroup.propTypes = {\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n};\n\nLFormGroup.defaultProps = {\n className: '',\n};\n\nexport default LFormGroup;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { forwardRef, useImperativeHandle, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, InputGroup, Button } from 'react-bootstrap';\nimport LFormGroup from '@components/shared/LFormGroup';\n\nconst KlassAttrForm = forwardRef(({ element, editable }, ref) => {\n const kName = useRef();\n const kPrefix = useRef();\n const kLabel = useRef();\n const kIconname = useRef();\n const kDesc = useRef();\n\n useImperativeHandle(ref, () => ({\n k_name: kName.current,\n k_prefix: kPrefix.current,\n k_label: kLabel.current,\n k_iconname: kIconname.current,\n k_desc: kDesc.current,\n }));\n\n return (\n <Form className=\"row input-form\">\n <LFormGroup controlId=\"formControlKlass\">\n <InputGroup>\n <InputGroup.Text>Element</InputGroup.Text>\n <Form.Control\n type=\"text\"\n defaultValue={element.name}\n ref={kName}\n disabled={!editable}\n />\n </InputGroup>\n <div className=\"help\">\n Element must be at least 3 characters long and can not be longer than\n 10 characters\n <br />\n Element is only lowercase letters allowed\n <br />\n Element should not contain special characters like $, !, %, etc.\n </div>\n </LFormGroup>\n <LFormGroup controlId=\"formControlPrefix\">\n <InputGroup>\n <InputGroup.Text>Prefix</InputGroup.Text>\n <Form.Control\n type=\"text\"\n defaultValue={element.klass_prefix}\n ref={kPrefix}\n />\n </InputGroup>\n <div className=\"help\">\n Prefix is used to define the prefix of Element label\n <br />\n Prefix should not contain special characters like $, !, %, etc.\n </div>\n </LFormGroup>\n <LFormGroup controlId=\"formControlLabel\">\n <InputGroup>\n <InputGroup.Text>Element Label</InputGroup.Text>\n <Form.Control type=\"text\" defaultValue={element.label} ref={kLabel} />\n </InputGroup>\n </LFormGroup>\n <LFormGroup controlId=\"formControlIcon\">\n <InputGroup>\n <InputGroup.Text>Icon</InputGroup.Text>\n {element.icon_name ? (\n <InputGroup.Text>\n <i className={element.icon_name} />\n </InputGroup.Text>\n ) : null}\n <Form.Control\n type=\"text\"\n defaultValue={element.icon_name}\n ref={kIconname}\n />\n </InputGroup>\n <div className=\"help\">\n Icon is used to represent a particular element. Please use the icon\n code from\n <Button\n variant=\"link\"\n size=\"sm\"\n href=\"https://fontawesome.com/v4.7/icons/\"\n target=\"_blank\"\n >\n Font Awesome 4\n </Button>\n . The icon code format is like &lsquo; fa fa-abc &rsquo;.\n </div>\n </LFormGroup>\n <LFormGroup controlId=\"formControlDescription\">\n <InputGroup>\n <InputGroup.Text>Description</InputGroup.Text>\n <Form.Control type=\"text\" defaultValue={element.desc} ref={kDesc} />\n </InputGroup>\n </LFormGroup>\n </Form>\n );\n});\n\nKlassAttrForm.displayName = 'KlassAttrForm';\n\nKlassAttrForm.propTypes = {\n element: PropTypes.object.isRequired,\n editable: PropTypes.bool.isRequired,\n};\n\nexport default KlassAttrForm;\n","import React, { createContext, useContext } from 'react';\n\nconst DesignerContext = createContext();\n\nexport const DesignerProvider = ({ children, value }) => {\n return (\n <DesignerContext.Provider value={value}>\n {children}\n </DesignerContext.Provider>\n );\n};\n\nexport const useDesignerContext = () => {\n const context = useContext(DesignerContext);\n if (context === undefined) {\n throw new Error('useDesignerContext must be used within a DesignerProvider');\n }\n return context;\n};\n\nexport default DesignerContext;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { forwardRef, useImperativeHandle, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, InputGroup } from 'react-bootstrap';\nimport { sortBy } from 'lodash';\nimport LFormGroup from '@components/shared/LFormGroup';\nimport { useDesignerContext } from '@components/designer/DesignerContext';\n\nconst SegmentAttrForm = forwardRef(({ element, editable }, ref) => {\n const { klasses } = useDesignerContext();\n const kLabel = useRef();\n const kDesc = useRef();\n const kKlass = useRef();\n\n useImperativeHandle(ref, () => ({\n k_label: kLabel.current,\n k_desc: kDesc.current,\n k_klass: kKlass.current,\n }));\n\n const activeKlasses = klasses?.filter((k) => k.is_active !== false);\n const sortedKlasses = sortBy(activeKlasses, ['label']);\n const klassOptions = sortedKlasses?.map((k) => (\n <option key={k.id} value={k.id}>\n {k.label}\n </option>\n ));\n\n return (\n <Form className=\"row input-form\">\n <LFormGroup controlId=\"formControlLabel\">\n <InputGroup>\n <InputGroup.Text>Segment Label</InputGroup.Text>\n <Form.Control type=\"text\" defaultValue={element.label} ref={kLabel} />\n </InputGroup>\n </LFormGroup>\n <LFormGroup controlId=\"formControlDescription\">\n <InputGroup>\n <InputGroup.Text>Description</InputGroup.Text>\n <Form.Control type=\"text\" defaultValue={element.desc} ref={kDesc} />\n </InputGroup>\n </LFormGroup>\n <LFormGroup controlId=\"formControlAssignKlass\">\n <InputGroup>\n <InputGroup.Text>Assign to Element</InputGroup.Text>\n <Form.Control\n key={element?.element_klass?.id}\n as=\"select\"\n defaultValue={element?.element_klass?.id}\n ref={kKlass}\n disabled={!editable}\n readOnly={!editable}\n >\n {klassOptions}\n </Form.Control>\n </InputGroup>\n </LFormGroup>\n </Form>\n );\n});\n\nSegmentAttrForm.displayName = 'SegmentAttrForm';\n\nSegmentAttrForm.propTypes = {\n element: PropTypes.object.isRequired,\n editable: PropTypes.bool.isRequired,\n};\n\nexport default SegmentAttrForm;\n","/**\n * Creates an immutable enum object from an array of strings.\n *\n * The function takes an array of strings and creates an object where each key is\n * the uppercase version of the input string, and the value is the result of\n * calling a specified method on the string.\n *\n * @example\n * // Basic usage with default toString method\n * const Colors = createEnum(['red', 'green', 'blue']);\n * // Results in: { RED: 'red', GREEN: 'green', BLUE: 'blue' }\n *\n * @example\n * // Using a different String prototype method\n * const UppercaseEnum = createEnum(['foo', 'bar'], 'toUpperCase');\n * // Results in: { FOO: 'FOO', BAR: 'BAR' }\n */\nconst createEnum = (arr, fn = 'toString') =>\n Object.freeze(\n arr.reduce((acc, cur) => {\n acc[cur.toUpperCase()] = cur[fn]();\n return acc;\n }, {}),\n );\n\n/**\n * Converts a value to a number. Returns 0 if the value cannot be converted to a number.\n * If the value is falsy (e.g., null, undefined, empty string), it's treated as '0'.\n */\nconst toNum = (val) => {\n const parse = Number(val || '');\n return Number.isNaN(parse) ? 0 : parse;\n};\n\n/**\n * Converts a value to either null or an integer.\n *\n * @example\n * toNullOrInt('123'); // returns 123\n * toNullOrInt(123.99); // returns 123\n * toNullOrInt(0); // returns null (because 0 is falsy)\n * toNullOrInt(''); // returns null\n * toNullOrInt(null); // returns null\n * toNullOrInt('abc'); // returns null\n * toNullOrInt([]); // returns 0 (due to parse logic)\n */\nconst toNullOrInt = (val) => {\n if (val) {\n const parse = Number(val);\n return Number.isNaN(parse) ? null : parseInt(Number(val), 10);\n }\n return null;\n};\n\n/**\n * Converts a value to a boolean.\n *\n * Values are first converted to strings and then evaluated. Returns true for all values\n * except empty strings, and strings that exactly match 'false' or '0' (case-insensitive).\n *\n * @example\n * toBool(true); // returns true\n * toBool('true'); // returns true\n * toBool(1); // returns true\n * toBool('1'); // returns true\n * toBool('yes'); // returns true\n * toBool(null); // returns true ('null' is not empty)\n * toBool(undefined); // returns true ('undefined' is not empty)\n * toBool('any text'); // returns true\n * toBool(' false '); // returns true (not exactly 'false')\n *\n * toBool(false); // returns false\n * toBool('false'); // returns false\n * toBool('FALSE'); // returns false (case insensitive)\n * toBool(0); // returns false\n * toBool('0'); // returns false\n * toBool(''); // returns false\n * toBool([]); // returns false ([] becomes empty string)\n */\nconst toBool = (val) => {\n const valLower = String(val).toLowerCase();\n return !(!valLower || valLower === 'false' || valLower === '0');\n};\n\n/**\n * Builds a string by joining an array of inputs with a specified separator.\n */\nconst buildString = (inputs, separator = '-') => inputs.join(separator);\n\nconst normalizeUrl = (text) => {\n if (/^https?:\\/\\//i.test(text)) {\n return text;\n }\n return `https://${text}`;\n};\n\nconst parseTextWithLinks = (text) => {\n if (!text) {\n return [{ type: 'text', content: '' }];\n }\n const str = String(text); // <- ensures .matchAll exists\n // Examples:\n // http://localhost:3000/abc\n // https://127.0.0.1:8080/path\n // https://www.example.com/page\n const urlRegex =\n /\\b((https?:\\/\\/)?(www\\.)?((localhost)|([\\p{L}\\p{N}-]+\\.)+[\\p{L}]{2,}|(\\d{1,3}\\.){3}\\d{1,3})(:\\d+)?([\\/?#][^\\s]*)?)\\b/giu;\n const parts = [];\n let lastIndex = 0;\n\n for (const match of str.matchAll(urlRegex)) {\n const matchText = match[0];\n const start = match.index;\n const end = start + matchText.length;\n\n // Text before the URL\n if (start > lastIndex) {\n parts.push({ type: 'text', content: str.slice(lastIndex, start) });\n }\n\n // Detected URL part\n const normalizedUrl = normalizeUrl(matchText);\n parts.push({ type: 'link', content: matchText, href: normalizedUrl });\n\n lastIndex = end;\n }\n\n // Push the remaining text\n if (lastIndex < str.length) {\n parts.push({ type: 'text', content: str.slice(lastIndex) });\n }\n\n return parts;\n};\n\nconst editable = (editMode, fieldMode) => {\n if (editMode !== undefined) return editMode;\n return fieldMode !== undefined ? fieldMode : true;\n};\n\nconst modeClass = (isRead, isRequired) => {\n let className = isRead ? 'readonly' : 'editable';\n className = isRequired && !isRead ? 'required' : className;\n return className;\n};\n\nconst genericVariant = (generic) => {\n if (!generic) return null;\n const { element_type: elementType } = generic;\n if (!elementType) return 'Element';\n\n switch (elementType) {\n case 'Container':\n return 'Dataset';\n default:\n return 'Segment';\n }\n};\n\nconst fieldLabelFor = (availableLayers, layerKey, fieldKey) => {\n const layer = availableLayers?.find((l) => l.key === layerKey);\n const field = layer?.fields?.find((f) => f.field === fieldKey);\n return field?.label || fieldKey;\n};\n\nconst layerLabelFor = (availableLayers, layerKey) => {\n const layer = availableLayers?.find((l) => l.key === layerKey);\n return layer?.label || layerKey;\n};\n\nconst getConditionDisplay = (cond, availableLayers, klasses = []) => {\n if (cond.layer === 'SRC-EL') {\n const klass = klasses.find((k) => k.name === cond.value);\n return {\n layerTitle: 'Source (Source)',\n fieldTitle: 'TYPE',\n valueTitle: klass?.label || cond.value,\n };\n }\n return {\n layerTitle: `${layerLabelFor(availableLayers, cond.layer)} (${cond.layer})`,\n fieldTitle: fieldLabelFor(availableLayers, cond.layer, cond.field),\n valueTitle:\n typeof cond.value === 'boolean' ? String(cond.value) : cond.value,\n };\n};\n\nexport {\n createEnum,\n buildString,\n fieldLabelFor,\n layerLabelFor,\n normalizeUrl,\n toBool,\n toNum,\n toNullOrInt,\n parseTextWithLinks,\n editable,\n modeClass,\n genericVariant,\n getConditionDisplay,\n};\n","import { createEnum } from '@utils/pureUtils';\n\nexport default Object.freeze({\n BTN_AI_LINK: 'link',\n BTN_AI_UNLINK: 'unlink',\n IMG_NOT_AVAILABLE_SVG: '@assets/images/no_image.svg',\n NODE_TYPES: createEnum(['Input', 'Output', 'Default'], 'toLowerCase'),\n GENERIC_TYPES: createEnum([\n 'Element',\n 'Segment',\n 'Dataset',\n 'Layer',\n 'Vocabulary',\n ]),\n GENERIC_KLASS_TYPES: createEnum([\n 'ElementKlass',\n 'SegmentKlass',\n 'DatasetKlass',\n ]),\n GRID_THEME: {\n ALPINE: { VALUE: 'ag-theme-alpine', PAGE_SIZE: 6 },\n BALHAM: { VALUE: 'ag-theme-balham', PAGE_SIZE: 10 },\n QUARTZ: { VALUE: 'ag-theme-quartz', PAGE_SIZE: 6 },\n },\n MODEL_TYPES: createEnum(['GenericEl', 'Segment', 'Container']),\n SYS_REACTION: 'REACTION-',\n OLS_EBI: {\n BASE: 'https://www.ebi.ac.uk/ols4/api/select',\n PARAM: [\n 'rows=20',\n 'collection=efo',\n 'obsoletes=false',\n 'local=false',\n 'fieldList=id,iri,label,short_form,obo_id,ontology_name,ontology_prefix,description,type',\n ].join('&'),\n },\n OLS_TIB: {\n BASE: 'https://service.tib.eu/ts4tib/api/select',\n PARAM: [\n 'rows=20',\n 'collection=nfdi4chem',\n 'obsoletes=false',\n 'local=false',\n 'fieldList=id,iri,label,short_form,obo_id,ontology_name,ontology_prefix,description,type',\n ].join('&'),\n },\n MYDB: 'mydb',\n PERMIT_TARGET: {\n // CELL_LINE: 'cell_line',\n DEVICE_DESCRIPTION: 'device_description',\n ELEMENT: 'element',\n REACTION: 'reaction',\n RESEARCH_PLAN: 'research_plan',\n SCREEN: 'screen',\n WELLPLATE: 'wellplate',\n GENERIC_GRID: 'generic_grid',\n MOLECULE: 'molecule',\n SAMPLE: 'sample',\n },\n PROPS_RELEASE: 'properties_release',\n SEPARATOR_TAG: '@@',\n});\n","import React from 'react';\nimport { Tooltip } from 'react-bootstrap';\nimport KlassAttrForm from '@components/elements/KlassAttrForm';\nimport SegmentAttrForm from '@components/elements/SegmentAttrForm';\nimport Constants from '@components/tools/Constants';\n\nconst TipActive = (type) => (\n <Tooltip id=\"active_button\">\n This {type} is deactivated, press button to [activate]\n </Tooltip>\n);\nconst TipInActive = (type) => (\n <Tooltip id=\"disable_button\">\n This {type} is activated, press button to [deactivate]\n </Tooltip>\n);\nconst TipDelete = (type) => (\n <Tooltip id=\"delete_button\">\n Delete this {type}, after deletion, all elements are unaccessible\n </Tooltip>\n);\n\nconst Content = React.forwardRef((props, ref) => {\n switch (props.content) {\n case Constants.GENERIC_TYPES.SEGMENT:\n return (\n <SegmentAttrForm\n ref={ref}\n element={props.element}\n editable={props.editable}\n />\n );\n case Constants.GENERIC_TYPES.ELEMENT:\n return (\n <KlassAttrForm\n ref={ref}\n element={props.element}\n editable={props.editable}\n />\n );\n default:\n return <div>No content</div>;\n }\n});\n\nContent.displayName = 'Content';\n\nexport { Content, TipActive, TipInActive, TipDelete };\n","import cloneDeep from 'lodash/cloneDeep';\nimport { name, version } from '@root/package.json';\n\nexport default class Response {\n constructor(_notify, _element) {\n this.notify = _notify;\n // Avoid mutating the input object.\n // If _element is an object, we copy it and merge the pkg info.\n if (_element && typeof _element === 'object' && !Array.isArray(_element)) {\n this.element = cloneDeep(_element);\n this.element.pkg = Object.assign({}, this.element.pkg, { name, version });\n } else {\n this.element = _element;\n }\n }\n}\n","const successLevel = 'success';\nconst errorLevel = 'error';\n\nexport const notifyError = (msg = 'Operation error.', title = 'Error') => {\n return {\n msg,\n title,\n lvl: errorLevel,\n isSuccess: false,\n };\n};\n\nexport const notifySuccess = (\n msg = \"Operation successfully. Remember to save once you've finished editing.\",\n title = 'Success'\n) => {\n return {\n msg,\n title,\n lvl: successLevel,\n isSuccess: true,\n };\n};\n\nexport const notifyDummyAdd = (\n isSuccess = true,\n msg = 'add dummy field successfully',\n title = 'Add dummy field'\n) => (isSuccess ? notifySuccess(msg, title) : notifyError(msg, title));\n\nexport const notifyFieldAdd = (\n isSuccess = true,\n msg = 'add new field successfully',\n title = 'Add new field'\n) => (isSuccess ? notifySuccess(msg, title) : notifyError(msg, title));\n\nexport const notifyFieldRemove = (\n isSuccess = true,\n msg = 'remove field successfully',\n title = 'Remove field'\n) => (isSuccess ? notifySuccess(msg, title) : notifyError(msg, title));\n\nexport const notifyLayerUpdate = (\n info = { type: null, layerKey: null },\n msg = 'update layer successfully',\n title = 'Update layer'\n) => {\n const { type, layerKey } = info;\n switch (type) {\n case 'checkWorkflow':\n return notifyError(\n [\n `Cannot change the attribute 'used in Workflow?'`,\n `because this layer [${layerKey}] is currently used in workflow.`,\n ].join(' '),\n title,\n );\n case 'checkRestriction':\n return notifyError(\n [\n 'Cannot be used in Workflow',\n `because the Layer Restriction of this layer [${layerKey}] has been set.`,\n ].join(' '),\n title,\n );\n case 'checkGroup':\n return notifyError(\n [\n 'Cannot be used in Workflow',\n `because this layer [${layerKey}] is part of a group.`,\n ].join(' '),\n title,\n );\n default:\n return notifySuccess(msg, title);\n }\n};\n\nexport const notifySave = (isSuccess = true, msg = 'Save data successfully') =>\n isSuccess ? notifySuccess(msg) : notifyError(msg);\n","import { isLayerInWF } from 'generic-ui-core';\nimport {\n notifyError,\n notifyFieldAdd,\n notifyLayerUpdate,\n notifySuccess,\n} from '@utils/template/designer-message';\n\nexport const isValidKlass = klass => /\\b[a-z]{3,10}\\b/.test(klass);\nexport const isValidField = field => /^[a-zA-Z0-9_]*$/.test(field);\n\nexport const validateFieldName = _fieldKey => {\n if (_fieldKey === null || _fieldKey.trim().length === 0) {\n return notifyFieldAdd(false, 'please input field name first!');\n }\n if (!isValidField(_fieldKey)) {\n return notifyFieldAdd(\n false,\n 'only can be alphanumeric (a-z, A-Z, 0-9 and underscores).'\n );\n }\n return notifyFieldAdd();\n};\n\nexport const validateElementKlassInput = element => {\n if (!isValidKlass(element.name)) {\n return notifyError('Invalid Element Name.', `Element [${element.name}]`);\n }\n if (element.klass_prefix === '') {\n return notifyError('Invalid Prefix.', `Element [${element.name}]`);\n }\n if (element.label === '') {\n return notifyError(\n 'Invalid Element Label.',\n `Element [${element.name}]`\n );\n }\n if (element.icon_name === '') {\n return notifyError('Invalid Icon.', `Element [${element.name}]`);\n }\n return notifySuccess();\n};\n\nexport const validateSegmentKlassInput = element => {\n if (element.label === '') {\n return notifyError(\n 'Invalid Segment Label.',\n `Segment [${element.label}]`\n );\n }\n if (element.klass_element === '') {\n return notifyError(\n 'Invalid Element Assignment.',\n `Segment [${element.label}]`\n );\n }\n return notifySuccess();\n};\n\nexport const validateLayerDeletion = (_element, _delKey) => {\n if (isLayerInWF(_element, _delKey)) {\n return notifyError(\n `This layer [${_delKey}] can not be removed because it is currently used in workflow.`,\n `Layer [${_delKey}]`\n );\n }\n return notifySuccess(\n [\n 'Operation successfully.',\n \"Remember to save once you've finished editing.\",\n ].join(' ')\n );\n};\n\nexport const validateLayerInput = (layer, act = 'new') => {\n if (layer.key === '') {\n return notifyError('Please input Name.', `Layer [${layer.key}]`);\n }\n if (act === 'new' && !/^[a-z][a-z_]+[a-z]$/g.test(layer.key)) {\n return notifyError(\n 'This Name is invalid, please try a different one.',\n `Layer [${layer.key}]`\n );\n }\n if (parseInt(layer.cols || 1, 10) < 1) {\n return notifyError(\n 'The minimum number of columns per row is 1. Please enter a different value.',\n `Layer [${layer.key}]`\n );\n }\n return notifySuccess();\n};\n\nexport const validateLayerUpdate = (_element, _updates) => {\n const { key, wf } = _updates;\n if (isLayerInWF(_element, key)) {\n if (!wf) {\n return notifyLayerUpdate({ type: 'checkWorkflow', layerKey: key });\n }\n }\n const { layers } = _element.properties_template;\n if (wf && layers[key] && (layers[key].cond_fields || []).length > 0) {\n return notifyLayerUpdate({ type: 'checkRestriction', layerKey: key });\n }\n // check if layer is in a group\n const { metadata = {} } = _element;\n const group = metadata.groups?.find((g) => g.layers?.includes(key));\n if (wf && group) {\n return notifyLayerUpdate({ type: 'checkGroup', layerKey: key });\n }\n return notifyLayerUpdate();\n};\n\nexport const validateSelectList = (_element, _name) => {\n const selectName = _name;\n if (selectName === '') {\n return notifyError('Please input Name.', `Select List [${selectName}]`);\n }\n if (!/^[a-z][a-z_]+[a-z]$/g.test(selectName)) {\n return notifyError(\n 'This Name is invalid, please try a different one.',\n `Select List [${selectName}]`\n );\n }\n if (_element?.properties_template?.select_options?.[`${selectName}`]) {\n return notifyError(\n 'This name of Select List is already in use. Please choose another one.',\n `Select List [${selectName}]`\n );\n }\n\n return notifySuccess();\n};\n\nexport const validateOptionAdd = (optionKey, selectOptions) => {\n if (optionKey == null || optionKey.trim().length === 0) {\n return notifyError('Please input option name first!', 'Add new option');\n }\n if (selectOptions.filter(x => x.key === optionKey).length > 1) {\n return notifyError(\n `This option key [${optionKey}] is already in use. Please choose a different option key.`,\n 'Add new option'\n );\n }\n return notifySuccess();\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Modal, Button, ButtonGroup } from 'react-bootstrap';\nimport { Content } from '@components/elements/AttrForm';\nimport Constants from '@components/tools/Constants';\nimport Response from '@utils/response';\nimport {\n validateElementKlassInput,\n validateSegmentKlassInput,\n} from '@utils/template/input-validation';\n\nconst AttrModal = (props) => {\n const { actions, data, editable, genericType, showProps } = props;\n const { show, setShow } = showProps;\n const formRef = useRef();\n\n const handleCreate = (_fnAction) => {\n switch (genericType) {\n case Constants.GENERIC_TYPES.SEGMENT: {\n const inputs = {\n label: formRef.current.k_label.value.trim(),\n desc: formRef.current.k_desc.value.trim(),\n element_klass: formRef.current.k_klass.value,\n };\n const verify = validateSegmentKlassInput(inputs);\n _fnAction(new Response(verify, inputs));\n if (verify.isSuccess) setShow(false);\n break;\n }\n case Constants.GENERIC_TYPES.ELEMENT: {\n const inputs = {\n name: formRef.current.k_name.value.trim(),\n label: formRef.current.k_label.value.trim(),\n klass_prefix: formRef.current.k_prefix.value.trim(),\n icon_name: formRef.current.k_iconname.value.trim(),\n desc: formRef.current.k_desc.value.trim(),\n };\n const verify = validateElementKlassInput(inputs);\n _fnAction(new Response(verify, inputs));\n if (verify.isSuccess) setShow(false);\n break;\n }\n default:\n console.log(`Warning: ${genericType} is not supported.`);\n }\n };\n\n const handleCopy = (_fnAction) => {\n switch (genericType) {\n case Constants.GENERIC_TYPES.SEGMENT: {\n const updates = {\n label: formRef.current.k_label.value.trim(),\n desc: formRef.current.k_desc.value.trim(),\n element_klass: formRef.current.k_klass.value,\n };\n const inputs = { ...data, ...updates };\n const verify = validateSegmentKlassInput(inputs);\n _fnAction(new Response(verify, inputs));\n if (verify.isSuccess) setShow(false);\n break;\n }\n case Constants.GENERIC_TYPES.ELEMENT: {\n const updates = {\n name: formRef.current.k_name.value.trim(),\n label: formRef.current.k_label.value.trim(),\n klass_prefix: formRef.current.k_prefix.value.trim(),\n icon_name: formRef.current.k_iconname.value.trim(),\n desc: formRef.current.k_desc.value.trim(),\n };\n const inputs = { ...data, ...updates };\n const verify = validateElementKlassInput(inputs);\n _fnAction(new Response(verify, inputs));\n if (verify.isSuccess) setShow(false);\n break;\n }\n default:\n console.log(`Warning: ${genericType} is not supported.`);\n }\n };\n\n const handleDelete = (_fnAction) => {\n _fnAction(data);\n setShow(false);\n };\n\n const handleUpdate = (_fnAction) => {\n switch (genericType) {\n case Constants.GENERIC_TYPES.SEGMENT: {\n const updates = {\n label: formRef.current.k_label.value.trim(),\n desc: formRef.current.k_desc.value.trim(),\n };\n const inputs = { ...data, ...updates };\n const verify = validateSegmentKlassInput(inputs);\n _fnAction(new Response(verify, inputs));\n if (verify.isSuccess) setShow(false);\n break;\n }\n case Constants.GENERIC_TYPES.ELEMENT: {\n const updates = {\n label: formRef.current.k_label.value.trim(),\n klass_prefix: formRef.current.k_prefix.value.trim(),\n icon_name: formRef.current.k_iconname.value.trim(),\n desc: formRef.current.k_desc.value.trim(),\n };\n const inputs = { ...data, ...updates };\n const verify = validateElementKlassInput(inputs);\n _fnAction(new Response(verify, inputs));\n if (verify.isSuccess) setShow(false);\n break;\n }\n default:\n console.log(`Warning: ${genericType} is not supported.`);\n }\n };\n\n const actionBtn = (_action, _fnAction) => {\n let button = null;\n switch (_action) {\n case 'c':\n button = (\n <Button\n key={`_attr_modal_btn_${_action}`}\n variant=\"warning\"\n onClick={_fnAction ? () => handleCreate(_fnAction) : () => {}}\n >\n Create\n </Button>\n );\n break;\n case 'cc':\n button = (\n <Button\n key={`_attr_modal_btn_${_action}`}\n variant=\"warning\"\n onClick={_fnAction ? () => handleCopy(_fnAction) : () => {}}\n >\n Copy\n </Button>\n );\n break;\n case 'u':\n button = (\n <Button\n key={`_attr_modal_btn_${_action}`}\n variant=\"warning\"\n onClick={_fnAction ? () => handleUpdate(_fnAction) : () => {}}\n >\n Update\n </Button>\n );\n break;\n case 'd':\n button = (\n <Button\n key={`_attr_modal_btn_${_action}`}\n variant=\"danger\"\n onClick={_fnAction ? () => handleDelete(_fnAction) : () => {}}\n >\n Delete\n </Button>\n );\n break;\n default:\n button = null;\n }\n return button;\n };\n\n const addActions = () => {\n const buttons = [];\n actions.forEach((e) => {\n buttons.push(actionBtn(e.action, e.fnAction));\n buttons.push(<span key={`_attr_modal_span_${e.action}`}>&nbsp;</span>);\n });\n return buttons;\n };\n\n const addTitles = () => {\n const title = [];\n const mapping = { c: 'New', cc: 'Copy', u: 'Edit', d: 'Delete' };\n actions.map((e) => title.push(mapping[e.action]));\n return title.join('/').concat(' ').concat(genericType);\n };\n\n return (\n <>\n <Modal\n centered\n size=\"lg\"\n backdrop=\"static\"\n show={show}\n onHide={() => setShow(false)}\n >\n <Modal.Header closeButton>\n <Modal.Title>{addTitles()}</Modal.Title>\n </Modal.Header>\n <Modal.Body style={{ overflow: 'auto' }}>\n <div className=\"col-md-12\">\n <Content\n ref={formRef}\n content={genericType}\n element={data}\n editable={editable}\n />\n <Form className=\"row mb-3\">\n <Form.Group>\n {addActions()}\n <ButtonGroup>\n <Button variant=\"primary\" onClick={() => setShow(false)}>\n Close\n </Button>\n </ButtonGroup>\n </Form.Group>\n </Form>\n </div>\n </Modal.Body>\n </Modal>\n </>\n );\n};\n\nAttrModal.propTypes = {\n actions: PropTypes.arrayOf(\n PropTypes.shape({\n action: PropTypes.oneOf(['c', 'cc', 'u', 'd']),\n fnAction: PropTypes.func,\n })\n ).isRequired,\n data: PropTypes.object, // required for update action\n editable: PropTypes.bool,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n showProps: PropTypes.shape({\n show: PropTypes.bool.isRequired,\n setShow: PropTypes.func.isRequired,\n }).isRequired,\n};\n\nAttrModal.defaultProps = {\n data: {},\n editable: true,\n};\n\nexport default AttrModal;\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faAnglesDown,\n faAnglesUp,\n faArrowsAlt,\n faArrowCircleDown,\n faArrowDown,\n faArrowRight,\n faArrowRightToBracket,\n faArrowsRotate,\n faArrowUp,\n faArrowUpRightFromSquare,\n faArrowsLeftRight,\n faArrowsUpDownLeftRight,\n faBan,\n faBars,\n faBarsProgress,\n faBookOpen,\n faCaretDown,\n faCaretLeft,\n faCaretRight,\n faCaretUp,\n faChartDiagram,\n faCheck,\n faChevronDown,\n faChevronUp,\n faCircleArrowRight,\n faCircleCheck,\n faCircleInfo,\n faCirclePlus,\n faClockRotateLeft,\n faDiagramProject,\n faDownLeftAndUpRightToCenter,\n faDownload,\n faEllipsis,\n faEllipsisVertical,\n faExclamationCircle,\n faEye,\n faFlask,\n faFileExport,\n faFileImport,\n faFileLines,\n faFileWord,\n faGears,\n faGlobe,\n faGripLinesVertical,\n faLayerGroup,\n faLink,\n faList,\n faMagnifyingGlass,\n faMinus,\n faObjectGroup,\n faPaintbrush,\n faPaperclip,\n faPaperPlane,\n faPencil,\n faPlus,\n faReply,\n faRotate,\n faSpellCheck,\n faSpinner,\n faSquare,\n faT,\n faTag,\n faTableCells,\n faTableCellsLarge,\n faTimes,\n faTriangleExclamation,\n faUpRightAndDownLeftFromCenter,\n faExpandArrowsAlt,\n faCompressArrowsAlt,\n} from '@fortawesome/free-solid-svg-icons';\nimport {\n faChartBar,\n faClock,\n faClone,\n faCircleQuestion,\n faFloppyDisk,\n faPaste,\n faSquareCaretDown,\n faTrashCan,\n} from '@fortawesome/free-regular-svg-icons';\n\nconst icons = {\n faAnglesDown,\n faAnglesUp,\n faArrowsAlt,\n faArrowCircleDown,\n faArrowDown,\n faArrowRight,\n faArrowRightToBracket,\n faArrowsRotate,\n faArrowUp,\n faArrowUpRightFromSquare,\n faArrowsLeftRight,\n faArrowsUpDownLeftRight,\n faBan,\n faBars,\n faBarsProgress,\n faBookOpen,\n faCaretDown,\n faCaretLeft,\n faCaretRight,\n faCaretUp,\n faChartDiagram,\n faChartBar,\n faCheck,\n faChevronDown,\n faChevronUp,\n faClock,\n faClockRotateLeft,\n faCircleArrowRight,\n faCircleCheck,\n faCircleInfo,\n faCirclePlus,\n faCircleQuestion,\n faClone,\n faDiagramProject,\n faDownLeftAndUpRightToCenter,\n faDownload,\n faEllipsis,\n faEllipsisVertical,\n faExclamationCircle,\n faEye,\n faFlask,\n faFileExport,\n faFileImport,\n faFileLines,\n faFileWord,\n faFloppyDisk,\n faGears,\n faGlobe,\n faGripLinesVertical,\n faLayerGroup,\n faLink,\n faList,\n faMagnifyingGlass,\n faMinus,\n faObjectGroup,\n faPaintbrush,\n faPaperclip,\n faPaperPlane,\n faPaste,\n faPencil,\n faPlus,\n faReply,\n faRotate,\n faSpellCheck,\n faSquare,\n faSquareCaretDown,\n faT,\n faTag,\n faTableCells,\n faTableCellsLarge,\n faTimes,\n faExpandArrowsAlt,\n faCompressArrowsAlt,\n faTrashCan,\n faTriangleExclamation,\n faUpRightAndDownLeftFromCenter,\n};\n\nconst iconAnimated = {\n faSpinner,\n};\n\n// Main icons object\nconst iconsObject = Object.freeze(\n Object.fromEntries(\n Object.entries(icons).map(([key, value]) => [\n key,\n // eslint-disable-next-line react/jsx-key\n <FontAwesomeIcon icon={value} />,\n ]),\n ),\n);\n\n// Animated icons object\nconst animatedIconsObject = Object.freeze(\n Object.fromEntries(\n Object.entries(iconAnimated).map(([key, value]) => [\n key,\n // eslint-disable-next-line react/jsx-key\n <FontAwesomeIcon icon={value} spin />,\n ]),\n ),\n);\n\n// Final export\nexport default {\n ...iconsObject,\n ...animatedIconsObject,\n};\n","export default Object.freeze({\n // se: system error\n se00: 'Operation error.',\n se01: 'Response is missing expected code.',\n se02: 'Cannot connect to LabIMotion Template Hub.',\n se03: 'Unauthorized action.',\n se04: 'Invalid data.',\n // set: system error template\n set00: 'The template upload has failed due to mismatched data.',\n set01: 'The template upload has failed due to validation errors.',\n set02: 'The template upload has failed due to incorrect format.',\n // si: system info\n si00: 'If you need assistance, please contact us at chemotion-labimotion@lists.kit.edu.',\n // ss: system success\n ss00: 'Operation successfully.',\n ss01: 'Save data successfully.',\n ss02: 'Connect to LabIMotion Template Hub successfully.',\n ss03: 'Update Template successfully.',\n});\n","import MC from '@components/tools/MC';\nimport {\n notifyError,\n notifySuccess,\n} from '@utils/template/designer-message';\n\nconst capFirst = (str) => {\n if (typeof str !== 'string') {\n return '';\n }\n return str.replace(/^[a-z]/, (match) => match.toUpperCase());\n};\n\nconst pl = (count, singular) => {\n const irregulars = {\n data: 'data',\n };\n if (count <= 1) return singular;\n if (irregulars[singular]) return irregulars[singular];\n return singular.endsWith('s') ? singular : `${singular}s`;\n};\n\n// snakeToCamel\nconst s2c = (str) => {\n if (typeof str !== 'string') {\n return '';\n }\n return str\n .toLowerCase()\n .replace(/([-_][a-z])/g, (group) =>\n group.toUpperCase().replace('-', '').replace('_', '')\n );\n};\n\n// camelToSnake\nconst c2s = (str) => {\n if (typeof str !== 'string') {\n return '';\n }\n return str.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase();\n};\n\n// pascalToSnake\nconst p2s = (str) => {\n if (typeof str !== 'string') {\n return '';\n }\n return str\n .split(/(?=[A-Z])/)\n .join('_')\n .toLowerCase();\n};\n\n// messageCodeToResponse\nconst mc2res = (code, msg = '') => {\n if (!MC[code]) return notifyError();\n const isSuccess = /s/.test(code[1]);\n const finalMsg = msg ? `${MC[code]} ${msg}` : MC[code];\n return isSuccess ? notifySuccess(finalMsg) : notifyError(finalMsg);\n};\n\nconst mc2text = (code, msg = '') => {\n return `${MC[code] || ''} ${msg}`.trim();\n};\n\nconst bgColor = (color = 'default') => {\n switch (color) {\n case 'default':\n return 'lu-bg-light';\n case 'none':\n return 'lu-bg-white';\n default:\n return `bg-${color}`;\n }\n};\n\nexport { capFirst, pl, s2c, p2s, c2s, mc2res, mc2text, bgColor };\n","import React from 'react';\nimport { capFirst } from '@components/tools/format-utils';\n\nexport default Object.freeze({\n adjust_calculation: 'Adjust the calculation',\n add_entry: 'Add an entry',\n add_layer: 'Add a layer',\n arrange_field: 'Arrange fields order',\n arrange_layer: 'Arrange layers order',\n arrange_group_layer: 'Arrange groups & layers order',\n associate_direct: 'Associate with this sample',\n associate_duplicate: 'Duplicate the sample first and then associate with it',\n associate_split: 'Split from the sample first and then associate with it',\n change_position: 'Change position via drag and drop',\n chmo_changed: (\n <>\n Type (Chemical Methods Ontology) has been changed.\n <br />\n Please review this dataset content.\n </>\n ),\n clipboard: 'Copy to clipboard',\n clipboard_copied: 'Copied!',\n close: 'Close window',\n copy: (_in) => `Copy ${capFirst(_in)} to ...`,\n copy_to_duration: (\n <>\n use this duration\n <br />\n (rounded to precision 1)\n </>\n ),\n create: (_in) => `Create a new ${capFirst(_in)}`,\n create_element: 'Create a new Element',\n create_segment: 'Create a new Segment',\n create_dataset: 'Create a new Dataset',\n design_flow: 'Design a workflow',\n design_template: 'Click to design the template',\n docs: 'Documentation',\n draw_flow: 'Draw a custom workflow',\n dtl_expand: 'Expand details',\n dtl_collapse: 'Collapse details',\n edit_attr: (_in) => `Edit ${capFirst(_in)} attributes`,\n edit_layer_attr: (_in) => `Edit layer [${_in}] attributes`,\n export_docx: 'Export as docx file',\n export_tbl_xlsx: 'Export table as xlsx file',\n fl_defined: 'A workflow is defined',\n fl_view: 'View the predefined workflow',\n fld_add: 'Add a new field',\n fld_dum_add: 'Add a dummy field',\n grid_large: 'Enlarge grid size',\n grid_small: 'Shrink grid size',\n group_layer: 'Group layers and set conditions',\n link_element: 'Select an element to link it to this record',\n imp_element_n_temp: 'Import a element and its template',\n imp_segment_n_temp: 'Import a segment and its template',\n imp_dataset_n_temp: 'Import a dataset and its template',\n imp_temp_to_area: 'Import a Template into the Work Area',\n link_term: (_in) => (\n <>\n {_in} <br /> What is this?\n </>\n ),\n lyr_add2std: 'Add this layer to Standard Layer',\n lyr_add2tpl: 'Add this layer to the template',\n lyr_view: 'View this Layer',\n more_func: 'More functions',\n mv_up: 'Move Up',\n mv_down: 'Move Down',\n no_unit_conversion: [\n \"Units like 'Electrical potential' (V vs. CE, V vs. RE)\",\n 'and',\n \"'Specific current' (mA/g, mA/cm²) won’t be converted.\",\n ].join(' '),\n preview_or_versions: 'Click to preview or view version history',\n sel_add: 'Add a new selection list',\n sel_lyr2tpl: (\n <>\n Select from the Standard Layer and\n <br />\n apply it in the template\n </>\n ),\n sel_voc2tpl: (\n <>\n Select from the LabIMotion Vocabulary (Lab-Vocab) and\n <br />\n apply it in the template\n </>\n ),\n sel_opt_add: 'Add an option',\n scn_full: 'Full screen',\n scn_full_exit: 'Exit full screen',\n tpl_act: 'Activate this template (currently inactive)',\n tpl_de_act: 'De-activate this template (currently active)',\n tpl_edit: 'Edit this template',\n tpl_fetch: 'Fetch this template from Template Hub',\n tpl_ver_info: 'View version information',\n tpl_view_hub: 'View all templates in Template Hub',\n tpl_save_rel_major: (\n <>\n Save and Release template as major version\n <br />\n (version number X.Y, X is the major version)\n </>\n ),\n tpl_save_rel_minor: (\n <>\n Save and Release template as minor version\n <br />\n (version number X.Y, Y is the minor version)\n </>\n ),\n tpl_save_draft: 'Save as Draft',\n record_time: 'Record time',\n reload_temp: 'Click to reload the template',\n remove: 'Remove',\n remove_molecule: 'Remove this molecule',\n restriction_setting: 'Restriction Setting',\n restric_not_on_required: 'This required field cannot have restrictions.',\n return_to_list: 'Back to list',\n ver_download: 'Download this version',\n ver_retrieve: 'Retrieve this version',\n ver_view: 'View this version',\n voc_add: 'Add this into LabIMotion Vocabulary (Lab-Vocab)',\n voc_add2tpl: 'Add this LabIMotion Vocabulary (Lab-Vocab) to the template',\n});\n","import React, { useState, isValidElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { v4 as uuidv4 } from 'uuid';\nimport { Tooltip, OverlayTrigger } from 'react-bootstrap';\nimport TAs from '@components/tools/TAs';\n\nconst LTooltip = ({ idf, children, placement }) => {\n const idfs = idf.split('.');\n const [uId] = useState(`ltt_${idfs[0]}_${uuidv4()}`);\n const message =\n typeof TAs[idfs[0]] === 'function'\n ? TAs[idfs[0]](idfs[1])\n : TAs[idfs[0]] || 'No message';\n\n // Check if the child is a disabled button\n const isDisabled =\n isValidElement(children) && children.props && children.props.disabled;\n\n // Wrap disabled buttons in a span to allow tooltips to work\n const wrappedChildren = isDisabled ? (\n <span\n className=\"d-inline-flex\"\n style={{\n pointerEvents: 'auto',\n cursor: 'not-allowed',\n }}\n tabIndex={0}\n >\n {children}\n </span>\n ) : (\n children\n );\n\n return (\n <OverlayTrigger\n delayShow={1000}\n placement={placement || 'top'}\n overlay={<Tooltip id={uId}>{message || 'No message'}</Tooltip>}\n >\n {wrappedChildren}\n </OverlayTrigger>\n );\n};\n\nLTooltip.propTypes = {\n idf: PropTypes.string,\n children: PropTypes.node.isRequired,\n placement: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),\n};\n\nLTooltip.defaultProps = { idf: 'ltt', placement: 'top' };\n\nexport default LTooltip;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport AttrModal from '@components/elements/AttrModal';\nimport Constants from '@components/tools/Constants';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\n\nfunction AttrNewBtn(props) {\n const { fnCreate, genericType } = props;\n const [show, setShow] = useState(false);\n\n if (genericType === Constants.GENERIC_TYPES.DATASET) return null;\n\n return (\n <>\n <LTooltip idf={`create.${genericType.toLowerCase()}`}>\n <Button\n onClick={() => setShow(true)}\n variant=\"outline-secondary\"\n className=\"gu-btn-outline-secondary\"\n >\n {FIcons.faPlus}&nbsp;New\n </Button>\n </LTooltip>\n <AttrModal\n actions={[{ action: 'c', fnAction: fnCreate }]}\n genericType={genericType}\n showProps={{ show, setShow }}\n />\n </>\n );\n}\n\nAttrNewBtn.propTypes = {\n fnCreate: PropTypes.func.isRequired,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n};\n\nAttrNewBtn.defaultProps = {};\n\nexport default AttrNewBtn;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, ButtonGroup } from 'react-bootstrap';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\n\nconst GridToolbar = ({ btnNew, btnUpload, fnClickLarge, fnClickSmall, children }) => (\n <ButtonGroup className=\"ms-2\">\n {btnUpload}\n {btnNew}\n <LTooltip idf=\"grid_large\">\n <Button onClick={fnClickLarge} variant=\"outline-secondary\" className=\"gu-btn-outline-secondary\">\n {FIcons.faTableCellsLarge}\n </Button>\n </LTooltip>\n <LTooltip idf=\"grid_small\">\n <Button onClick={fnClickSmall} variant=\"outline-secondary\" className=\"gu-btn-outline-secondary\">\n {FIcons.faTableCells}\n </Button>\n </LTooltip>\n {children}\n </ButtonGroup>\n);\n\nGridToolbar.propTypes = {\n btnNew: PropTypes.element,\n btnUpload: PropTypes.element,\n fnClickLarge: PropTypes.func.isRequired,\n fnClickSmall: PropTypes.func.isRequired,\n};\n\nGridToolbar.defaultProps = { btnNew: null, btnUpload: null };\n\nexport default GridToolbar;\n","/* eslint-disable react/require-default-props */\n/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport AttrModal from '@components/elements/AttrModal';\nimport Constants from '@components/tools/Constants';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\n\nfunction AttrEditBtn(props) {\n const { data, fnSelect, fnDelete, fnEdit, genericType } = props;\n const [show, setShow] = useState(false);\n\n const onSelect = () => {\n fnSelect();\n setShow(true);\n };\n\n return (\n <>\n <LTooltip idf={`edit_attr.${genericType.toLowerCase()}`}>\n <Button variant=\"light\" size=\"sm\" onClick={onSelect}>\n {FIcons.faPencil}\n </Button>\n </LTooltip>\n <AttrModal\n actions={[\n { action: 'u', fnAction: fnEdit },\n { action: 'd', fnAction: fnDelete },\n ]}\n data={data}\n editable={false}\n fnAction={fnEdit}\n genericType={genericType}\n showProps={{ show, setShow }}\n />\n </>\n );\n}\n\nAttrEditBtn.propTypes = {\n data: PropTypes.object,\n fnDelete: PropTypes.func.isRequired,\n fnEdit: PropTypes.func.isRequired,\n fnSelect: PropTypes.func.isRequired,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n};\n\nAttrEditBtn.defaultProps = {};\n\nexport default AttrEditBtn;\n","/* eslint-disable react/require-default-props */\n/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport AttrModal from '@components/elements/AttrModal';\nimport Constants from '@components/tools/Constants';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\n\nfunction AttrCopyBtn(props) {\n const { data, fnCopy, fnSelect, genericType } = props;\n const [show, setShow] = useState(false);\n\n const onSelect = () => {\n fnSelect();\n setShow(true);\n };\n\n return (\n <>\n <LTooltip idf={`copy.${genericType.toLowerCase()}`}>\n <Button variant=\"light\" size=\"sm\" onClick={onSelect}>\n {FIcons.faClone}\n </Button>\n </LTooltip>\n <AttrModal\n actions={[{ action: 'cc', fnAction: fnCopy }]}\n data={data}\n editable\n fnAction={fnCopy}\n genericType={genericType}\n showProps={{ show, setShow }}\n />\n </>\n );\n}\n\nAttrCopyBtn.propTypes = {\n data: PropTypes.object,\n fnCopy: PropTypes.func.isRequired,\n fnSelect: PropTypes.func.isRequired,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n};\n\nAttrCopyBtn.defaultProps = {};\n\nexport default AttrCopyBtn;\n","import React, { forwardRef, useMemo, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport { v4 as uuidv4 } from 'uuid';\nimport TAs from '@components/tools/TAs';\n\nconst DEFAULT_DELAY = { show: 1000, hide: 0 };\nconst DEFAULT_PLACEMENT = 'top';\nconst DEFAULT_TRIGGER = ['hover', 'focus'];\n\nconst toDelayObject = (value) => {\n if (typeof value === 'number') {\n return { show: value, hide: 0 };\n }\n if (value && typeof value === 'object') {\n return {\n show: value.show ?? DEFAULT_DELAY.show,\n hide: value.hide ?? DEFAULT_DELAY.hide,\n };\n }\n return DEFAULT_DELAY;\n};\n\nconst resolveTooltipContent = (tooltip, tooltipId) => {\n if (tooltip !== undefined && tooltip !== null) {\n return tooltip;\n }\n if (!tooltipId) return null;\n\n const [base, rest] = tooltipId.split('.');\n const source = TAs[base];\n\n if (typeof source === 'function') {\n return source(rest);\n }\n\n return source ?? null;\n};\n\nconst TooltipButton = forwardRef(\n (\n {\n tooltip,\n tooltipId,\n placement,\n delay,\n trigger,\n overlayClassName,\n overlayProps,\n wrapperClassName,\n wrapperStyle,\n children,\n ...buttonProps\n },\n ref,\n ) => {\n const [overlayId] = useState(() => `tooltip-button-${uuidv4()}`);\n\n const tooltipContent = useMemo(\n () => resolveTooltipContent(tooltip, tooltipId),\n [tooltip, tooltipId],\n );\n\n const finalDelay = useMemo(() => toDelayObject(delay), [delay]);\n const finalPlacement = placement || DEFAULT_PLACEMENT;\n const finalTrigger = trigger || DEFAULT_TRIGGER;\n\n const computedButtonProps = { ...buttonProps, ref };\n\n const buttonElement = <Button {...computedButtonProps}>{children}</Button>;\n\n if (!tooltipContent) {\n return buttonElement;\n }\n\n const disabled = Boolean(computedButtonProps.disabled);\n\n const wrappedButton = disabled ? (\n <span\n className={['tooltip-button-wrapper', 'd-inline-flex', wrapperClassName]\n .filter(Boolean)\n .join(' ')}\n style={{\n pointerEvents: 'auto',\n cursor: 'not-allowed',\n ...wrapperStyle,\n }}\n tabIndex={0}\n >\n {buttonElement}\n </span>\n ) : (\n buttonElement\n );\n\n return (\n <OverlayTrigger\n delay={finalDelay}\n placement={finalPlacement}\n trigger={finalTrigger}\n overlay={\n <Tooltip\n id={overlayId}\n className={overlayClassName}\n {...overlayProps}\n >\n {tooltipContent}\n </Tooltip>\n }\n >\n {wrappedButton}\n </OverlayTrigger>\n );\n },\n);\n\nTooltipButton.displayName = 'TooltipButton';\n\nTooltipButton.propTypes = {\n tooltip: PropTypes.node,\n tooltipId: PropTypes.string,\n placement: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),\n delay: PropTypes.oneOfType([\n PropTypes.number,\n PropTypes.shape({\n show: PropTypes.number,\n hide: PropTypes.number,\n }),\n ]),\n trigger: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.arrayOf(PropTypes.string),\n ]),\n overlayClassName: PropTypes.string,\n overlayProps: PropTypes.object,\n wrapperClassName: PropTypes.string,\n wrapperStyle: PropTypes.object,\n children: PropTypes.node.isRequired,\n};\n\nTooltipButton.defaultProps = {\n tooltip: undefined,\n tooltipId: undefined,\n placement: DEFAULT_PLACEMENT,\n delay: DEFAULT_DELAY,\n trigger: DEFAULT_TRIGGER,\n overlayClassName: undefined,\n overlayProps: undefined,\n wrapperClassName: undefined,\n wrapperStyle: undefined,\n};\n\nexport default TooltipButton;\n\n/**\n * Usage example:\n *\n * <TooltipButton\n * tooltipId=\"sel_opt_add\"\n * placement=\"top\"\n * variant=\"primary\"\n * size=\"sm\"\n * onClick={handleClick}\n * >\n * {FIcons.faPlus} Add option\n * </TooltipButton>\n *\n * -- overlayClassName and overlayProps let you tweak the <Tooltip> itself—maybe add extra padding, switch the arrow color, or supply placement=\"auto\" with Popper options.\n *\n * <TooltipButton\n * tooltip=\"Upload failed\"\n * overlayClassName=\"tooltip-error\"\n * overlayProps={{ popperConfig: { modifiers: [{ name: 'offset', options: { offset: [0, 12] } }] } }}\n * >\n * Retry\n * </TooltipButton>\n *\n * -- wrapperClassName and wrapperStyle only matter when the button is disabled - these props let you control that span.\n *\n * <TooltipButton\n * tooltip=\"Requires admin privileges\"\n * disabled\n * wrapperClassName=\"disabled-btn-wrapper\"\n * wrapperStyle={{ display: 'inline-block', minWidth: 120 }}\n * >\n * Delete\n * </TooltipButton>\n */\n","import React from 'react';\nimport AttrEditBtn from '@components/designer/AttrEditBtn';\nimport AttrCopyBtn from '@components/designer/AttrCopyBtn';\nimport TooltipButton from '@ui/common/TooltipButton';\nimport FIcons from '@components/icons/FIcons';\n\nconst ActionRenderer = (params) => {\n const {\n data,\n fnCopy,\n fnDelete,\n fnEdit,\n fnDownload,\n node,\n genericType,\n } = params;\n\n const onSelect = () => {\n node.setSelected(true, true);\n };\n\n const onDownload = (e) => {\n node.setSelected(true, true);\n fnDownload(e);\n };\n\n return (\n <span className=\"d-inline-flex gap-1\">\n <AttrCopyBtn\n data={data}\n fnSelect={onSelect}\n fnCopy={fnCopy}\n genericType={genericType}\n />\n <AttrEditBtn\n data={data}\n fnSelect={onSelect}\n fnDelete={fnDelete}\n fnEdit={fnEdit}\n genericType={genericType}\n />\n <TooltipButton\n tooltip={`Export ${genericType} and its template`}\n placement=\"top\"\n delay={1000}\n overlayClassName=\"pre_line_tooltip\"\n size=\"sm\"\n variant=\"light\"\n onClick={() => onDownload(data)}\n >\n {FIcons.faFileExport}\n </TooltipButton>\n </span>\n );\n};\n\nexport default ActionRenderer;\n","import React, { memo } from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown } from 'react-bootstrap';\nimport FIcons from '@components/icons/FIcons';\nimport TooltipButton from '@ui/common/TooltipButton';\nimport TAs from '@components/tools/TAs';\n\nconst ButtonTooltip = memo((props) => {\n const {\n idf,\n bs,\n size,\n fnClick,\n element,\n place,\n fa,\n disabled,\n txt,\n btnCls,\n as,\n } = props;\n const content = txt ? <span>{txt} </span> : '';\n const conditionMenu = (\n <Dropdown.Item\n eventKey={`${idf}_menu_item`}\n onClick={() => fnClick(element)}\n >\n {FIcons[fa]}&nbsp;&nbsp;{TAs[idf]}\n </Dropdown.Item>\n );\n if (as === 'menu') {\n return conditionMenu;\n }\n return (\n <TooltipButton\n tooltipId={idf}\n placement={place}\n variant={bs || undefined}\n size={size || undefined}\n className={btnCls}\n disabled={disabled}\n onClick={(e) => {\n e.stopPropagation();\n fnClick(element);\n }}\n >\n {content === '' && FIcons[fa]}\n {content !== '' && (\n <>\n {FIcons[fa]}&nbsp;\n {content}\n </>\n )}\n </TooltipButton>\n );\n});\n\nButtonTooltip.propTypes = {\n idf: PropTypes.string,\n element: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n fnClick: PropTypes.func.isRequired,\n bs: PropTypes.string,\n size: PropTypes.string,\n place: PropTypes.string,\n fa: PropTypes.string,\n disabled: PropTypes.bool,\n txt: PropTypes.string,\n btnCls: PropTypes.string,\n as: PropTypes.string,\n};\n\nButtonTooltip.defaultProps = {\n idf: 'ltt',\n bs: 'light',\n size: undefined,\n place: 'top',\n fa: 'faPencil',\n disabled: false,\n txt: null,\n element: {},\n btnCls: '',\n as: 'button',\n};\n\nexport default ButtonTooltip;\n","import React from 'react';\nimport ButtonTooltip from '@components/fields/ButtonTooltip';\n\nconst attrs = {\n true: {\n tip: 'tpl_de_act',\n fa: 'faCheck',\n bs: 'light',\n cls: 'gu_btn_text_success',\n },\n false: {\n tip: 'tpl_act',\n fa: 'faBan',\n bs: 'light',\n cls: 'gu_btn_text_danger',\n },\n};\n\nconst ActiveRenderer = (params) => {\n const { data, fnDeActivate, node, value } = params;\n\n const onActivate = (e) => {\n node.setSelected(true, true);\n fnDeActivate(e);\n };\n\n return (\n <ButtonTooltip\n idf={attrs[value].tip}\n fnClick={onActivate}\n element={data}\n fa={attrs[value].fa}\n size=\"sm\"\n btnCls={attrs[value].cls}\n bs={attrs[value].bs}\n />\n );\n};\n\nexport default ActiveRenderer;\n","import React, { useState } from 'react';\nimport ButtonTooltip from '@components/fields/ButtonTooltip';\nimport { Modal, Button } from 'react-bootstrap';\nimport Constants from '@components/tools/Constants';\n\nconst InfoRenderer = ({ data, node, genericType }) => {\n const [show, setShow] = useState(false);\n\n const onShow = () => {\n setShow(true);\n };\n\n const handleClose = () => {\n setShow(false);\n };\n\n // Determine the custom field based on genericType\n const getCustomField = () => {\n if (genericType === Constants.GENERIC_TYPES.DATASET) {\n return {\n label: 'Term ID:',\n value: data?.ols_term_id || 'N/A',\n column: 'left'\n };\n } else {\n return {\n label: 'Description:',\n value: data?.desc || 'N/A',\n column: 'left'\n };\n }\n };\n\n const defaultFields = [\n {\n label: `${genericType}:`,\n value: data?.label || 'N/A',\n column: 'left'\n },\n getCustomField(),\n {\n label: 'Version:',\n value: data?.version || 'N/A',\n column: 'left'\n },\n {\n label: 'UUID:',\n value: data?.uuid || 'N/A',\n column: 'left',\n isCode: true\n },\n {\n label: 'Released At:',\n value: data?.released_at || 'N/A',\n column: 'right'\n },\n {\n label: 'Updated At:',\n value: data?.updated_at || 'N/A',\n column: 'right'\n },\n {\n label: 'Sync Time:',\n value: data?.sync_time || 'N/A',\n column: 'right'\n },\n {\n label: 'Identifier:',\n value: data?.identifier || 'N/A',\n column: 'right',\n isCode: true\n }\n ];\n\n const leftFields = defaultFields.filter(field => field.column === 'left');\n const rightFields = defaultFields.filter(field => field.column === 'right');\n\n const renderField = (field, index) => (\n <div key={index} className=\"mb-3\">\n <strong className=\"text-muted\">{field.label}</strong>\n <div className=\"mt-1\">\n {field.isCode ? (\n <code className=\"small\">{field.value}</code>\n ) : (\n field.value\n )}\n </div>\n </div>\n );\n\n return (\n <>\n <span className=\"d-inline-flex align-items-center gap-1\">\n <ButtonTooltip\n idf=\"tpl_ver_info\"\n fa=\"faTag\"\n fnClick={() => onShow()}\n size=\"sm\"\n bs=\"light\"\n txt={data?.version || ''}\n forceClose={show}\n />\n </span>\n <Modal\n show={show}\n backdrop=\"static\"\n keyboard={false}\n centered\n size=\"xl\"\n onHide={handleClose}\n >\n <Modal.Header closeButton>\n <Modal.Title>{`${genericType} Information`}</Modal.Title>\n </Modal.Header>\n <Modal.Body className=\"p-4\">\n {data ? (\n <div className=\"row\">\n <div className=\"col-md-6\">\n {leftFields.map(renderField)}\n </div>\n <div className=\"col-md-6\">\n {rightFields.map(renderField)}\n </div>\n </div>\n ) : (\n <div className=\"text-center text-muted\">\n <p>No detailed information available.</p>\n </div>\n )}\n </Modal.Body>\n <Modal.Footer className=\"justify-content-start\">\n <Button variant=\"secondary\" onClick={handleClose}>\n Close\n </Button>\n </Modal.Footer>\n </Modal>\n </>\n );\n};\n\nexport default InfoRenderer;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport FIcons from '@components/icons/FIcons';\n\nexport const LHText = ({ title, children }) => {\n return (\n <span>\n <span className=\"h5 d-inline\">{title}: </span>\n {children}\n </span>\n );\n};\n\nLHText.propTypes = {\n title: PropTypes.string.isRequired,\n children: PropTypes.node.isRequired,\n};\n\nexport const LWf = ({ wf = false }) => {\n if (!wf) return null;\n return <span>{FIcons.faChartDiagram}</span>;\n};\n\nLWf.propTypes = { wf: PropTypes.bool };\nLWf.defaultProps = { wf: false };\n","import React from 'react';\nimport ButtonTooltip from '@components/fields/ButtonTooltip';\nimport { LWf } from '@components/shared/LCom';\n\nconst WFLayerMark = ({ data }) => {\n if (!data || (!data.flow && !data.flowObject)) {\n return null;\n }\n\n return <LWf wf />;\n};\n\nconst TemplateRenderer = (params) => {\n const { data, fnShow, node } = params;\n\n const onShow = (e) => {\n node.setSelected(true, true);\n fnShow(e);\n };\n\n return (\n <span className=\"d-inline-flex align-items-center gap-1\">\n <ButtonTooltip\n idf=\"tpl_edit\"\n fa=\"faFileLines\"\n element={data}\n fnClick={onShow}\n size=\"sm\"\n bs=\"light\"\n />\n <WFLayerMark data={data.properties_template} />\n </span>\n );\n};\n\nexport default TemplateRenderer;\n","/* eslint-disable react/forbid-prop-types */\nimport React, {\n useCallback,\n useState,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport { AgGridReact } from 'ag-grid-react';\nimport Constants from '@components/tools/Constants';\n\nconst defaultColDef = {\n minWidth: 50,\n width: 150,\n filter: false,\n sortable: true,\n};\n\nconst GenGrid = ({ columnDefs, gridData, pageSize, theme, rowSelected, filterText, onSetAutoHeight, onClearSelection }) => {\n const [columns] = useState(columnDefs);\n const gridRef = useRef();\n const gridStyle = useMemo(() => ({ height: '80vh', width: '100%' }), []);\n const [rowData, setRowData] = useState(gridData || []);\n const selectedIdRef = useRef(null);\n\n const scrollToSelectedRow = useCallback(() => {\n if (!gridRef?.current?.api) return;\n\n const selectedNodes = gridRef.current.api.getSelectedNodes();\n if (selectedNodes.length > 0) {\n const node = selectedNodes[0];\n gridRef.current.api.ensureNodeVisible(node, 'top');\n }\n }, []);\n\n const setAutoHeight = useCallback(() => {\n if (gridRef?.current?.api) {\n setTimeout(() => {\n document.querySelector('#guiDesignerGrid').style.height = '80vh';\n }, 100);\n }\n }, []);\n\n // Expose setAutoHeight function to parent component\n useEffect(() => {\n if (onSetAutoHeight) {\n onSetAutoHeight(setAutoHeight);\n }\n }, [onSetAutoHeight, setAutoHeight]);\n\n const clearSelection = useCallback(() => {\n if (gridRef?.current?.api) {\n gridRef.current.api.deselectAll();\n selectedIdRef.current = null;\n }\n }, []);\n\n // Expose clearSelection function to parent component\n useEffect(() => {\n if (onClearSelection) {\n onClearSelection(clearSelection);\n }\n }, [onClearSelection, clearSelection]);\n\n const setFixedHeight = useCallback(() => {\n if (gridRef?.current?.api) {\n setTimeout(() => {\n document.querySelector('#guiDesignerGrid').style.height = '16vh';\n scrollToSelectedRow();\n }, 100);\n }\n }, []);\n\n useEffect(() => {\n if (rowSelected) {\n setFixedHeight();\n } else {\n setAutoHeight();\n }\n }, [rowSelected, setAutoHeight, setFixedHeight]);\n\n useEffect(() => {\n const currentSelected = gridRef?.current?.api?.getSelectedRows()?.[0];\n if (currentSelected?.id) {\n selectedIdRef.current = currentSelected.id;\n } else {\n selectedIdRef.current = null;\n }\n setRowData(gridData);\n requestAnimationFrame(() => {\n if (selectedIdRef.current && gridRef?.current?.api) {\n gridRef.current.api.forEachNode((node) => {\n if (node.data.id === selectedIdRef.current) {\n node.setSelected(true);\n }\n });\n }\n });\n }, [gridData]);\n\n useEffect(() => {\n if (gridRef?.current?.api) {\n gridRef.current.api.setGridOption('quickFilterText', filterText || '');\n }\n }, [filterText]);\n\n return (\n <>\n <div id=\"guiDesignerGrid\" style={gridStyle} className={theme}>\n <AgGridReact\n ref={gridRef}\n columnDefs={columns}\n defaultColDef={defaultColDef}\n rowSelection={{\n mode: 'singleRow',\n checkboxes: false,\n enableClickSelection: false,\n }}\n // paginationPageSize={pageSize}\n rowData={rowData}\n />\n </div>\n </>\n );\n};\n\nGenGrid.propTypes = {\n columnDefs: PropTypes.array.isRequired,\n gridData: PropTypes.array.isRequired,\n pageSize: PropTypes.number,\n theme: PropTypes.string,\n rowSelected: PropTypes.bool,\n filterText: PropTypes.string,\n onSetAutoHeight: PropTypes.func,\n onClearSelection: PropTypes.func,\n};\n\nGenGrid.defaultProps = {\n pageSize: Constants.GRID_THEME.BALHAM.PAGE_SIZE,\n theme: Constants.GRID_THEME.BALHAM.VALUE,\n rowSelected: false,\n};\n\nexport default GenGrid;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport ActionRenderer from '@components/details/renderers/ActionRenderer';\nimport ActiveRenderer from '@components/details/renderers/ActiveRenderer';\nimport InfoRenderer from '@components/details/renderers/InfoRenderer';\nimport TemplateRenderer from '@components/details/renderers/TemplateRenderer';\nimport GenGrid from '@components/details/GenGrid';\nimport Constants from '@components/tools/Constants';\n\nconst GTYPE = Constants.GENERIC_TYPES.ELEMENT;\n\nconst IconRenderer = (params) => {\n const { value, iconStyle } = params;\n return (\n <i\n className={value}\n aria-hidden=\"true\"\n style={iconStyle || { color: 'black' }}\n />\n );\n};\n\nconst GenGridEl = (props) => {\n const {\n gridData,\n pageSize,\n theme,\n fnCopyKlass,\n fnDeleteKlass,\n fnEditKlass,\n fnDeActivateKlass,\n fnDownloadKlass,\n fnShowProp,\n rowSelected,\n filterText,\n onSetAutoHeight,\n onClearSelection,\n } = props;\n\n const columnDefs = useMemo(\n () => [\n {\n hide: true,\n headerName: '#',\n valueFormatter: (params) => `${parseInt(params.node.id, 10) + 1}`,\n sortable: false,\n },\n {\n headerName: 'Action',\n cellRenderer: ActionRenderer,\n cellRendererParams: {\n fnCopy: fnCopyKlass,\n fnDelete: fnDeleteKlass,\n fnEdit: fnEditKlass,\n fnDownload: fnDownloadKlass,\n genericType: GTYPE,\n },\n sortable: false,\n },\n {\n headerName: 'Active',\n field: 'is_active',\n width: 100,\n cellRenderer: ActiveRenderer,\n cellRendererParams: { fnDeActivate: fnDeActivateKlass },\n },\n {\n field: 'name',\n },\n { headerName: 'Prefix', field: 'klass_prefix', width: 100 },\n { headerName: 'Element label', field: 'label', flex: 1 },\n {\n headerName: 'Icon',\n field: 'icon_name',\n width: 100,\n sortable: false,\n cellRenderer: IconRenderer,\n },\n { headerName: 'Description', field: 'desc', flex: 1 },\n {\n headerName: 'Template',\n cellRenderer: TemplateRenderer,\n width: 100,\n cellRendererParams: { fnShow: fnShowProp }, // , fnShowJson: fnShowPropJson\n sortable: false,\n },\n {\n headerName: 'Ver. Info',\n cellRenderer: InfoRenderer,\n width: 100,\n cellRendererParams: { genericType: GTYPE },\n sortable: false,\n },\n ],\n [\n fnCopyKlass,\n fnDeleteKlass,\n fnEditKlass,\n fnDownloadKlass,\n fnDeActivateKlass,\n fnShowProp,\n ]\n );\n\n return (\n <GenGrid\n columnDefs={columnDefs}\n gridData={gridData}\n pageSize={pageSize}\n theme={theme}\n rowSelected={rowSelected}\n filterText={filterText}\n onSetAutoHeight={onSetAutoHeight}\n onClearSelection={onClearSelection}\n />\n );\n};\n\nGenGridEl.propTypes = {\n gridData: PropTypes.array.isRequired,\n fnCopyKlass: PropTypes.func.isRequired,\n fnDeActivateKlass: PropTypes.func.isRequired,\n fnDownloadKlass: PropTypes.func.isRequired,\n fnDeleteKlass: PropTypes.func.isRequired,\n fnEditKlass: PropTypes.func.isRequired,\n fnShowProp: PropTypes.func.isRequired,\n // fnShowPropJson: PropTypes.func.isRequired,\n pageSize: PropTypes.number,\n theme: PropTypes.string,\n filterText: PropTypes.string,\n rowSelected: PropTypes.bool,\n onSetAutoHeight: PropTypes.func,\n onClearSelection: PropTypes.func,\n};\n\nGenGridEl.defaultProps = {\n pageSize: 10,\n theme: Constants.GRID_THEME.QUARTZ.VALUE,\n};\n\nexport default GenGridEl;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport ActionRenderer from '@components/details/renderers/ActionRenderer';\nimport ActiveRenderer from '@components/details/renderers/ActiveRenderer';\nimport InfoRenderer from '@components/details/renderers/InfoRenderer';\nimport TemplateRenderer from '@components/details/renderers/TemplateRenderer';\nimport GenGrid from '@components/details/GenGrid';\nimport Constants from '@components/tools/Constants';\n\nconst GTYPE = Constants.GENERIC_TYPES.SEGMENT;\n\nconst BelongsToRenderer = (params) => {\n const { data } = params;\n return (\n <>\n {data.element_klass?.label}\n &nbsp;\n <i className={data.element_klass?.icon_name} aria-hidden=\"true\" />\n </>\n );\n};\n\nconst GenGridSg = (props) => {\n const {\n gridData,\n pageSize,\n theme,\n fnCopyKlass,\n fnDeleteKlass,\n fnEditKlass,\n fnDeActivateKlass,\n fnDownloadKlass,\n fnShowProp,\n rowSelected,\n filterText,\n onSetAutoHeight,\n onClearSelection,\n } = props;\n\n const columnDefs = useMemo(\n () => [\n {\n hide: true,\n headerName: '#',\n valueFormatter: (params) => `${parseInt(params.node.id, 10) + 1}`,\n sortable: false,\n },\n {\n headerName: 'Action',\n cellRenderer: ActionRenderer,\n cellRendererParams: {\n fnCopy: fnCopyKlass,\n fnDelete: fnDeleteKlass,\n fnEdit: fnEditKlass,\n fnDownload: fnDownloadKlass,\n genericType: GTYPE,\n },\n sortable: false,\n },\n {\n headerName: 'Active',\n field: 'is_active',\n width: 100,\n cellRenderer: ActiveRenderer,\n cellRendererParams: { fnDeActivate: fnDeActivateKlass },\n },\n { headerName: 'Segment label', field: 'label', flex: 1 },\n { headerName: 'Description', field: 'desc', flex: 1 },\n {\n headerName: 'Belongs to',\n field: 'element_klass.name',\n width: 100,\n cellRenderer: BelongsToRenderer,\n },\n {\n headerName: 'Template',\n cellRenderer: TemplateRenderer,\n width: 100,\n cellRendererParams: { fnShow: fnShowProp },\n sortable: false,\n },\n {\n headerName: 'Ver. Info.',\n cellRenderer: InfoRenderer,\n width: 100,\n cellRendererParams: { genericType: GTYPE },\n sortable: false,\n },\n ],\n [\n fnCopyKlass,\n fnDeleteKlass,\n fnEditKlass,\n fnDownloadKlass,\n fnDeActivateKlass,\n fnShowProp,\n ]\n );\n\n return (\n <GenGrid\n columnDefs={columnDefs}\n gridData={gridData}\n pageSize={pageSize}\n theme={theme}\n rowSelected={rowSelected}\n filterText={filterText}\n onSetAutoHeight={onSetAutoHeight}\n onClearSelection={onClearSelection}\n />\n );\n};\n\nGenGridSg.propTypes = {\n gridData: PropTypes.array.isRequired,\n fnCopyKlass: PropTypes.func.isRequired,\n fnDeActivateKlass: PropTypes.func.isRequired,\n fnDownloadKlass: PropTypes.func.isRequired,\n fnDeleteKlass: PropTypes.func.isRequired,\n fnEditKlass: PropTypes.func.isRequired,\n fnShowProp: PropTypes.func.isRequired,\n // fnShowPropJson: PropTypes.func.isRequired,\n pageSize: PropTypes.number,\n theme: PropTypes.string,\n filterText: PropTypes.string,\n rowSelected: PropTypes.bool,\n onSetAutoHeight: PropTypes.func,\n onClearSelection: PropTypes.func,\n};\n\nGenGridSg.defaultProps = {\n pageSize: 10,\n theme: Constants.GRID_THEME.QUARTZ.VALUE,\n};\n\nexport default GenGridSg;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport ActiveRenderer from '@components/details/renderers/ActiveRenderer';\nimport InfoRenderer from '@components/details/renderers/InfoRenderer';\nimport TemplateRenderer from '@components/details/renderers/TemplateRenderer';\nimport GenGrid from '@components/details/GenGrid';\nimport Constants from '@components/tools/Constants';\n\nconst GTYPE = Constants.GENERIC_TYPES.DATASET;\n\nconst GenGridDs = (props) => {\n const { gridData, pageSize, theme, fnDeActivateKlass, fnShowProp, rowSelected, filterText, onSetAutoHeight, onClearSelection } = props;\n const columnDefs = useMemo(\n () => [\n {\n hide: true,\n headerName: '#',\n valueFormatter: (params) => `${parseInt(params.node.id, 10) + 1}`,\n sortable: false,\n },\n {\n headerName: 'Active',\n field: 'is_active',\n width: 100,\n cellRenderer: ActiveRenderer,\n cellRendererParams: { fnDeActivate: fnDeActivateKlass },\n },\n {\n headerName: 'Chemical Methods Ontology',\n field: 'label',\n flex: 1,\n },\n {\n headerName: 'Template',\n cellRenderer: TemplateRenderer,\n width: 100,\n cellRendererParams: { fnShow: fnShowProp }, // fnShowJson: fnShowPropJson\n sortable: false,\n },\n {\n headerName: 'Ver. Info.',\n cellRenderer: InfoRenderer,\n width: 100,\n cellRendererParams: { genericType: GTYPE },\n sortable: false,\n },\n ],\n [fnDeActivateKlass, fnShowProp]\n );\n\n return (\n <GenGrid\n columnDefs={columnDefs}\n gridData={gridData}\n pageSize={pageSize}\n theme={theme}\n rowSelected={rowSelected}\n filterText={filterText}\n onSetAutoHeight={onSetAutoHeight}\n onClearSelection={onClearSelection}\n />\n );\n};\n\nGenGridDs.propTypes = {\n gridData: PropTypes.array.isRequired,\n fnDeActivateKlass: PropTypes.func.isRequired,\n fnShowProp: PropTypes.func.isRequired,\n // fnShowPropJson: PropTypes.func.isRequired,\n pageSize: PropTypes.number,\n theme: PropTypes.string,\n filterText: PropTypes.string,\n rowSelected: PropTypes.bool,\n onSetAutoHeight: PropTypes.func,\n onClearSelection: PropTypes.func,\n};\n\nGenGridDs.defaultProps = {\n pageSize: 10,\n theme: Constants.GRID_THEME.QUARTZ.VALUE,\n};\n\nexport default GenGridDs;\n","import Constants from '@components/tools/Constants';\n\nconst getPageSizeForTheme = themeName => {\n const theme = Object.values(Constants.GRID_THEME).find(\n obj => obj.VALUE === themeName\n );\n return theme?.PAGE_SIZE || 6;\n};\n\nexport default getPageSizeForTheme;\n","export default Object.freeze({\n DOC_SITE: 'https://www.chemotion.net/docs/labimotion',\n});\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, ButtonGroup, Tooltip, OverlayTrigger } from 'react-bootstrap';\nimport DocuConst from '@components/tools/DocuConst';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\n\nconst TemplateBar = (props) => {\n const { notify, active, fnSwitch } = props;\n const [show, setShow] = useState(false);\n\n useEffect(() => {\n setShow(notify !== null && Object.keys(notify || {}).length > 0);\n }, [notify]);\n\n const onClick = (event) => {\n event.stopPropagation();\n setShow(false);\n };\n\n return (\n <span className=\"gu-designer-template-bar\">\n <ButtonGroup>\n <LTooltip idf=\"design_template\">\n <Button\n className={active === 'w' ? 'border-secondary' : ''}\n variant={active === 'w' ? 'secondary' : 'light'}\n onClick={() => fnSwitch('w')}\n active={active === 'w'}\n >\n Work Area\n </Button>\n </LTooltip>\n <LTooltip idf=\"preview_or_versions\">\n <Button\n className={active === 'p' ? 'border-secondary' : ''}\n variant={active === 'p' ? 'secondary' : 'light'}\n onClick={() => fnSwitch('p')}\n active={active === 'p'}\n >\n Preview, Revisions & Share\n </Button>\n </LTooltip>\n </ButtonGroup>\n <OverlayTrigger\n delayShow={1000}\n placement=\"top\"\n overlay={<Tooltip id=\"_designer_doc_tooltip\">Learn more</Tooltip>}\n >\n <Button\n variant=\"link\"\n href={[DocuConst.DOC_SITE, 'designer', 'template-features'].join('/')}\n target=\"_blank\"\n onClick={(e) => e.stopPropagation()}\n >\n {FIcons.faCircleQuestion}\n </Button>\n </OverlayTrigger>\n {show && notify !== null && (\n <span\n className={`alert ${\n notify.isSuccess ? 'alert-success' : 'alert-danger'\n } mb-0 ml-2`}\n >\n <span>\n <b>{notify.title}</b>\n {`: ${notify.msg}`}\n </span>\n <Button size=\"sm\" onClick={onClick} variant=\"light\">\n {FIcons.faTimes}\n </Button>\n </span>\n )}\n </span>\n );\n};\n\nTemplateBar.propTypes = {\n notify: PropTypes.object,\n active: PropTypes.string,\n fnSwitch: PropTypes.func.isRequired,\n};\nTemplateBar.defaultProps = { notify: null, active: 'w' };\nexport default TemplateBar;\n","const fbc = 'd-flex justify-content-between align-items-center';\n\nexport default fbc;\n","import { v4 as uuid } from 'uuid';\n\nexport default class GenericSubField {\n constructor(args) {\n Object.assign(this, args);\n if (!this.id) {\n this.id = GenericSubField.buildID();\n }\n }\n\n static buildID() {\n return uuid();\n }\n}\n","import GenericSubField from '@components/models/GenericSubField';\n\nexport default class Field extends GenericSubField {\n constructor(args) {\n super({\n default: '',\n field: '',\n label: '',\n position: 0,\n required: false,\n sub_fields: [],\n text_sub_fields: [],\n // type: '',\n ...args,\n });\n }\n}\n","import Field from '@components/models/Field';\n\nexport default class Layer {\n constructor(args) {\n this.ai = [];\n this.color = 'none';\n this.cols = 1;\n this.label = '';\n this.position = 0;\n this.style = 'panel_generic_heading';\n this.wf = false;\n this.wf_position = 0;\n\n Object.assign(this, args);\n if (!this.key) {\n this.key = args.sys ? `${args.sys}-${Layer.buildID()}` : Layer.buildID();\n }\n this.fields = [];\n }\n\n static buildID() {\n return Date.now().toString();\n }\n\n addField(args) {\n const field = new Field(args);\n this.fields.push(field);\n }\n}\n","import sortBy from 'lodash/sortBy';\nimport { reUnit, FieldTypes, orgLayerObject } from 'generic-ui-core';\n\n/**\n * Reorder positions sequentially for groups and layers\n * Assigns sequential positions (0, 1, 2, 3...) to groups and ungrouped layers\n * based on their current position order.\n * Grouped layers inherit their parent group's position.\n * Returns updated positions\n */\nexport const reorderPositions = (layersObj, metadata) => {\n const groups = metadata.groups || [];\n const allLayers = { ...layersObj };\n\n // Get layers that belong to groups\n const groupedLayersSet = new Set();\n groups.forEach((group) => {\n group.layers?.forEach((layerKey) => groupedLayersSet.add(layerKey));\n });\n\n // Get ungrouped layers\n const ungroupedLayers = Object.values(allLayers).filter(\n (layer) => !groupedLayersSet.has(layer.key),\n );\n\n // Create mixed array sorted by current position\n const items = [\n ...groups.map((group) => ({\n type: 'group',\n data: group,\n position: group.position || 0,\n })),\n ...ungroupedLayers.map((layer) => ({\n type: 'layer',\n data: layer,\n position: layer.position || 0,\n })),\n ];\n const sortedItems = sortBy(items, 'position');\n\n // Reassign sequential positions\n const updatedGroups = [...groups];\n const updatedLayers = { ...allLayers };\n\n sortedItems.forEach((item, index) => {\n if (item.type === 'group') {\n const groupIndex = updatedGroups.findIndex((g) => g.id === item.data.id);\n if (groupIndex !== -1) {\n updatedGroups[groupIndex] = {\n ...updatedGroups[groupIndex],\n position: index,\n };\n // Update grouped layers to have the same position as their group\n updatedGroups[groupIndex].layers?.forEach((layerKey) => {\n if (updatedLayers[layerKey]) {\n updatedLayers[layerKey] = {\n ...updatedLayers[layerKey],\n position: index,\n };\n }\n });\n }\n } else if (item.type === 'layer') {\n const layerKey = item.data.key;\n if (updatedLayers[layerKey]) {\n updatedLayers[layerKey] = {\n ...updatedLayers[layerKey],\n position: index,\n };\n }\n }\n });\n\n return {\n layers: updatedLayers,\n metadata:\n updatedGroups.length > 0 ? { ...metadata, groups: updatedGroups } : {},\n };\n};\n\nexport const handleSaveSorting = (_element) => {\n const element = _element;\n Object.keys(element.properties_template.layers).forEach((key) => {\n const layer = element.properties_template.layers[key];\n let sortedFields = layer?.fields || [];\n (sortedFields || []).forEach((f, idx) => {\n const fd = f;\n fd.position = idx + 1;\n if (fd.type === FieldTypes.F_SYSTEM_DEFINED) {\n fd.option_layers = reUnit(fd.option_layers);\n }\n fd.required = [FieldTypes.F_INTEGER, FieldTypes.F_TEXT].includes(fd.type)\n ? fd.required\n : false;\n fd.sub_fields = [\n FieldTypes.F_INPUT_GROUP,\n FieldTypes.F_TABLE,\n FieldTypes.F_SELECT_MULTI,\n FieldTypes.F_DATETIME_RANGE,\n ].includes(fd.type)\n ? fd.sub_fields\n : [];\n if (fd.type !== FieldTypes.F_TEXT_FORMULA) {\n fd.text_sub_fields = [];\n }\n return fd;\n });\n sortedFields = sortBy(sortedFields, (l) => l.position);\n element.properties_template.layers[key].wf_position = 0;\n element.properties_template.layers[key].fields = sortedFields;\n });\n\n const reordered = reorderPositions(\n element.properties_template.layers,\n element.metadata || {},\n );\n element.metadata = reordered.metadata;\n element.properties_template.layers = reordered.layers;\n return element;\n};\n\n// TO-BE: replace layerDrop of GenInterface\nexport const layerDrop = (_generic, _source, _target) => {\n const [generic, source, target] = [_generic, _source, _target];\n if (source === target) return generic;\n const { layers } = generic.properties;\n\n const srcIdx = layers.findIndex((e) => e.key === source);\n if (srcIdx !== -1) {\n const tarIdx = layers.findIndex((e) => e.key === target);\n const [movedObject] = layers.splice(srcIdx, 1);\n layers.splice(tarIdx, 0, movedObject);\n\n // re-count wf_position\n layers\n .filter((e) => e.position === movedObject.position)\n .map((e, idx) => {\n const el = e;\n el.wf_position = idx;\n return el;\n });\n\n const sortedLayers = sortBy(layers, ['position', 'wf_position']);\n const orgLayers = orgLayerObject(sortedLayers);\n generic.properties.layers = orgLayers;\n generic.changed = true;\n }\n return generic;\n};\n","/**\n * Get all layers that are already assigned to any group\n */\nconst getAssignedLayers = (groups) => {\n const assignedLayers = new Set();\n groups.forEach((group) => {\n if (group.layers && Array.isArray(group.layers)) {\n group.layers.forEach((layer) => assignedLayers.add(layer));\n }\n });\n return assignedLayers;\n};\n\n/**\n * Get the group that contains a specific layer\n */\nconst getGroupByLayer = (groups, layerKey) => {\n if (!groups || !Array.isArray(groups) || !layerKey) {\n return null;\n }\n return (\n groups.find(\n (group) =>\n group.layers &&\n Array.isArray(group.layers) &&\n group.layers.includes(layerKey),\n ) || null\n );\n};\n\n/**\n * Get the group information for a specific layer\n */\nconst getGroupInfoByLayer = (metadata, layerKey) => {\n if (!metadata || !layerKey) {\n return null;\n }\n\n const groups = metadata.groups || [];\n const restrictions = metadata.restrict || {};\n\n const group = getGroupByLayer(groups, layerKey);\n if (!group) {\n return null;\n }\n\n return {\n group,\n restrict: restrictions[group.id] || null,\n };\n};\n\n/**\n * Move a group to a new position\n */\nconst moveGroup = (groups, sourceGroupId, targetGroupId) => {\n if (!groups || !Array.isArray(groups) || groups.length === 0) {\n return groups;\n }\n\n const sourceIndex = groups.findIndex((g) => g.id === sourceGroupId);\n const targetIndex = groups.findIndex((g) => g.id === targetGroupId);\n\n if (sourceIndex === -1 || targetIndex === -1) {\n return groups;\n }\n\n // Create a copy of groups array\n const updatedGroups = [...groups];\n\n // Swap positions\n const sourceGroup = { ...updatedGroups[sourceIndex] };\n const targetGroup = { ...updatedGroups[targetIndex] };\n\n const tempPosition = sourceGroup.position;\n sourceGroup.position = targetGroup.position;\n targetGroup.position = tempPosition;\n\n updatedGroups[sourceIndex] = sourceGroup;\n updatedGroups[targetIndex] = targetGroup;\n\n return updatedGroups;\n};\n\n/**\n * Validate if layers can be added to a group\n * Validation result with isValid and error message\n */\nconst validateLayers = (layers, klassLayers, existingGroups) => {\n if (!layers || !Array.isArray(layers) || layers.length === 0) {\n return { isValid: false, error: 'No layers provided' };\n }\n\n // Check if all layers exist in klass.json\n const invalidLayers = layers.filter((layer) => !klassLayers[layer]);\n if (invalidLayers.length > 0) {\n return {\n isValid: false,\n error: `Layers not found in klass.json: ${invalidLayers.join(', ')}`,\n };\n }\n\n // Check if any layer is already assigned to another group\n const assignedLayers = getAssignedLayers(existingGroups);\n const alreadyAssigned = layers.filter((layer) => assignedLayers.has(layer));\n if (alreadyAssigned.length > 0) {\n return {\n isValid: false,\n error: `Layers already assigned to another group: ${alreadyAssigned.join(', ')}`,\n };\n }\n\n return { isValid: true };\n};\n\n/**\n * Add a new group to the groups array\n * Result object with success status and message\n */\nconst addGroup = (groups, group, klassLayers) => {\n // Validate group structure\n if (!group || typeof group !== 'object') {\n return { success: false, error: 'Invalid group object' };\n }\n\n if (!group.id) {\n return { success: false, error: 'Group must have an id' };\n }\n\n if (!group.label) {\n return { success: false, error: 'Group must have a label' };\n }\n\n // Check if group with same id already exists\n if (groups.some((g) => g.id === group.id)) {\n return {\n success: false,\n error: `Group with id '${group.id}' already exists`,\n };\n }\n\n // Validate layers if klassLayers is provided\n if (klassLayers) {\n const validation = validateLayers(group.layers, klassLayers, groups);\n if (!validation.isValid) {\n return { success: false, error: validation.error };\n }\n }\n\n // Ensure layers is an array\n if (!group.layers || !Array.isArray(group.layers)) {\n return { success: false, error: 'Group must have a layers array' };\n }\n\n // Add the group\n const newGroup = {\n id: group.id,\n label: group.label,\n layers: [...group.layers], // Create a copy of the array\n };\n\n // Preserve position if provided\n if (group.position !== undefined && group.position !== null) {\n newGroup.position = group.position;\n }\n\n groups.push(newGroup);\n\n return {\n success: true,\n message: `Group '${group.label}' added successfully with ${group.layers.length} layer(s)`,\n };\n};\n\n/**\n * Remove a group from the groups array\n * Result object with success status and message\n */\nconst removeGroup = (groups, groupId) => {\n const index = groups.findIndex((g) => g.id === groupId);\n if (index !== -1) {\n const removedGroup = groups.splice(index, 1)[0];\n return {\n success: true,\n message: `Group '${removedGroup.label}' removed successfully`,\n };\n }\n return { success: false, error: `Group with id '${groupId}' not found` };\n};\n\n/**\n * Add a layer to an existing group\n * Result object with success status and message\n */\nconst addLayerToGroup = (groups, groupId, layerKey, klassLayers) => {\n // Check if layer exists\n if (klassLayers && !klassLayers[layerKey]) {\n return {\n success: false,\n error: `Layer '${layerKey}' not found`,\n };\n }\n\n // Find the group\n const group = groups.find((g) => g.id === groupId);\n if (!group) {\n return { success: false, error: `Group with id '${groupId}' not found` };\n }\n\n // Check if layer is already in this group\n if (group.layers && group.layers.includes(layerKey)) {\n return {\n success: false,\n error: `Layer '${layerKey}' already in this group`,\n };\n }\n\n // Check if layer is already assigned to another group\n const assignedLayers = getAssignedLayers(groups);\n if (assignedLayers.has(layerKey)) {\n return {\n success: false,\n error: `Layer '${layerKey}' is already assigned to another group`,\n };\n }\n\n // Add the layer to the group\n if (!group.layers) {\n group.layers = [];\n }\n group.layers.push(layerKey);\n\n return {\n success: true,\n message: `Layer '${layerKey}' added to group '${group.label}' successfully`,\n };\n};\n\n/**\n * Remove a layer from a group\n * Result object with success status and message\n */\nconst removeLayerFromGroup = (groups, groupId, layerKey) => {\n // Find the group\n const group = groups.find((g) => g.id === groupId);\n if (!group) {\n return { success: false, error: `Group with id '${groupId}' not found` };\n }\n\n // Check if layer exists in this group\n if (!group.layers || !group.layers.includes(layerKey)) {\n return {\n success: false,\n error: `Layer '${layerKey}' not found in this group`,\n };\n }\n\n // Remove the layer from the group\n group.layers = group.layers.filter((key) => key !== layerKey);\n\n return {\n success: true,\n message: `Layer '${layerKey}' removed from group '${group.label}' successfully`,\n isEmpty: group.layers.length === 0, // Indicate if group is now empty\n };\n};\n\n/**\n * Get available layers that are not yet assigned to any group\n */\nconst getAvailableLayers = (klassLayers, existingGroups) => {\n const assignedLayers = getAssignedLayers(existingGroups);\n return Object.keys(klassLayers).filter(\n (layerKey) => !assignedLayers.has(layerKey),\n );\n};\n\n/**\n * Organize layers for display with grouping logic\n * Groups and ungrouped layers are ordered by position\n * Layers within a group maintain their own position order\n */\nconst organizeLayersForDisplay = (klassLayers, groups = []) => {\n if (!klassLayers || typeof klassLayers !== 'object') {\n return [];\n }\n\n const assignedLayers = getAssignedLayers(groups);\n const displayItems = [];\n\n // Create group items with their layers\n groups.forEach((group) => {\n if (!group.layers || !Array.isArray(group.layers)) {\n return;\n }\n\n // Get layers that belong to this group and exist in klassLayers\n const groupLayers = group.layers\n .filter((layerKey) => klassLayers[layerKey])\n .map((layerKey) => ({\n key: layerKey,\n position: klassLayers[layerKey].position || 0,\n data: klassLayers[layerKey],\n }));\n\n if (groupLayers.length > 0) {\n displayItems.push({\n type: 'group',\n id: group.id,\n label: group.label,\n position: group.position || 0,\n layers: groupLayers,\n });\n }\n });\n\n // Add ungrouped layers as individual items\n Object.keys(klassLayers).forEach((layerKey) => {\n if (!assignedLayers.has(layerKey)) {\n displayItems.push({\n type: 'layer',\n key: layerKey,\n position: klassLayers[layerKey].position || 0,\n data: klassLayers[layerKey],\n });\n }\n });\n\n // Sort all display items by position\n displayItems.sort((a, b) => a.position - b.position);\n\n return displayItems;\n};\n\n/**\n * Get the minimum position from a group's layers\n * Used to determine group position if not explicitly set\n */\nconst getGroupMinPosition = (group, klassLayers) => {\n if (\n !group.layers ||\n !Array.isArray(group.layers) ||\n group.layers.length === 0\n ) {\n return 0;\n }\n\n const positions = group.layers\n .filter((layerKey) => klassLayers[layerKey])\n .map((layerKey) => klassLayers[layerKey].position || 0);\n\n return positions.length > 0 ? Math.min(...positions) : 0;\n};\n\n/**\n * Update group positions based on their layers if not explicitly set\n * Modifies the groups array in place\n */\nconst updateGroupPositions = (groups, klassLayers) => {\n groups.forEach((group) => {\n if (group.position === undefined || group.position === null) {\n group.position = getGroupMinPosition(group, klassLayers);\n }\n });\n return groups;\n};\n\nexport {\n addGroup,\n removeGroup,\n addLayerToGroup,\n removeLayerFromGroup,\n getAvailableLayers,\n validateLayers,\n organizeLayersForDisplay,\n getGroupMinPosition,\n updateGroupPositions,\n getGroupByLayer,\n getGroupInfoByLayer,\n moveGroup,\n};\n","import sortBy from 'lodash/sortBy';\nimport { orgLayerObject, FieldTypes } from 'generic-ui-core';\nimport Layer from '@components/layers/Layer';\nimport { reorderPositions } from '@utils/template/sorting-handler';\nimport { organizeLayersForDisplay } from '@utils/template/group-handler';\n\nexport const addLayer = (_generic, _source, _key) => {\n const [generic, source, key] = [_generic, _source, _key];\n const { metadata = {} } = generic;\n const { layers } = generic.properties;\n const sortedLayers = sortBy(layers, ['position', 'wf_position']);\n const srcIdx = sortedLayers.findIndex(e => e.key === source.key);\n if (srcIdx !== -1) {\n const layer = new Layer({ sys: key });\n layer.addField({\n type: FieldTypes.F_SYS_REACTION,\n field: 'reaction',\n hasOwnRow: true,\n });\n\n // add layer next to source layer\n sortedLayers.splice(srcIdx + 1, 0, layer);\n\n // add layer to group if source layer is in a group, and layer's position is updated as group's position\n const group = metadata.groups?.find((g) => g.layers?.includes(source.key));\n if (group) {\n group.layers.splice(group.layers.indexOf(source.key) + 1, 0, layer.key);\n layer.position = group.position + 0.5; // Position after the group\n } else {\n layer.position = source.position + 0.5; // Position after the source layer\n }\n\n // Reorder positions considering groups and layers\n const layersObj = orgLayerObject(sortedLayers);\n const reordered = reorderPositions(layersObj, metadata);\n generic.properties.layers = reordered.layers;\n generic.metadata = reordered.metadata;\n generic.changed = true;\n }\n};\n\nexport const layerDropReaction = (_generic, _field, _layerKey) => {\n const [generic, field, layerKey] = [_generic, _field, _layerKey];\n const dropLayer = generic.properties.layers[layerKey];\n if (dropLayer?.fields?.length > 0) {\n generic.properties.layers[layerKey].fields[0] = field;\n generic.changed = true;\n }\n};\n\nexport const isFirstLayer = (layers, layerKey, groups = []) => {\n if (!layers || typeof layers !== 'object' || !layerKey) {\n return false;\n }\n\n // Get organized display items to accurately determine the first layer\n const displayItems = organizeLayersForDisplay(layers, groups);\n if (displayItems.length === 0) return false;\n\n const firstItem = displayItems[0];\n if (firstItem.type === 'layer') {\n return firstItem.key === layerKey;\n }\n\n if (firstItem.type === 'group') {\n // If it's a group, the first layer is the first one in the group's layers array\n return firstItem.layers?.[0]?.key === layerKey;\n }\n\n return false;\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Accordion, useAccordionButton } from 'react-bootstrap';\nimport Constants from '@components/tools/Constants';\nimport FLEX_BETWEEN_CENTER from '@components/tools/ui-styles';\nimport { isFirstLayer } from '@components/details/handler';\n\nconst ACCORDION_EVENT_KEY = '1';\nconst ACCORDION_PREFIX = 'accordion_design_props_';\nconst CUSTOM_TOGGLE_CLASS = `py-1 ${FLEX_BETWEEN_CENTER} rounded`;\n\nconst CustomToggleContent = ({\n dnd,\n eventKey,\n callback,\n extClass,\n children,\n isSys,\n}) => {\n const decoratedOnClick = useAccordionButton(\n eventKey,\n () => callback && callback(eventKey)\n );\n return (\n <div className={`${CUSTOM_TOGGLE_CLASS} ${extClass || 'lu-bg-light'}`}>\n <div\n className={`flex-grow-1 ${FLEX_BETWEEN_CENTER}`}\n onClick={isSys ? undefined : decoratedOnClick}\n style={{ cursor: isSys ? 'default' : 'pointer' }}\n aria-label=\"Toggle Accordion\"\n role=\"button\"\n >\n {children}\n </div>\n {dnd}\n </div>\n );\n};\n\nCustomToggleContent.propTypes = {\n dnd: PropTypes.node,\n eventKey: PropTypes.string.isRequired,\n callback: PropTypes.func,\n extClass: PropTypes.string,\n children: PropTypes.node.isRequired,\n isSys: PropTypes.bool.isRequired,\n};\n\nCustomToggleContent.defaultProps = {\n dnd: undefined,\n callback: undefined,\n extClass: '',\n};\n\nconst Prop = ({\n dnd = undefined,\n extClass = '',\n layerKey,\n propHeader,\n layers,\n expandAll,\n groups,\n children,\n}) => {\n const [initialized, setInitialized] = useState(true);\n const isSys = layerKey.startsWith(Constants.SYS_REACTION);\n const isFirst = isFirstLayer(layers, layerKey, groups);\n const [expand, setExpand] = useState(() => {\n if (expandAll != null) {\n return expandAll;\n }\n if (initialized && isFirst) {\n return true;\n }\n return false;\n });\n\n useEffect(() => {\n if (expandAll != null) {\n setExpand(expandAll);\n setInitialized(false);\n }\n }, [expandAll]);\n\n const handleToggle = () => {\n if (!isSys) {\n setExpand(!expand);\n setInitialized(false);\n }\n };\n\n let isExpanded = expand;\n if (isSys) {\n isExpanded = true;\n }\n return (\n <Accordion\n key={`${ACCORDION_PREFIX}${layerKey}`}\n id={`_${ACCORDION_PREFIX}${layerKey}`}\n activeKey={isExpanded ? ACCORDION_EVENT_KEY : undefined}\n >\n <Accordion.Item\n key={`_${ACCORDION_PREFIX}item_${layerKey}`}\n className=\"panel_generic_properties pb-3\"\n eventKey={ACCORDION_EVENT_KEY}\n >\n <CustomToggleContent\n dnd={dnd}\n eventKey={ACCORDION_EVENT_KEY}\n callback={handleToggle}\n extClass={extClass}\n isSys={isSys}\n >\n {propHeader}\n </CustomToggleContent>\n <Accordion.Body className=\"py-0 px-3\">{children}</Accordion.Body>\n </Accordion.Item>\n </Accordion>\n );\n};\n\nProp.propTypes = {\n dnd: PropTypes.node,\n extClass: PropTypes.string,\n layerKey: PropTypes.string.isRequired,\n propHeader: PropTypes.node.isRequired,\n layers: PropTypes.object,\n expandAll: PropTypes.bool,\n groups: PropTypes.array,\n children: PropTypes.node.isRequired,\n};\n\nProp.defaultProps = {\n dnd: undefined,\n extClass: '',\n layers: {},\n expandAll: undefined,\n groups: [],\n};\n\nexport default Prop;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Badge } from 'react-bootstrap';\n\n/**\n * A wrapper component for react-bootstrap Badge with solid and outline variants.\n * Provides consistent styling and spacing for badge elements throughout the application.\n *\n * @component\n * @example\n * // Solid badge\n * <LBadge variant=\"solid\" color=\"primary\" text=\"Active\" />\n *\n * @example\n * // Outline badge with children\n *\n * <LBadge variant=\"outline\" color=\"warning\">\n * <Icon /> Custom Content\n * </LBadge>\n */\nfunction LBadge({ variant, color, text, children, className }) {\n const content = children || text;\n\n // Early return for empty content\n if (!content && content !== 0) return null;\n\n // Build className\n const classes = ['ms-1'];\n if (className) classes.push(className);\n if (variant === 'outline') classes.push(`lbg-outline-${color}`);\n const computedClassName = classes.join(' ');\n\n // Solid variant uses react-bootstrap's bg prop\n if (variant === 'solid') {\n return (\n <Badge pill className={computedClassName} bg={color}>\n {content}\n </Badge>\n );\n }\n\n // Outline variant uses custom CSS classes\n return (\n <Badge pill className={computedClassName}>\n {content}\n </Badge>\n );\n}\n\nLBadge.propTypes = {\n /** Badge style: 'solid' for filled background, 'outline' for bordered style */\n variant: PropTypes.oneOf(['solid', 'outline']),\n color: PropTypes.string.isRequired,\n /** Text content for the badge (alternative to children) */\n text: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n /** React children (takes precedence over text prop) */\n children: PropTypes.node,\n /** Additional CSS classes to apply */\n className: PropTypes.string,\n};\n\nLBadge.defaultProps = {\n variant: 'solid',\n text: '',\n children: null,\n className: '',\n};\n\nexport default LBadge;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport FIcons from '@components/icons/FIcons';\nimport LBadge from '@components/shared/LBadge';\nimport { pl } from '@components/tools/format-utils';\n\n/**\n * Display component for rendering layer information with badges.\n * Shows layer details including key, group info, columns, fields count, and workflow status.\n */\nfunction LayerHeader({ layer, groupInfo }) {\n const fieldsCount = layer?.fields?.length || 0;\n const hasConditionalFields = layer?.cond_fields?.length > 0;\n const hasGroupRestrictions = groupInfo?.restrict?.cond?.length > 0;\n\n return (\n <span className=\"flex-grow-1\">\n {/* Group information badge */}\n {groupInfo && (\n <LBadge variant=\"solid\" color=\"primary\">\n Group: {groupInfo.group.label}\n {hasGroupRestrictions && <> {FIcons.faGears} </>}\n </LBadge>\n )}\n\n {groupInfo && ' '}\n\n {/* Layer label and key */}\n <span className=\"fw-bold\">{layer.label}</span>\n <LBadge variant=\"solid\" color=\"dark\" text={layer.key} />\n\n {/* Conditional fields indicator */}\n {hasConditionalFields && (\n <LBadge variant=\"solid\" color=\"warning\">\n {FIcons.faGears}\n </LBadge>\n )}\n\n {/* Column layout and fields count */}\n <LBadge\n variant=\"outline\"\n color=\"primary\"\n text={`${layer.cols} ${pl(layer.cols, 'col')}/row, ${fieldsCount} ${pl(fieldsCount, 'field')}`}\n />\n\n {/* Workflow indicator */}\n {layer?.wf && (\n <LBadge variant=\"outline\" color=\"warning\" text=\"workflow\" />\n )}\n </span>\n );\n}\n\nLayerHeader.propTypes = {\n /** Layer configuration object */\n layer: PropTypes.shape({\n key: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n cols: PropTypes.number,\n fields: PropTypes.array,\n wf: PropTypes.bool,\n }).isRequired,\n groupInfo: PropTypes.shape({\n group: PropTypes.shape({\n id: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n layers: PropTypes.array.isRequired,\n position: PropTypes.number,\n }).isRequired,\n restrict: PropTypes.object,\n }),\n};\n\nLayerHeader.defaultProps = {\n groupInfo: null,\n};\n\nexport default LayerHeader;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Constants from '@components/tools/Constants';\nimport { LWf } from '@components/shared/LCom';\nimport fbc from '@components/tools/ui-styles';\n\n// Shows repetition information for extended keys\nexport const extHeaderInfo = (splitKey) =>\n splitKey.length > 1 ? <span>{`Repetition ${splitKey[1]}`}</span> : null;\n\n// Generates system header information for reaction fields\nexport const sysHeaderInfo = (fields) => {\n const preText = 'Reaction:';\n if (!fields || !fields.length) return preText;\n const { value = {} } = fields[0];\n return value.el_label ? `${preText} ${value.el_label}` : preText;\n};\n\n// Default content shown when no layers are available to arrange\nexport const defaultLayersContent = <h1>No layers to arrange</h1>;\n\n// Default content shown when no fields are available to arrange\nexport const defaultFieldsContent = <h1>No fields to arrange</h1>;\n\n// Creates a defined header for layer arrangement (legacy function)\nexport const definedLayerHeader = (\n className,\n label,\n key,\n fields,\n wf = null,\n) => {\n const isSys = key.startsWith(Constants.SYS_REACTION);\n const content = isSys ? sysHeaderInfo(fields) : `${label}(${key})`;\n const splitKey = key.split('.');\n return (\n <span className={`${fbc} ${className}`}>\n {content}\n {extHeaderInfo(splitKey)}\n {wf && <LWf wf={wf} />}\n </span>\n );\n};\n\n// Component version of definedLayerHeader\nexport function DefinedLayerHeader({\n className,\n label,\n keyProp,\n fields,\n wf = null,\n children,\n}) {\n const isSys = keyProp.startsWith(Constants.SYS_REACTION);\n const content = isSys ? sysHeaderInfo(fields) : `${label}(${keyProp})`;\n const splitKey = keyProp.split('.');\n\n return (\n <span className={`w-100 d-flex align-items-center ${className}`}>\n <span>\n {content}\n {extHeaderInfo(splitKey)}\n {wf && <LWf wf={wf} />}\n </span>\n {children}\n </span>\n );\n}\n\nDefinedLayerHeader.propTypes = {\n className: PropTypes.string,\n label: PropTypes.string.isRequired,\n keyProp: PropTypes.string.isRequired,\n fields: PropTypes.array,\n wf: PropTypes.bool,\n children: PropTypes.node,\n};\n\n// Creates a defined header for field arrangement\nexport const definedFieldHeader = (label, field, type) => {\n const isDummy = type === 'dummy'; // Using string instead of FieldTypes.F_DUMMY to avoid import\n const content = isDummy ? '(dummy field)' : `${label}(${field})`;\n return <span className={`fw-bold ${fbc}`}>{content}</span>;\n};\n","import React, { useEffect, useRef } from 'react';\nimport { useDragLayer } from 'react-dnd';\nimport { FieldTypes } from 'generic-ui-core';\nimport Constants from '@components/tools/Constants';\nimport { sysHeaderInfo, extHeaderInfo } from '@components/shared/arrangeUtils';\n\nexport default function DragLayer({ scrollableContainerRef }) {\n const scrollTimeoutRef = useRef(null);\n\n const { item, isDragging, currentOffset } = useDragLayer(\n (monitor) => ({\n item: monitor.getItem(),\n isDragging: monitor.isDragging(),\n currentOffset: monitor.getClientOffset(),\n }),\n );\n\n // Auto-scroll functionality for drag and drop\n useEffect(() => {\n if (!isDragging || !currentOffset || !scrollableContainerRef?.current) {\n // Clear any existing scroll timeout when not dragging\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n scrollTimeoutRef.current = null;\n }\n return;\n }\n\n const container = scrollableContainerRef.current;\n const containerRect = container.getBoundingClientRect();\n const { y } = currentOffset;\n\n // Only auto-scroll if cursor is within the container horizontally\n const isWithinContainer =\n currentOffset.x >= containerRect.left &&\n currentOffset.x <= containerRect.right;\n\n if (!isWithinContainer) {\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n scrollTimeoutRef.current = null;\n }\n return;\n }\n\n const scrollThreshold = 60; // pixels from edge to trigger scroll\n const scrollSpeed = 8; // pixels per scroll\n\n let shouldScroll = false;\n let direction = null;\n\n // Check if near top edge and can scroll up\n if (y < containerRect.top + scrollThreshold && container.scrollTop > 0) {\n shouldScroll = true;\n direction = 'up';\n }\n // Check if near bottom edge and can scroll down\n else if (y > containerRect.bottom - scrollThreshold) {\n const maxScroll = container.scrollHeight - container.clientHeight;\n if (container.scrollTop < maxScroll) {\n shouldScroll = true;\n direction = 'down';\n }\n }\n\n if (shouldScroll && !scrollTimeoutRef.current) {\n const performScroll = () => {\n if (!isDragging) return;\n\n if (direction === 'up') {\n container.scrollTop = Math.max(0, container.scrollTop - scrollSpeed);\n } else if (direction === 'down') {\n const maxScroll = container.scrollHeight - container.clientHeight;\n container.scrollTop = Math.min(maxScroll, container.scrollTop + scrollSpeed);\n }\n\n // Continue scrolling if still near edge\n scrollTimeoutRef.current = setTimeout(performScroll, 50);\n };\n\n scrollTimeoutRef.current = setTimeout(performScroll, 100);\n } else if (!shouldScroll && scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n scrollTimeoutRef.current = null;\n }\n\n // Cleanup function\n return () => {\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n scrollTimeoutRef.current = null;\n }\n };\n }, [isDragging, currentOffset, scrollableContainerRef]);\n\n if (!isDragging || !currentOffset || !item) return null;\n\n const { x, y } = currentOffset;\n\n // Generate display text based on the type of item being dragged\n const getDisplayText = () => {\n const layer = item.layer || {};\n\n // For field items (from FieldOrderContent)\n if (layer.field !== undefined) {\n const { label, field, type } = layer;\n const isDummy = FieldTypes.F_DUMMY === type;\n return isDummy ? '(dummy field)' : `${label}(${field})`;\n }\n\n // For layer items (from ArrangeContent and LayerOrderContent)\n if (layer.key !== undefined) {\n const { label, key, fields } = layer;\n const isSys = key && key.startsWith(Constants.SYS_REACTION);\n const content = isSys ? sysHeaderInfo(fields) : `${label}(${key})`;\n const splitKey = key ? key.split('.') : [];\n const repetitionInfo = extHeaderInfo(splitKey);\n\n return repetitionInfo ? `${content} - ${repetitionInfo.props.children}` : content;\n }\n\n // Fallback to basic label\n return layer.label || item.label || 'Item';\n };\n\n const displayText = getDisplayText();\n\n return (\n <div\n className=\"drag-layer-preview\"\n style={{\n position: 'fixed',\n pointerEvents: 'none',\n top: y,\n left: x,\n zIndex: 10000,\n transform: 'translate(-50%, -50%)',\n opacity: 0.9,\n }}\n >\n <div\n className=\"w-100 drag-item-content\"\n style={{\n backgroundColor: '#ffffff',\n border: '2px solid #007bff',\n padding: '12px 16px',\n borderRadius: '8px',\n boxShadow: '0 8px 32px rgba(0,0,0,0.15), 0 4px 16px rgba(0,123,255,0.2)',\n fontWeight: 500,\n color: '#333333',\n whiteSpace: 'nowrap',\n fontSize: '14px',\n minWidth: '120px',\n textAlign: 'center',\n }}\n >\n {displayText}\n </div>\n </div>\n );\n}\n","import React, { useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\n\nconst DnD = (props) => {\n const { canDrag, type, layer, field, handleMove, children } = props;\n const containerRef = useRef(null);\n\n const [{ isDraggingSource }, drag, preview] = useDrag({\n type,\n item: { type, layer, field, label: layer?.label || children.props?.label }, // pass label for preview\n canDrag: () => canDrag,\n collect: (monitor) => {\n return {\n isDraggingSource: monitor.isDragging(),\n };\n },\n });\n\n // Hide the default drag preview since we're using a custom DragLayer\n useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: true });\n }, [preview]);\n\n const [{ isOver, isOverValidTarget }, drop] = useDrop({\n accept: type,\n canDrop: (item) => !layer.wf || !item.layer.wf,\n drop: (item, monitor) => {\n // Only handle drop if it's a valid move\n if (field === item.field && layer.key !== item.layer.key) {\n handleMove(item.layer.key, layer.key);\n }\n },\n collect: (monitor) => {\n return {\n isOver: monitor.isOver(),\n isOverValidTarget: monitor.canDrop(),\n };\n },\n });\n\n\n let dndClass = 'generic_grid_dnd';\n if (isOver) dndClass += ' is-over';\n if (isOverValidTarget) dndClass += ' can-drop';\n\n // Enhanced styling for better drop zone visibility\n const dropZoneStyle = {\n opacity: isDraggingSource ? 0 : 1,\n position: 'relative',\n zIndex: isDraggingSource ? 9000 : 1,\n transition: 'all 0.2s ease',\n ...(isOver && isOverValidTarget && {\n backgroundColor: 'rgba(0, 123, 255, 0.1)',\n borderColor: '#007bff',\n transform: 'scale(1.02)',\n }),\n };\n\n return (\n <div\n ref={(node) => {\n drag(node);\n drop(node);\n containerRef.current = node?.parentElement; // track scrollable parent\n }}\n className={`w-100 p-2 m-2 ${dndClass}`}\n style={dropZoneStyle}\n >\n <div className=\"dnd\">{children}</div>\n </div>\n );\n};\n\nDnD.propTypes = {\n canDrag: PropTypes.bool,\n type: PropTypes.string.isRequired,\n layer: PropTypes.object.isRequired,\n field: PropTypes.string.isRequired,\n handleMove: PropTypes.func.isRequired,\n children: PropTypes.node.isRequired,\n};\n\nDnD.defaultProps = {\n canDrag: true,\n};\n\nexport default DnD;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { getCondOperator } from 'generic-ui-core';\nimport FIcons from '@components/icons/FIcons';\nimport { fieldLabelFor, layerLabelFor } from '@utils/pureUtils';\n\nfunction ConditionView({ conditions, layers }) {\n const { cond_fields: condFields = [], cond_operator: matchOp = 1 } =\n conditions;\n\n if (!condFields.length) return null;\n\n const availableLayers = layers\n ? Object.keys(layers).map((key) => ({\n key,\n label: layers[key].label,\n fields: layers[key].fields || [],\n }))\n : [];\n\n if (!availableLayers.length) return null;\n\n const matchOpLabel = getCondOperator[matchOp];\n return (\n <>\n <small className=\"text-muted d-block mb-2\">\n {FIcons.faGears} Existing Conditions: {matchOpLabel}\n </small>\n {condFields.map((cond) => (\n <div\n key={cond.id}\n className=\"d-flex align-items-center gap-2 mb-2 p-2 border rounded bg-white\"\n >\n <small className=\"flex-grow-1\">\n <strong>{layerLabelFor(availableLayers, cond.layer)}</strong> →{' '}\n {fieldLabelFor(availableLayers, cond.layer, cond.field)} = &quot;\n {typeof cond.value === 'boolean' ? String(cond.value) : cond.value}\n &quot;\n </small>\n </div>\n ))}\n </>\n );\n}\n\nConditionView.propTypes = {\n conditions: PropTypes.shape({\n cond_fields: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n layer: PropTypes.string,\n field: PropTypes.string,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n }),\n ),\n cond_operator: PropTypes.number,\n }).isRequired,\n layers: PropTypes.objectOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n fields: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n }),\n ),\n }),\n ).isRequired,\n};\n\nexport default ConditionView;\n","import React, {\n forwardRef,\n useImperativeHandle,\n useState,\n useRef,\n useEffect,\n} from 'react';\nimport Col from 'react-bootstrap/Col';\nimport Row from 'react-bootstrap/Row';\nimport Badge from 'react-bootstrap/Badge';\nimport Button from 'react-bootstrap/Button';\nimport sortBy from 'lodash/sortBy';\nimport DragLayer from '@components/dnd/DragLayer';\nimport DnD from '@components/dnd/DnD';\nimport { bgColor } from '@components/tools/format-utils';\nimport FIcons from '@components/icons/FIcons';\nimport ConditionView from '@components/designer/template/ConditionView';\nimport { LHText } from '@components/shared/LCom';\nimport {\n defaultLayersContent,\n DefinedLayerHeader,\n} from '@components/shared/arrangeUtils';\nimport { reorderPositions } from '@utils/template/sorting-handler';\n\nconst GroupLayerOrderContent = forwardRef(({ element }, ref) => {\n const layers = element?.properties_template?.layers || {};\n\n const initialMetadata = element?.metadata || { groups: [], restrict: {} };\n\n const [newLayers, setNewLayers] = useState(layers);\n const [newMetadata, setNewMetadata] = useState(initialMetadata);\n const scrollableContainerRef = useRef(null);\n const [expandedConditions, setExpandedConditions] = useState(new Set());\n\n // Initialize positions on mount\n useEffect(() => {\n const reordered = reorderPositions(layers, initialMetadata);\n setNewLayers(reordered.layers);\n setNewMetadata(reordered.metadata);\n }, []); // Empty deps - only run on mount\n\n // Expose method to get current state\n useImperativeHandle(ref, () => ({\n getUpdates: () => ({\n layers: newLayers,\n metadata: newMetadata,\n }),\n }));\n\n if (!element?.properties_template?.layers) return defaultLayersContent;\n\n const layerValues = Object.values(layers);\n if (layerValues.length === 0) return defaultLayersContent;\n\n // Organize layers by groups - creates a mixed list of groups and ungrouped layers\n const organizeLayersByGroups = (layersObj, metadata) => {\n const groups = metadata.groups || [];\n const allLayers = Object.values(layersObj);\n\n // Get layers that belong to groups\n const groupedLayersSet = new Set();\n groups.forEach((group) => {\n group.layers?.forEach((layerKey) => groupedLayersSet.add(layerKey));\n });\n\n // Get ungrouped layers\n const ungroupedLayers = allLayers.filter(\n (layer) => !groupedLayersSet.has(layer.key),\n );\n\n // Create a mixed array of groups and ungrouped layers, sorted by position\n const items = [\n ...groups.map((group) => ({\n type: 'group',\n data: group,\n position: group.position || 0,\n })),\n ...ungroupedLayers.map((layer) => ({\n type: 'layer',\n data: layer,\n position: layer.position || 0,\n })),\n ];\n\n const sortedItems = sortBy(items, 'position');\n\n return {\n items: sortedItems,\n allLayers: layersObj,\n };\n };\n\n const currentOrganized = organizeLayersByGroups(layers, initialMetadata);\n const newOrganized = organizeLayersByGroups(newLayers, newMetadata);\n\n // Handle layer move within the same group (for grouped layers only)\n const handleLayerMove = (sourceKey, targetKey, groupId) => {\n // For grouped layers, reorder within the group's layers array\n // DO NOT change position values to avoid affecting top-level sorting\n const updatedGroups = [...(newMetadata.groups || [])];\n const groupIndex = updatedGroups.findIndex((g) => g.id === groupId);\n\n if (groupIndex === -1) return;\n\n const group = updatedGroups[groupIndex];\n const layersArray = group.layers || [];\n\n const sourceIndex = layersArray.indexOf(sourceKey);\n const targetIndex = layersArray.indexOf(targetKey);\n\n if (sourceIndex === -1 || targetIndex === -1) return;\n\n // Reorder the array\n const newLayersArray = [...layersArray];\n const [removed] = newLayersArray.splice(sourceIndex, 1);\n newLayersArray.splice(targetIndex, 0, removed);\n\n updatedGroups[groupIndex] = {\n ...group,\n layers: newLayersArray,\n };\n\n setNewMetadata({\n ...newMetadata,\n groups: updatedGroups,\n });\n };\n\n // Handle top-level item move (groups and ungrouped layers)\n // This receives keys/ids from DnD and needs to look up the actual items\n const handleTopLevelMove = (sourceKeyOrId, targetKeyOrId) => {\n // Find the source and target items from newOrganized\n const sourceIndex = newOrganized.items.findIndex(\n (item) =>\n (item.type === 'group' && item.data.id === sourceKeyOrId) ||\n (item.type === 'layer' && item.data.key === sourceKeyOrId),\n );\n\n const targetIndex = newOrganized.items.findIndex(\n (item) =>\n (item.type === 'group' && item.data.id === targetKeyOrId) ||\n (item.type === 'layer' && item.data.key === targetKeyOrId),\n );\n\n if (sourceIndex === -1 || targetIndex === -1) return;\n\n // Reorder the items array by moving source to target position\n const reorderedItems = [...newOrganized.items];\n const [movedItem] = reorderedItems.splice(sourceIndex, 1);\n reorderedItems.splice(targetIndex, 0, movedItem);\n\n // Reassign sequential positions to all items based on new order\n const updatedGroups = [...(newMetadata.groups || [])];\n const updatedLayers = { ...newLayers };\n\n reorderedItems.forEach((item, index) => {\n if (item.type === 'group') {\n const groupIndex = updatedGroups.findIndex(\n (g) => g.id === item.data.id,\n );\n if (groupIndex !== -1) {\n updatedGroups[groupIndex] = {\n ...updatedGroups[groupIndex],\n position: index,\n };\n // Update grouped layers to have the same position as their group\n updatedGroups[groupIndex].layers?.forEach((layerKey) => {\n if (updatedLayers[layerKey]) {\n updatedLayers[layerKey] = {\n ...updatedLayers[layerKey],\n position: index,\n };\n }\n });\n }\n } else if (item.type === 'layer') {\n const layerKey = item.data.key;\n if (updatedLayers[layerKey]) {\n updatedLayers[layerKey] = {\n ...updatedLayers[layerKey],\n position: index,\n };\n }\n }\n });\n\n // Update both states\n setNewMetadata({\n ...newMetadata,\n groups: updatedGroups,\n });\n setNewLayers(updatedLayers);\n };\n\n // Render individual layer block\n const renderLayer = (layer, isNew = false, groupId = null) => {\n const {\n label,\n color,\n style = 'panel_generic_heading',\n key,\n fields,\n } = layer;\n\n const contentStyle = `p-3 rounded border border-${\n isNew ? 'primary' : 'secondary'\n }`;\n\n const hasConditions = layer.cond_fields && layer.cond_fields.length > 0;\n const isExpanded = expandedConditions.has(key);\n\n const handleToggleConditions = (e) => {\n e.stopPropagation();\n const newExpanded = new Set(expandedConditions);\n if (isExpanded) {\n newExpanded.delete(key);\n } else {\n newExpanded.add(key);\n }\n setExpandedConditions(newExpanded);\n };\n\n const content = (\n <div className={`${bgColor()} ${contentStyle}`}>\n <div className=\"d-flex align-items-center\">\n <DefinedLayerHeader\n className={style}\n label={label}\n keyProp={key}\n fields={fields}\n wf={layer.wf}\n >\n <span className=\"ms-auto\">\n {/* {layer.position !== undefined && layer.position !== null && (\n <span className=\"text-muted small me-2 fw-normal\">\n (pos: {layer.position})\n </span>\n )} */}\n {hasConditions && (\n <Button\n variant=\"outline-secondary\"\n size=\"xsm\"\n onClick={handleToggleConditions}\n >\n {FIcons.faGears} {isExpanded ? 'Hide' : 'Show'} Restrictions\n </Button>\n )}\n </span>\n </DefinedLayerHeader>\n </div>\n {hasConditions && isExpanded && (\n <div className=\"mt-2\">\n <ConditionView conditions={layer} layers={layers} />\n </div>\n )}\n </div>\n );\n\n if (!isNew) {\n return groupId ? (\n <div key={`layer-${key}-current`} className=\"w-100 p-2 m-2\">\n {content}\n </div>\n ) : (\n content\n );\n }\n\n // For grouped layers, only allow DnD within the same group\n if (groupId) {\n return (\n <DnD\n key={`layer-${key}-new`}\n type={`layer-in-group-${groupId}`}\n layer={layer}\n field=\"position\"\n handleMove={(sourceKey, targetKey) =>\n handleLayerMove(sourceKey, targetKey, groupId)\n }\n canDrag\n >\n {content}\n </DnD>\n );\n }\n\n // For ungrouped layers at top level, use top-level type\n return (\n <DnD\n key={`layer-${key}-new`}\n type=\"top-level-item\"\n layer={{ type: 'layer', key, label, position: layer.position }}\n field=\"position\"\n handleMove={(sourceKey, targetKey) =>\n handleTopLevelMove(sourceKey, targetKey)\n }\n canDrag\n >\n {content}\n </DnD>\n );\n };\n\n // Render group with its layers\n const renderGroup = (group, isNew = false) => {\n const groupLayers =\n group.layers\n ?.map(\n (layerKey) =>\n (isNew ? newOrganized : currentOrganized).allLayers[layerKey],\n )\n .filter(Boolean) || [];\n // Use array order, NOT position-based sorting, to prevent affecting top-level order\n const sortedGroupLayers = groupLayers;\n\n // Get restrictions\n const metadata = isNew ? newMetadata : initialMetadata;\n const groupRestrict = metadata?.restrict?.[group.id];\n const hasConditions =\n groupRestrict && groupRestrict.cond && groupRestrict.cond.length > 0;\n const isExpanded = expandedConditions.has(`group-${group.id}`);\n\n const handleToggleConditions = (e) => {\n e.stopPropagation();\n const newExpanded = new Set(expandedConditions);\n const groupKey = `group-${group.id}`;\n if (isExpanded) {\n newExpanded.delete(groupKey);\n } else {\n newExpanded.add(groupKey);\n }\n setExpandedConditions(newExpanded);\n };\n\n // Transform restrict format to match expected format\n const groupConditions = hasConditions\n ? {\n cond_fields: groupRestrict.cond.map((c) => ({ ...c })),\n cond_operator: groupRestrict.op,\n }\n : null;\n\n const groupContent = (\n <div\n className={`border border-2 ${isNew ? 'border-info' : 'border-secondary'} rounded p-2 mb-2`}\n >\n <div className=\"d-flex align-items-center mb-2\">\n <Badge bg={isNew ? 'info' : 'secondary'} className=\"me-2\">\n {FIcons.faLayerGroup}\n </Badge>\n <strong className={isNew ? 'text-info' : ''}>{group.label}</strong>\n {/* <span className=\"ms-auto text-muted small\">\n (pos: {group.position})\n </span> */}\n {hasConditions && (\n <Button\n variant=\"outline-secondary\"\n size=\"xsm\"\n onClick={handleToggleConditions}\n className=\"ms-2\"\n >\n {FIcons.faGears} {isExpanded ? 'Hide' : 'Show'} Restrictions\n </Button>\n )}\n </div>\n {hasConditions && isExpanded && groupConditions && (\n <div className=\"mb-2\">\n <ConditionView conditions={groupConditions} layers={layers} />\n </div>\n )}\n <div>\n {sortedGroupLayers.map((layer) =>\n renderLayer(layer, isNew, group.id),\n )}\n {sortedGroupLayers.length === 0 && (\n <div className=\"text-muted fst-italic\">No layers in this group</div>\n )}\n </div>\n </div>\n );\n\n if (!isNew) {\n return (\n <div key={`group-${group.id}-current`} className=\"w-100 p-2 m-2\">\n {groupContent}\n </div>\n );\n }\n\n // Groups are draggable at top level\n return (\n <DnD\n key={`group-${group.id}-new`}\n type=\"top-level-item\"\n layer={{\n type: 'group',\n id: group.id,\n label: group.label,\n key: group.id,\n position: group.position,\n }}\n field=\"position\"\n handleMove={(sourceKey, targetKey) =>\n handleTopLevelMove(sourceKey, targetKey)\n }\n canDrag\n >\n {groupContent}\n </DnD>\n );\n };\n\n // Render current arrangement - mixed list of groups and layers\n const renderCurrentArrangement = () => {\n const { items } = currentOrganized;\n\n return (\n <>\n {items.map((item) => {\n if (item.type === 'group') {\n return renderGroup(item.data, false);\n }\n return (\n <div\n key={`layer-${item.data.key}-current`}\n className=\"w-100 p-2 m-2\"\n >\n {renderLayer(item.data, false, null)}\n </div>\n );\n })}\n </>\n );\n };\n\n // Render new arrangement - mixed list of groups and layers\n const renderNewArrangement = () => {\n const { items } = newOrganized;\n\n return (\n <>\n {items.map((item) => {\n if (item.type === 'group') {\n return renderGroup(item.data, true);\n }\n return renderLayer(item.data, true, null);\n })}\n </>\n );\n };\n\n return (\n <div className=\"d-flex flex-column h-100\">\n <Row className=\"mx-0 p-3\">\n <Col md={6}>\n <LHText title=\"Current Arrangement\">\n The existing arrangement of groups and layers\n </LHText>\n </Col>\n <Col md={6} className=\"text-primary\">\n <LHText title=\"New Arrangement\">\n Drag ({FIcons.faArrowsUpDownLeftRight}) groups and layers to\n reorder. Layers within groups can only be reordered within their\n group.\n </LHText>\n </Col>\n </Row>\n <div\n ref={scrollableContainerRef}\n className=\"flex-grow-1\"\n style={{\n overflowY: 'auto',\n overflowX: 'hidden',\n minHeight: 0,\n position: 'relative',\n }}\n >\n <Row className=\"mx-0 h-100\">\n <Col md={6} style={{ position: 'relative' }}>\n {renderCurrentArrangement()}\n </Col>\n <Col md={6} style={{ position: 'relative' }}>\n {renderNewArrangement()}\n </Col>\n </Row>\n </div>\n <DragLayer scrollableContainerRef={scrollableContainerRef} />\n </div>\n );\n});\n\nGroupLayerOrderContent.displayName = 'GroupLayerOrderContent';\n\nexport default GroupLayerOrderContent;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal } from 'react-bootstrap';\n\nfunction ArrangeModal({ onSave, showProps, children }) {\n const { show, setShow } = showProps;\n if (!show) return null;\n\n const handleSave = () => {\n const updates = children.ref?.current?.getUpdates();\n if (updates) {\n onSave(updates);\n setShow(false);\n }\n };\n\n return (\n <Modal\n centered\n show={show}\n onHide={() => setShow(false)}\n fullscreen\n backdrop=\"static\"\n >\n <Modal.Header closeButton>\n <Modal.Title>Arrange the order</Modal.Title>\n </Modal.Header>\n <Modal.Body\n className=\"d-flex flex-column p-0\"\n style={{ overflow: 'hidden' }}\n >\n {children}\n </Modal.Body>\n <Modal.Footer className=\"justify-content-start\">\n <Button variant=\"secondary\" onClick={() => setShow(false)}>\n Cancel\n </Button>\n <Button variant=\"success\" onClick={handleSave}>\n Save\n </Button>\n </Modal.Footer>\n </Modal>\n );\n}\n\nArrangeModal.propTypes = {\n onSave: PropTypes.func.isRequired,\n showProps: PropTypes.shape({\n show: PropTypes.bool.isRequired,\n setShow: PropTypes.func.isRequired,\n }).isRequired,\n children: PropTypes.node.isRequired,\n};\n\nexport default ArrangeModal;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport cloneDeep from 'lodash/cloneDeep';\nimport GroupLayerOrderContent from '@components/designer/template/GroupLayerOrderContent';\nimport ArrangeModal from '@components/actions/ArrangeModal';\nimport Constants from '@components/tools/Constants';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\nimport Response from '@utils/response';\nimport { notifySuccess } from '@utils/template/designer-message';\n\nfunction GroupLayerOrderBtn({ generic = {}, genericType, fnSave = () => {} }) {\n const [show, setShow] = useState(false);\n const arrangeContentRef = useRef(null);\n\n if (Object.keys(generic.properties_template).length === 0) return null;\n\n const handleSave = (updatedData) => {\n const updates = cloneDeep(generic);\n updates.properties_template.layers = updatedData.layers;\n\n const groups = updatedData.metadata?.groups || [];\n if (groups.length === 0) {\n updates.metadata = {};\n } else {\n updates.metadata = {\n groups,\n restrict: updatedData.metadata?.restrict || {},\n };\n }\n\n updates.changed = true;\n fnSave(new Response(notifySuccess(), updates));\n };\n\n return (\n <>\n <LTooltip idf=\"arrange_group_layer\">\n <Button\n className=\"fw-medium\"\n size=\"sm\"\n variant=\"primary\"\n onClick={() => setShow(true)}\n >\n {FIcons.faBars} Arrange Groups & Layers\n </Button>\n </LTooltip>\n <ArrangeModal\n genericType={genericType}\n showProps={{ show, setShow }}\n onSave={handleSave}\n >\n <GroupLayerOrderContent\n ref={arrangeContentRef}\n element={cloneDeep(generic || {})}\n />\n </ArrangeModal>\n </>\n );\n}\n\nGroupLayerOrderBtn.propTypes = {\n generic: PropTypes.object,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n fnSave: PropTypes.func,\n};\nGroupLayerOrderBtn.defaultProps = {\n generic: {},\n fnSave: () => {},\n};\nexport default GroupLayerOrderBtn;\n","import { FieldTypes } from 'generic-ui-core';\n\nconst BaseFieldTypes = [\n { value: FieldTypes.F_INTEGER, name: FieldTypes.F_INTEGER, label: 'Integer' },\n {\n value: FieldTypes.F_DATETIME,\n name: FieldTypes.F_DATETIME,\n label: 'Date-Time Picker',\n },\n {\n value: FieldTypes.F_DATETIME_RANGE,\n name: FieldTypes.F_DATETIME_RANGE,\n label: 'Datetime range',\n },\n {\n value: FieldTypes.F_DRAG_ELEMENT,\n name: FieldTypes.F_DRAG_ELEMENT,\n label: 'Link Element',\n },\n { value: FieldTypes.F_TEXT, name: FieldTypes.F_TEXT, label: 'Text' },\n {\n value: FieldTypes.F_TEXTAREA,\n name: FieldTypes.F_TEXTAREA,\n label: 'Text area',\n },\n { value: FieldTypes.F_SELECT, name: FieldTypes.F_SELECT, label: 'Select' },\n { value: FieldTypes.F_SELECT_MULTI, name: FieldTypes.F_SELECT_MULTI, label: 'Select (Multiple)' },\n {\n value: FieldTypes.F_CHECKBOX,\n name: FieldTypes.F_CHECKBOX,\n label: 'Checkbox',\n },\n {\n value: FieldTypes.F_SYSTEM_DEFINED,\n name: FieldTypes.F_SYSTEM_DEFINED,\n label: 'System-Defined',\n },\n {\n value: FieldTypes.F_FORMULA_FIELD,\n name: FieldTypes.F_FORMULA_FIELD,\n label: 'Formula-Field',\n },\n];\n\nexport default BaseFieldTypes;\n","import { FieldTypes } from 'generic-ui-core';\nimport BaseFieldTypes from '@components/elements/BaseFieldTypes';\n\nconst ElementFieldTypes = [\n {\n value: FieldTypes.F_DRAG_MOLECULE,\n name: FieldTypes.F_DRAG_MOLECULE,\n label: 'Link Molecule',\n },\n {\n value: FieldTypes.F_DRAG_SAMPLE,\n name: FieldTypes.F_DRAG_SAMPLE,\n label: 'Link Sample',\n },\n {\n value: FieldTypes.F_INPUT_GROUP,\n name: FieldTypes.F_INPUT_GROUP,\n label: 'Input Group',\n },\n {\n value: FieldTypes.F_TEXT_FORMULA,\n name: FieldTypes.F_TEXT_FORMULA,\n label: 'Text-Formula',\n },\n { value: FieldTypes.F_TABLE, name: FieldTypes.F_TABLE, label: 'Table' },\n { value: FieldTypes.F_UPLOAD, name: FieldTypes.F_UPLOAD, label: 'Upload' },\n];\n\nconst SegmentFieldTypes = ElementFieldTypes;\n\nconst UnsVocTypes = [\n {\n value: FieldTypes.F_DUMMY,\n name: FieldTypes.F_DUMMY,\n label: 'Dummy',\n },\n {\n value: FieldTypes.F_FORMULA_FIELD,\n name: FieldTypes.F_FORMULA_FIELD,\n label: 'Formula-Field',\n },\n {\n value: FieldTypes.F_TABLE,\n name: FieldTypes.F_TABLE,\n label: 'Table',\n },\n {\n value: FieldTypes.F_TEXT_FORMULA,\n name: FieldTypes.F_TEXT_FORMULA,\n label: 'Text-Formula',\n },\n];\n\nexport const FieldBase = BaseFieldTypes;\nexport const ElementBase = BaseFieldTypes.concat(ElementFieldTypes);\nexport const SegmentBase = BaseFieldTypes.concat(SegmentFieldTypes);\nexport const UnsVocBase = UnsVocTypes;\n","import { ElementBase } from '@components/elements/BaseFields';\n\nconst findTypeLabel = (key) => {\n const fld = ElementBase.find((e) => e.value === key);\n return fld ? fld.label : key;\n}\n\nexport default findTypeLabel;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { FieldTypes } from 'generic-ui-core';\nimport LBadge from '@components/shared/LBadge';\nimport findTypeLabel from '@components/tools/field-utils';\n\n/**\n * Displays field property badges with appropriate styling.\n * Renders different badge variants based on the property type.\n */\nfunction FieldBadge({ fieldObj, prop }) {\n const value = fieldObj[prop];\n\n // Configuration mapping for different property types\n const configs = {\n field: {\n text: value || '',\n variant: 'solid',\n color: 'dark',\n },\n type: {\n text:\n fieldObj.type === FieldTypes.F_SELECT\n ? `${findTypeLabel(fieldObj.type)}: ${fieldObj?.option_layers}`\n : findTypeLabel(fieldObj.type),\n variant: 'outline',\n color: 'x',\n },\n cols: {\n text: value ? `column width division: ${value}` : '',\n variant: 'outline',\n color: 'default',\n },\n };\n\n // Get config for prop or use default\n const badgeConfig = configs[prop] || {\n text: value || '',\n variant: 'outline',\n color: 'default',\n };\n\n return (\n <LBadge\n variant={badgeConfig.variant}\n color={badgeConfig.color}\n text={badgeConfig.text}\n />\n );\n}\n\nFieldBadge.propTypes = {\n prop: PropTypes.oneOf(['field', 'type', 'cols']).isRequired,\n fieldObj: PropTypes.object.isRequired,\n};\n\nexport default FieldBadge;\n","/* eslint-disable react/forbid-prop-types */\nimport React, {\n forwardRef,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Badge,\n Button,\n Collapse,\n Form,\n InputGroup,\n ListGroup,\n} from 'react-bootstrap';\nimport { FieldTypes } from 'generic-ui-core';\nimport FieldBadge from '@components/fields/FieldBadge';\nimport LFormGroup from '@components/shared/LFormGroup';\n\nconst colorOptions = [\n { value: 'none', label: 'None', bg: 'white', text: 'dark' },\n { value: 'warning', label: 'Amber', bg: 'warning', text: 'white' },\n {\n value: 'primary',\n label: 'Blue (Ocean Blue)',\n bg: 'primary',\n text: 'white',\n },\n { value: 'info', label: 'Blue (Sky Blue)', bg: 'info', text: 'white' },\n { value: 'danger', label: 'Crimson', bg: 'danger', text: 'white' },\n { value: 'success', label: 'Fresh Green', bg: 'success', text: 'white' },\n { value: 'default', label: 'Grey', bg: 'secondary', text: 'dark' },\n];\n\nconst LayerAttrForm = forwardRef(({ layer, isAttrOnWF, isCreateMode }, ref) => {\n const attLayerKey = useRef();\n const attLabel = useRef();\n const attCols = useRef();\n // const attPosition = useRef();\n const attColor = useRef();\n const attStyle = useRef();\n const attWf = useRef();\n const [selectedColor, setSelectedColor] = useState(layer.color || 'none');\n const [showDynamicLabel, setShowDynamicLabel] = useState(false);\n const [labelFields, setLabelFields] = useState(layer.label_fields || []);\n const [, setDisplayLabel] = useState(layer.label || '');\n\n // Get valid fields for dynamic label (select types or text types)\n const VALID_FIELD_TYPES = [FieldTypes.F_SELECT, FieldTypes.F_TEXT];\n const getValidFields = () => {\n if (!layer.fields) return [];\n return layer.fields.filter((field) =>\n VALID_FIELD_TYPES.includes(field.type),\n );\n };\n\n const validFields = getValidFields();\n\n // Get available fields (not yet in labelFields)\n const getAvailableFields = () =>\n validFields.filter((field) => !labelFields.includes(field.field));\n\n // Add field to labelFields\n const handleAddField = (fieldName) => {\n setLabelFields([...labelFields, fieldName]);\n };\n\n // Remove field from labelFields\n const handleRemoveField = (fieldName) => {\n setLabelFields(labelFields.filter((f) => f !== fieldName));\n };\n\n // Move field up in labelFields\n const handleMoveUp = (index) => {\n if (index === 0) return;\n const newFields = [...labelFields];\n [newFields[index - 1], newFields[index]] = [\n newFields[index],\n newFields[index - 1],\n ];\n setLabelFields(newFields);\n };\n\n // Move field down in labelFields\n const handleMoveDown = (index) => {\n if (index === labelFields.length - 1) return;\n const newFields = [...labelFields];\n [newFields[index], newFields[index + 1]] = [\n newFields[index + 1],\n newFields[index],\n ];\n setLabelFields(newFields);\n };\n\n useImperativeHandle(ref, () => ({\n attLayerKey: attLayerKey.current,\n attLabel: attLabel.current,\n attCols: attCols.current,\n // attPosition: attPosition.current,\n attColor: attColor.current,\n attStyle: attStyle.current,\n attWf: attWf.current,\n labelFields,\n }));\n\n return (\n <Form className=\"row input-form\">\n <LFormGroup controlId=\"formControlLayerKey\">\n <InputGroup>\n <InputGroup.Text>Name</InputGroup.Text>\n <Form.Control\n type=\"text\"\n defaultValue={layer.key}\n ref={attLayerKey}\n readOnly={!!layer.key}\n className={layer.key ? 'bg-light text-muted' : ''}\n />\n </InputGroup>\n <div className=\"help\">\n Layer name is unique in the template, at least 3 characters\n <br />\n Layer name must contain only lowercase letters and underscores,\n underscores can not be the first/last one character\n <br />\n Layer name should not contain special characters like $, !, %, etc.\n </div>\n </LFormGroup>\n <LFormGroup controlId=\"formControlLayerLabel\">\n <InputGroup>\n <InputGroup.Text>Display name</InputGroup.Text>\n <Form.Control\n type=\"text\"\n defaultValue={layer.label}\n ref={attLabel}\n onChange={(e) => setDisplayLabel(e.target.value)}\n />\n </InputGroup>\n </LFormGroup>\n <LFormGroup controlId=\"formControlLayerCols\">\n <InputGroup>\n <InputGroup.Text>Columns per row</InputGroup.Text>\n <Form.Select defaultValue={layer.cols || 1} ref={attCols}>\n {[1, 2, 3, 4, 5, 6].map((value) => (\n <option key={value} value={value}>\n {value}\n </option>\n ))}\n </Form.Select>\n </InputGroup>\n </LFormGroup>\n {/* <LFormGroup controlId=\"formControlLayerPosition\">\n <InputGroup>\n <InputGroup.Text>Sequential position</InputGroup.Text>\n <Form.Control\n type=\"number\"\n defaultValue={layer.position}\n ref={attPosition}\n min={1}\n />\n </InputGroup>\n </LFormGroup> */}\n <LFormGroup controlId=\"formControlLayerColor\">\n <InputGroup>\n <InputGroup.Text>Header color</InputGroup.Text>\n <Form.Select\n defaultValue={layer.color}\n ref={attColor}\n onChange={(e) => setSelectedColor(e.target.value)}\n >\n {colorOptions.map((option) => (\n <option key={option.value} value={option.value}>\n {option.label}\n </option>\n ))}\n </Form.Select>\n <InputGroup.Text className=\"bg-white\">\n <Badge\n bg={\n colorOptions.find((opt) => opt.value === selectedColor)?.bg ||\n 'light'\n }\n text={\n colorOptions.find((opt) => opt.value === selectedColor)?.text ||\n 'dark'\n }\n className={selectedColor === 'default' ? 'lu-bg-light' : ''}\n >\n {colorOptions.find((opt) => opt.value === selectedColor)?.label ||\n 'None'}\n </Badge>\n </InputGroup.Text>\n </InputGroup>\n </LFormGroup>\n <LFormGroup controlId=\"formCtlHeaderStyle\">\n <InputGroup>\n <InputGroup.Text>Text Style</InputGroup.Text>\n <Form.Select defaultValue={layer.style} ref={attStyle}>\n <option value=\"panel_generic_heading\">bold</option>\n <option value=\"panel_generic_heading_bu\">bold + underline</option>\n <option value=\"panel_generic_heading_bui\">\n bold + underline + italic\n </option>\n </Form.Select>\n </InputGroup>\n </LFormGroup>\n <LFormGroup controlId=\"formCtlWF\" hidden={!isAttrOnWF}>\n <InputGroup>\n <InputGroup.Text>Used in Workflow?</InputGroup.Text>\n <Form.Select defaultValue={layer?.wf} ref={attWf}>\n <option value={false}>No</option>\n <option value>Yes</option>\n </Form.Select>\n </InputGroup>\n </LFormGroup>\n\n {/* Dynamic Display Name Configuration */}\n {!isCreateMode && (\n <LFormGroup controlId=\"formCtlDynamicLabel\">\n <Button\n variant=\"link\"\n onClick={() => setShowDynamicLabel(!showDynamicLabel)}\n aria-controls=\"dynamic-label-collapse\"\n aria-expanded={showDynamicLabel}\n className=\"text-decoration-none p-0 mb-2\"\n >\n {showDynamicLabel ? '▼' : '▶'} Advanced Display Name Setting\n {labelFields.length > 0 && (\n <Badge bg=\"info\" className=\"ms-2\">\n {labelFields.length} field{labelFields.length > 1 ? 's' : ''}{' '}\n selected\n </Badge>\n )}\n </Button>\n <Collapse in={showDynamicLabel}>\n <div id=\"dynamic-label-collapse\">\n <div className=\"border rounded p-3 bg-light\">\n <p className=\"text-muted small mb-3\">\n Select fields to include in the layer display name. Only\n select and text field types are supported. The display name\n will be:{' '}\n <strong>Display Name - Field1 Value - Field2 Value</strong>\n </p>\n\n {/* Selected Fields */}\n {labelFields.length > 0 && (\n <div className=\"mb-3\">\n <strong className=\"d-block mb-2\">\n Selected Fields (in order):\n </strong>\n <ListGroup>\n {labelFields.map((fieldName, index) => {\n const field = validFields.find(\n (f) => f.field === fieldName,\n );\n if (!field) return null;\n return (\n <ListGroup.Item\n key={fieldName}\n className=\"d-flex justify-content-between align-items-center\"\n >\n <span>\n <strong>{field.label || ''}</strong>\n <FieldBadge fieldObj={field} prop=\"field\" />\n {/* <Badge bg=\"secondary\" className=\"ms-2\">\n {field.type}\n </Badge> */}\n </span>\n <div>\n <Button\n size=\"xsm\"\n variant=\"outline-secondary\"\n onClick={() => handleMoveUp(index)}\n disabled={index === 0}\n className=\"me-1\"\n title=\"Move up\"\n >\n ↑\n </Button>\n <Button\n size=\"xsm\"\n variant=\"outline-secondary\"\n onClick={() => handleMoveDown(index)}\n disabled={index === labelFields.length - 1}\n className=\"me-1\"\n title=\"Move down\"\n >\n ↓\n </Button>\n <Button\n size=\"xsm\"\n variant=\"outline-danger\"\n onClick={() => handleRemoveField(fieldName)}\n title=\"Remove\"\n >\n ×\n </Button>\n </div>\n </ListGroup.Item>\n );\n })}\n </ListGroup>\n </div>\n )}\n\n {/* Available Fields */}\n {getAvailableFields().length > 0 && (\n <div className=\"mb-3\">\n <strong className=\"d-block mb-2\">Available Fields:</strong>\n <ListGroup>\n {getAvailableFields().map((field) => (\n <ListGroup.Item\n key={field.field}\n className=\"d-flex justify-content-between align-items-center\"\n >\n <span>\n <strong>{field.label || field.field}</strong>\n <FieldBadge fieldObj={field} prop=\"field\" />\n </span>\n <Button\n size=\"xsm\"\n variant=\"outline-primary\"\n onClick={() => handleAddField(field.field)}\n >\n Select\n </Button>\n </ListGroup.Item>\n ))}\n </ListGroup>\n </div>\n )}\n\n {validFields.length === 0 && (\n <div className=\"alert alert-info mb-0\">\n No text or select fields available in this layer.\n </div>\n )}\n </div>\n </div>\n </Collapse>\n </LFormGroup>\n )}\n </Form>\n );\n});\n\nLayerAttrForm.propTypes = {\n layer: PropTypes.object.isRequired,\n isAttrOnWF: PropTypes.bool.isRequired,\n isCreateMode: PropTypes.bool,\n};\n\nLayerAttrForm.defaultProps = {\n isCreateMode: false,\n};\n\nLayerAttrForm.displayName = 'LayerAttrForm';\n\nexport default LayerAttrForm;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, Button } from 'react-bootstrap';\nimport LayerAttrForm from '@components/elements/LayerAttrForm';\n\nfunction LayerAttrModal(props) {\n const { actions, isAttrOnWF, layer, showProps } = props;\n const { show, setShow } = showProps;\n const formRef = useRef();\n\n const handleCreate = (_fnAction) => {\n const buildLayer = {\n key: formRef.current.attLayerKey.value.trim(),\n label: formRef.current.attLabel.value.trim(),\n color: formRef.current.attColor.value.trim(),\n style: formRef.current.attStyle.value.trim(),\n cols: parseInt(formRef.current.attCols.value.trim() || 1, 10),\n position: -1, // Use -1 to ensure new layer sorts first, reorderPositions assigns sequential from 0\n wf:\n formRef.current.attWf.value === 'true' ||\n formRef.current.attWf.value === true ||\n false,\n label_fields: formRef.current.labelFields || [],\n };\n _fnAction(buildLayer);\n setShow(false);\n };\n\n const handleUpdate = (_fnAction) => {\n const updates = {\n key: formRef.current.attLayerKey.value.trim(),\n label: formRef.current.attLabel.value.trim(),\n color: formRef.current.attColor.value.trim(),\n style: formRef.current.attStyle.value.trim(),\n cols: parseInt(formRef.current.attCols.value.trim() || 1, 10),\n position: layer.position, // Preserve existing position on update\n wf:\n formRef.current.attWf.value === 'true' ||\n formRef.current.attWf.value === true ||\n false,\n label_fields: formRef.current.labelFields || [],\n };\n _fnAction(layer.key, updates);\n setShow(false);\n };\n\n const actionBtn = (_action, _fnAction) => {\n let button = null;\n switch (_action) {\n case 'c':\n button = (\n <Button\n key={`_layer_attr_modal_btn_${_action}`}\n variant=\"warning\"\n onClick={_fnAction ? () => handleCreate(_fnAction) : () => {}}\n >\n Create\n </Button>\n );\n break;\n case 'u':\n button = (\n <Button\n key={`_layer_attr_modal_btn_${_action}`}\n variant=\"warning\"\n onClick={_fnAction ? () => handleUpdate(_fnAction) : () => {}}\n >\n Update\n </Button>\n );\n break;\n default:\n button = null;\n }\n return button;\n };\n\n const addActions = () => {\n const buttons = [];\n actions.forEach((e) => {\n buttons.push(actionBtn(e.action, e.fnAction));\n // buttons.push(\n // <span key={`_layer_attr_modal_span_${e.action}`}>&nbsp;</span>,\n // );\n });\n return buttons;\n };\n\n const addTitles = () => {\n const title = [];\n const mapping = { c: 'New Layer', u: 'Edit Layer attributes' };\n actions.map((e) => title.push(mapping[e.action]));\n return title.join('/');\n };\n\n return (\n <Modal\n centered\n size=\"lg\"\n backdrop=\"static\"\n show={show}\n onHide={() => setShow(false)}\n >\n <Modal.Header closeButton>\n <Modal.Title>{addTitles()}</Modal.Title>\n </Modal.Header>\n <Modal.Body style={{ maxHeight: '70vh', overflow: 'auto' }}>\n <div className=\"col-md-12\">\n <LayerAttrForm\n ref={formRef}\n layer={layer}\n isAttrOnWF={isAttrOnWF}\n isCreateMode={actions.some((a) => a.action === 'c')}\n />\n </div>\n </Modal.Body>\n <Modal.Footer className=\"justify-content-start\">\n <Button variant=\"secondary\" onClick={() => setShow(false)}>\n Cancel\n </Button>\n {addActions()}\n </Modal.Footer>\n </Modal>\n );\n}\n\nLayerAttrModal.propTypes = {\n actions: PropTypes.arrayOf(\n PropTypes.shape({\n action: PropTypes.oneOf(['c', 'u']),\n fnAction: PropTypes.func,\n }),\n ).isRequired,\n isAttrOnWF: PropTypes.bool,\n layer: PropTypes.object,\n showProps: PropTypes.shape({\n show: PropTypes.bool.isRequired,\n setShow: PropTypes.func.isRequired,\n }).isRequired,\n};\n\nLayerAttrModal.defaultProps = { isAttrOnWF: false, layer: {} };\n\nexport default LayerAttrModal;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Dropdown } from 'react-bootstrap';\nimport LayerAttrModal from '@components/elements/LayerAttrModal';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\nimport TAs from '@components/tools/TAs';\n\nconst LayerAttrEditBtn = (props) => {\n const { fnUpdate, isAttrOnWF, layer, as } = props;\n const [show, setShow] = useState(false);\n\n const message = (_idf) => {\n const idfs = _idf.split('.');\n return typeof TAs[idfs[0]] === 'function'\n ? TAs[idfs[0]](idfs[1])\n : TAs[idfs[0]] || 'No message';\n };\n\n const conditionMenu = (\n <Dropdown.Item\n eventKey={`edit_layer_attr.${layer.label}`}\n onClick={() => setShow(true)}\n >\n {FIcons.faPencil}&nbsp;&nbsp;{message(`edit_layer_attr.${layer.label}`)}\n </Dropdown.Item>\n );\n\n return (\n <>\n {as === 'menu' ? (\n conditionMenu\n ) : (\n <LTooltip idf={`edit_layer_attr.${layer.label}`}>\n <Button size=\"sm\" onClick={() => setShow(true)}>\n {FIcons.faPencil}\n </Button>\n </LTooltip>\n )}\n <LayerAttrModal\n actions={[{ action: 'u', fnAction: fnUpdate }]}\n isAttrOnWF={isAttrOnWF}\n layer={layer}\n showProps={{ show, setShow }}\n />\n </>\n );\n};\n\nLayerAttrEditBtn.propTypes = {\n fnUpdate: PropTypes.func.isRequired,\n isAttrOnWF: PropTypes.bool,\n layer: PropTypes.object.isRequired,\n as: PropTypes.string,\n};\n\nLayerAttrEditBtn.defaultProps = { isAttrOnWF: false, as: 'menu' };\n\nexport default LayerAttrEditBtn;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport LayerAttrModal from '@components/elements/LayerAttrModal';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\n\nconst LayerAttrNewBtn = (props) => {\n const { fnCreate, isAttrOnWF } = props;\n const [show, setShow] = useState(false);\n\n return (\n <>\n <LTooltip idf=\"add_layer\">\n <Button\n className=\"fw-medium\"\n size=\"sm\"\n variant=\"primary\"\n onClick={() => setShow(true)}\n >\n {FIcons.faPlus}&nbsp;Add new layer\n </Button>\n </LTooltip>\n <LayerAttrModal\n actions={[{ action: 'c', fnAction: fnCreate }]}\n isAttrOnWF={isAttrOnWF}\n showProps={{ show, setShow }}\n />\n </>\n );\n};\n\nLayerAttrNewBtn.propTypes = {\n fnCreate: PropTypes.func.isRequired,\n isAttrOnWF: PropTypes.bool,\n};\n\nLayerAttrNewBtn.defaultProps = { isAttrOnWF: false };\n\nexport default LayerAttrNewBtn;\n","const API_V1 = '/api/v1';\nconst baseOptions = {\n credentials: 'same-origin',\n headers: {\n Accept: 'application/json',\n },\n};\n\nconst fetchOptions = (method) => {\n return {\n ...baseOptions,\n method,\n };\n};\n\nconst fetchBody = (data, method) => {\n return {\n ...baseOptions,\n method,\n headers: {\n ...baseOptions.headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data),\n };\n};\n\nconst handleResponse = async (response) => {\n if (!response.ok) {\n const errorData = await response.json();\n throw new Error(errorData.error || response.statusText);\n }\n const data = await response.json();\n if (!('mc' in data)) {\n return { mc: 'se01' };\n }\n return data;\n};\n\nconst handleError = (error) => {\n const errorMessage = error instanceof Error ? error.message : error;\n return { mc: 'se00', msg: errorMessage };\n};\n\nexport default class Api {\n /**\n * Build a full URL with optional query parameters\n */\n static buildUrl = (endpoint, params = {}) => {\n const searchParams = new URLSearchParams(params);\n const queryString = searchParams.toString();\n return `${API_V1}/${endpoint}${queryString ? `?${queryString}` : ''}`;\n };\n\n /**\n * Get headers for API requests\n */\n static getHeaders = () => {\n return {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n };\n };\n\n static execApi = async (path, method = 'GET', params = {}) => {\n const searchParams = new URLSearchParams(params);\n const queryString = searchParams.toString();\n const url = `${API_V1}/${path}${queryString ? `?${queryString}` : ''}`;\n try {\n const res = await fetch(url, fetchOptions(method));\n return await handleResponse(res);\n } catch (error) {\n return handleError(error);\n }\n };\n\n static execApiData = async (data, path, method = 'POST') => {\n try {\n const res = await fetch(`${API_V1}/${path}`, fetchBody(data, method));\n return await handleResponse(res);\n } catch (error) {\n return handleError(error);\n }\n };\n\n // deprecated\n // Execute an API call and return the fetch response with JSON parsing\n static execApiDepr = async (path, method = 'GET', params = {}) => {\n const searchParams = new URLSearchParams(params || {});\n const queryString = searchParams.toString();\n const url = `${API_V1}/${path}${queryString ? `?${queryString}` : ''}`;\n try {\n const res = await fetch(url, fetchOptions(method));\n return await res.json();\n } catch (error) {\n return handleError(error);\n }\n };\n\n static execApiDataDepr = async (data, path, method = 'POST') => {\n try {\n const res = await fetch(`${API_V1}/${path}`, fetchBody(data, method));\n return await res.json();\n } catch (error) {\n return handleError(error);\n }\n };\n\n /**\n * Execute an API call and return the raw fetch response without JSON parsing\n */\n static execApiRaw = async (endpoint, method = 'GET', params = {}) => {\n const url = Api.buildUrl(endpoint, params);\n try {\n const response = await fetch(url, {\n method,\n headers: Api.getHeaders(),\n credentials: 'same-origin',\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error ${response.status}`);\n }\n\n return response;\n } catch (error) {\n console.error(`API error for ${url}:`, error);\n throw error;\n }\n };\n\n /**\n * Execute an API call with data payload and return the raw fetch response\n */\n static execApiDataRaw = async (data, endpoint) => {\n const url = Api.buildUrl(endpoint);\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: Api.getHeaders(),\n credentials: 'same-origin',\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n throw new Error(`HTTP error ${response.status}`);\n }\n\n return response;\n } catch (error) {\n console.error(`API data error for ${url}:`, error);\n throw error;\n }\n };\n}\n","import Api from '@utils/api';\nimport Response from '@utils/response';\nimport { mc2res } from '@components/tools/format-utils';\n\nconst API_LA = 'layers';\n\nclass LayerManager {\n // a private static method\n static #exec = async (endpoint, method = 'GET', params = null) => {\n const fullEndpoint = `${API_LA}/${endpoint}`;\n const res = params\n ? await Api.execApiData(params, fullEndpoint)\n : await Api.execApi(fullEndpoint, method);\n // return mc2res(res.mc, res.msg || '');\n // { mc: 'aaa', msg: 'xxx', data: JSON Object or array}\n return new Response(mc2res(res.mc, res.msg || ''), { data: res.data });\n };\n\n static saveStandardLayer = (params = {}) =>\n LayerManager.#exec('save_standard_layer', 'POST', params);\n\n static deleteStandardLayer = (layerId) =>\n LayerManager.#exec(`delete_standard_layer/${layerId}`, 'DELETE');\n\n static getStandardLayer = (layerId) =>\n LayerManager.#exec(`get_standard_layer/${layerId}`);\n\n static getAllLayers = () => LayerManager.#exec('get_all_layers');\n}\n\nexport default LayerManager;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { v4 as uuidv4 } from 'uuid';\nimport { OverlayTrigger, Popover } from 'react-bootstrap';\n\nconst LPopover = ({ idf, content, trigger, placement, children }) => {\n const idfs = idf.split('.');\n const [uId] = useState(`lpo_${idfs[0]}_${uuidv4()}`);\n const popover = <Popover id={uId}>{content}</Popover>;\n\n return (\n <OverlayTrigger\n animation\n placement={placement || 'top'}\n trigger={trigger}\n overlay={popover}\n >\n {children}\n </OverlayTrigger>\n );\n};\n\nLPopover.propTypes = {\n idf: PropTypes.string,\n content: PropTypes.node.isRequired,\n trigger: PropTypes.arrayOf(PropTypes.string).isRequired,\n placement: PropTypes.string,\n children: PropTypes.node.isRequired,\n};\n\nLPopover.defaultProps = { idf: 'lpo', placement: 'top' };\n\nexport default LPopover;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport FIcons from '@components/icons/FIcons';\nimport LPopover from '@components/shared/LPopover';\n\nfunction ButtonConfirm(props) {\n const { msg, cls, fnClick, size, fnParams, place, fa, disabled } = props;\n const onClick = (event) => {\n fnClick(fnParams);\n event.stopPropagation();\n };\n const popoverContent = (\n <div\n className=\"bg-white border rounded shadow-sm p-3\"\n style={{ maxWidth: '400px' }}\n >\n <h6 className=\"mb-2\">Confirm Action</h6>\n <p className=\"mb-3\">\n {FIcons.faTriangleExclamation} {msg || 'Confirm'}\n </p>\n <div className=\"d-flex justify-content-end gap-2\">\n <Button\n size=\"sm\"\n variant=\"secondary\"\n onClick={(e) => e.stopPropagation()}\n data-testid=\"confirm-btn-no\"\n >\n No\n </Button>\n <Button\n size=\"sm\"\n variant=\"danger\"\n onClick={onClick}\n data-testid=\"confirm-btn-yes\"\n >\n Yes\n </Button>\n </div>\n </div>\n );\n return (\n <LPopover content={popoverContent} trigger={['focus']} placement={place}>\n <Button\n size={size || undefined}\n className={cls}\n disabled={disabled}\n data-testid=\"confirm-btn\"\n variant=\"light\"\n onClick={(e) => e.stopPropagation()}\n type=\"button\"\n >\n {FIcons[fa]}\n </Button>\n </LPopover>\n );\n}\n\nButtonConfirm.propTypes = {\n msg: PropTypes.string.isRequired,\n fnParams: PropTypes.object.isRequired,\n fnClick: PropTypes.func.isRequired,\n cls: PropTypes.string,\n size: PropTypes.string,\n place: PropTypes.string,\n fa: PropTypes.string,\n disabled: PropTypes.bool,\n};\n\nButtonConfirm.defaultProps = {\n cls: 'btn-none',\n size: undefined,\n place: 'top',\n fa: 'faTrashCan',\n disabled: false,\n};\n\nexport default ButtonConfirm;\n","import React, { useState, useEffect } from 'react';\nimport { Button } from 'react-bootstrap';\nimport { AgGridReact } from 'ag-grid-react';\nimport LTooltip from '@components/shared/LTooltip';\nimport LayerManager from '@utils/desMgr';\nimport ButtonConfirm from '@components/fields/ButtonConfirm';\nimport Constants from '@components/tools/Constants';\n\nconst LayersGrid = ({ onLayerSelect, onLayerDelete, onLayerView }) => {\n const [rowData, setRowData] = useState([]);\n\n useEffect(() => {\n const fetchLayers = async () => {\n const res = await LayerManager.getAllLayers();\n if (res.notify.isSuccess) {\n setRowData(res.element.data || []);\n }\n };\n fetchLayers();\n }, []);\n\n const columnDefs = [\n {\n headerName: 'Action',\n cellRenderer: (params) => (\n <>\n <LTooltip idf=\"lyr_add2tpl\">\n <Button size=\"sm\" onClick={() => onLayerSelect(params)}>\n Add\n </Button>\n </LTooltip>\n <LTooltip idf=\"lyr_view\">\n <Button\n className=\"gu-ml-1\"\n size=\"sm\"\n onClick={() => onLayerView(params)}\n >\n View\n </Button>\n </LTooltip>\n <ButtonConfirm\n cls=\"gu-ml-1\"\n msg=\"Delete this Standard Layer permanently?\"\n fnClick={onLayerDelete}\n fnParams={params}\n />\n </>\n ),\n sortable: false,\n filter: false,\n width: 160,\n },\n {\n field: 'id',\n headerName: 'ID',\n sortable: false,\n filter: false,\n width: 70,\n },\n {\n field: 'name',\n headerName: 'Name',\n sortable: true,\n filter: true,\n width: 200,\n },\n {\n field: 'label',\n headerName: 'Display Name',\n sortable: true,\n filter: true,\n flex: 1,\n },\n {\n field: 'description',\n headerName: 'Description',\n sortable: true,\n filter: false,\n cellStyle: { whiteSpace: 'pre-wrap', lineHeight: '20px' },\n cellRenderer: (params) => {\n return params.value ? (\n <pre\n style={{\n margin: 0,\n fontFamily: 'inherit',\n backgroundColor: 'unset',\n border: 'unset',\n }}\n >\n {params.value}\n </pre>\n ) : (\n ''\n );\n },\n autoHeight: true,\n flex: 1,\n },\n ];\n\n return (\n <div\n className={Constants.GRID_THEME.QUARTZ.VALUE}\n style={{ height: '600px', width: '100%', overflow: 'auto' }}\n >\n <AgGridReact columnDefs={columnDefs} rowData={rowData} suppressAutoSize />\n </div>\n );\n};\n\nexport default LayersGrid;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal } from 'react-bootstrap';\nimport Constants from '@components/tools/Constants';\n\nconst NoDataModal = props => {\n const { show, title, fnHide } = props;\n return (\n <Modal centered show={show} size=\"sm\" onHide={fnHide}>\n <Modal.Header closeButton>\n <Modal.Title>{title}</Modal.Title>\n </Modal.Header>\n <Modal.Body>No Data</Modal.Body>\n </Modal>\n );\n};\n\nconst GenAnaModal = props => {\n const { show, generic, layer, fnHide, fnLink } = props;\n if (!show) return null;\n const { name, container, properties } = generic;\n const specLayer = properties && properties.layers && properties.layers[layer];\n const title = specLayer.label || '(no label)';\n let ai =\n (container && container.children && container.children[0].children) || [];\n ai = ai.filter(x => !x.is_new);\n if (ai.length < 1 || !title) {\n return (\n <NoDataModal\n show={show}\n title={`Analyses, select to link to Layer ${title}`}\n fnHide={fnHide}\n />\n );\n }\n\n const layerAi = specLayer.ai || [];\n const row = _ai => (\n <div key={`_row_linked_analysis_${_ai.id}_${layer}`}>\n <div className=\"generic_grid_row generic_grid_row_left\">{_ai.name}</div>\n <div className=\"generic_grid_row generic_grid_row_left\">\n <Button\n size=\"sm\"\n variant=\"success\"\n className=\"gu_button_right\"\n onClick={() => fnLink(_ai.id, layer, Constants.BTN_AI_LINK)}\n disabled={layerAi.includes(_ai.id)}\n >\n {Constants.BTN_AI_LINK}\n </Button>\n <Button\n size=\"sm\"\n variant=\"danger\"\n className=\"gu_button_right\"\n onClick={() => fnLink(_ai.id, layer, Constants.BTN_AI_UNLINK)}\n disabled={!layerAi.includes(_ai.id)}\n >\n {Constants.BTN_AI_UNLINK}\n </Button>\n </div>\n </div>\n );\n\n const rows = [];\n ai.forEach(_ai => {\n rows.push(row(_ai));\n });\n\n return (\n <Modal centered size=\"lg\" show={show} onHide={fnHide}>\n <Modal.Header closeButton>\n <Modal.Title>\n <b>{name}</b> Analyses\n <br />\n select to link/unlink to Layer <b>{title}</b>\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <div style={{ maxHeight: '80vh', overflow: 'auto' }}>\n <div className=\"generic_grid\">{rows}</div>\n </div>\n </Modal.Body>\n </Modal>\n );\n};\n\nGenAnaModal.propTypes = {\n show: PropTypes.bool.isRequired,\n generic: PropTypes.object.isRequired,\n layer: PropTypes.string.isRequired,\n fnHide: PropTypes.func.isRequired,\n fnLink: PropTypes.func.isRequired,\n};\n\nexport default GenAnaModal;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Col, Form, InputGroup, Row } from 'react-bootstrap';\nimport round from 'lodash/round';\nimport moment from 'moment';\nimport 'moment-precise-range-plugin';\nimport { genUnit, genUnits, unitConversion, FieldTypes } from 'generic-ui-core';\nimport GenericSubField from '@components/models/GenericSubField';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\nimport { editable } from '@/utils/pureUtils';\n\nconst DateTimeRangeFields = [\n 'timeStart',\n 'timeStop',\n 'durationCalc',\n 'duration',\n];\nconst MomentUnit = {\n d: 'days',\n h: 'hours',\n min: 'minutes',\n s: 'seconds',\n};\n\nconst DurationLabel = {\n d: 'day(s)',\n h: 'hour(s)',\n min: 'min(s)',\n s: 'sec(s)',\n};\n\nconst DateTimeRange = props => {\n const { layer, opt, onInputChange, editMode } = props;\n const timePlaceholder = 'DD/MM/YYYY hh:mm:ss';\n\n let subFields = opt.f_obj.sub_fields || [];\n if (subFields.length < 1) {\n subFields = DateTimeRangeFields.map(e => {\n if (e === 'duration') {\n return new GenericSubField({\n type: FieldTypes.F_TEXT,\n value: '',\n col_name: e,\n option_layers: 'duration',\n value_system: 'd',\n });\n }\n return new GenericSubField({ type: FieldTypes.F_TEXT, value: '', col_name: e });\n });\n }\n const timeStart = subFields.find(f => f.col_name === 'timeStart') || '';\n const timeStop = subFields.find(f => f.col_name === 'timeStop') || '';\n const duration = subFields.find(f => f.col_name === 'duration') || '';\n\n const durationDiff = (startAt, stopAt, precise = false) => {\n if (startAt && stopAt) {\n const start = moment(startAt, 'DD-MM-YYYY HH:mm:ss');\n const stop = moment(stopAt, 'DD-MM-YYYY HH:mm:ss');\n if (start < stop) {\n return precise\n ? moment.preciseDiff(start, stop)\n : moment.duration(stop.diff(start));\n }\n }\n return '';\n };\n\n const highestUnitFromDuration = (d, threshold = 1.0) => {\n if (d.asDays() >= threshold) {\n return 'd';\n }\n if (d.asHours() >= threshold) {\n return 'h';\n }\n if (d.asMinutes() >= threshold) {\n return 'min';\n }\n if (d.asSeconds() >= threshold) {\n return 's';\n }\n return 'h';\n };\n\n const dataChange = params => {\n const { field, event } = params;\n if (event === 'setCurrent') {\n const currentTime = new Date()\n .toLocaleString('en-GB')\n .split(', ')\n .join(' ');\n subFields.find(f => f.col_name === field).value = currentTime;\n } else if (event === 'changeUnit') {\n const sub = subFields.find(f => f.col_name === field);\n const units = genUnits('duration');\n let uIdx = units.findIndex(u => u.key === sub.value_system);\n if (uIdx < units.length - 1) uIdx += 1;\n else uIdx = 0;\n sub.value_system = units.length > 0 ? units[uIdx].key : '';\n sub.value = unitConversion('duration', sub.value_system, sub.value);\n } else if (event === 'copyTo') {\n const calDiff = durationDiff(timeStart.value, timeStop.value);\n if (calDiff) {\n const highestUnit = highestUnitFromDuration(calDiff);\n const sub = subFields.find(f => f.col_name === field);\n sub.value_system = highestUnit;\n sub.value = round(calDiff.as(MomentUnit[highestUnit]), 1);\n }\n } else {\n const { value } = event.target;\n subFields.find(f => f.col_name === field).value = value;\n }\n onInputChange({\n field: opt.f_obj.field,\n layer: layer.key,\n subFields,\n type: opt.f_obj.type,\n });\n };\n\n const calc = durationDiff(timeStart.value, timeStop.value, true);\n const canEdit = editable(editMode, !(timeStart.readonly ?? false));\n\n return (\n <Row>\n <Col sm={12} md={3} lg={3}>\n <Form.Group>\n <Form.Label>Start</Form.Label>\n <InputGroup>\n <Form.Control\n type=\"text\"\n value={timeStart.value}\n placeholder={timePlaceholder}\n onChange={(event) => dataChange({ field: 'timeStart', event })}\n readOnly={!canEdit}\n />\n <Button\n variant=\"light\"\n style={{ padding: '6px' }}\n onClick={() =>\n dataChange({ field: 'timeStart', event: 'setCurrent' })\n }\n disabled={!canEdit}\n >\n {FIcons.faClock}\n </Button>\n </InputGroup>\n </Form.Group>\n </Col>\n <Col sm={12} md={3} lg={3}>\n <Form.Group>\n <Form.Label>Stop</Form.Label>\n <InputGroup>\n <Form.Control\n type=\"text\"\n value={timeStop.value}\n placeholder={timePlaceholder}\n onChange={(event) => dataChange({ field: 'timeStop', event })}\n readOnly={!canEdit}\n />\n <Button\n variant=\"light\"\n style={{ padding: '6px' }}\n onClick={() =>\n dataChange({ field: 'timeStop', event: 'setCurrent' })\n }\n disabled={!canEdit}\n >\n {FIcons.faClock}\n </Button>\n </InputGroup>\n </Form.Group>\n </Col>\n <Col sm={12} md={3} lg={3}>\n <Form.Group>\n <Form.Label>Duration</Form.Label>\n <InputGroup>\n <Form.Control\n type=\"text\"\n value={calc}\n disabled\n placeholder=\"Duration\"\n readOnly={!canEdit}\n />\n <LTooltip idf=\"clipboard\">\n <Button\n variant=\"light\"\n onClick={() => {\n navigator.clipboard.writeText(calc);\n }}\n disabled={!canEdit}\n >\n {FIcons.faPaste}\n </Button>\n </LTooltip>\n <LTooltip idf=\"copy_to_duration\">\n <Button\n variant=\"light\"\n className=\"clipboardBtn\"\n onClick={() =>\n dataChange({ field: 'duration', event: 'copyTo' })\n }\n disabled={!canEdit}\n >\n {FIcons.faArrowRight}\n </Button>\n </LTooltip>\n </InputGroup>\n </Form.Group>\n </Col>\n <Col sm={12} md={3} lg={3}>\n <Form.Group>\n <Form.Label>&nbsp;</Form.Label>\n <InputGroup>\n <Form.Control\n type=\"text\"\n value={duration.value || ''}\n placeholder=\"Input Duration...\"\n onChange={(event) => dataChange({ field: 'duration', event })}\n readOnly={!canEdit}\n />\n <Button\n variant=\"success\"\n onClick={() =>\n dataChange({ field: 'duration', event: 'changeUnit' })\n }\n disabled={!canEdit}\n >\n {DurationLabel[genUnit('duration', duration.value_system).key] ||\n ''}\n </Button>\n </InputGroup>\n </Form.Group>\n </Col>\n </Row>\n );\n};\n\nDateTimeRange.propTypes = {\n opt: PropTypes.object.isRequired,\n layer: PropTypes.object.isRequired,\n onInputChange: PropTypes.func.isRequired,\n editMode: PropTypes.bool.isRequired,\n};\n\nexport default DateTimeRange;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport { Button } from 'react-bootstrap';\nimport { buildTS } from 'generic-ui-core';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\n\nfunction TermLink(_ontology, _text = '') {\n const toUrl = buildTS(_ontology);\n if (!toUrl) return null;\n const { label } = _ontology;\n return (\n <LTooltip idf={`link_term.${label}`}>\n <Button\n className=\"p-0\"\n variant=\"link\"\n href={toUrl}\n target=\"_blank\"\n onClick={(e) => e.stopPropagation()}\n >\n {!_text ? FIcons.faCircleQuestion : _text}\n </Button>\n </LTooltip>\n );\n}\n\nexport default TermLink;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport { v4 as uuid } from 'uuid';\nimport TermLink from '@components/fields/TermLink';\n\nconst FieldLabel = (props) => {\n const { label, desc, isSpCall, ontology } = props;\n const klz = isSpCall\n ? 'gu_sp_label fw-bold d-inline-block mt-2 mb-1'\n : 'gu_sp_label_none fw-bold d-inline-block mt-2 mb-1';\n return desc && desc !== '' && !isSpCall ? (\n <>\n <OverlayTrigger\n placement=\"top\"\n overlay={<Tooltip id={uuid()}>{desc}</Tooltip>}\n >\n <span className={klz}>{label}</span>\n </OverlayTrigger>\n {TermLink(ontology)}\n </>\n ) : (\n <span className={klz}>\n {label}&nbsp;{TermLink(ontology)}\n </span>\n );\n};\n\nFieldLabel.propTypes = {\n label: PropTypes.string.isRequired,\n desc: PropTypes.string,\n isSpCall: PropTypes.bool,\n ontology: PropTypes.object,\n};\nFieldLabel.defaultProps = { desc: '', isSpCall: false, ontology: null };\n\nexport default FieldLabel;\n","import React from 'react';\nimport FieldLabel from '@components/fields/FieldLabel';\n\nconst FieldHeader = (opt) => {\n const { label, description, isSpCall, f_obj: fObj } = opt;\n if (label === undefined) return null;\n if (label === '') return <FieldLabel label={' '} />;\n if (label !== '' && !fObj) return <FieldLabel label={label} />;\n return (\n <FieldLabel\n label={label}\n desc={description}\n isSpCall={isSpCall}\n ontology={fObj.ontology}\n />\n );\n};\n\nexport default FieldHeader;\n","import { v4 as uuid } from 'uuid';\n\nexport default class Attachment {\n constructor(args) {\n Object.assign(this, args);\n if (!this.id) { this.id = Attachment.buildID(); }\n }\n\n static buildID() { return uuid(); }\n\n static fromFile(file) {\n return new Attachment({\n file,\n name: file.name,\n filename: file.name,\n identifier: file.id,\n is_deleted: false,\n });\n }\n\n get isNew() {\n return this.is_new === true;\n }\n\n serialize() {\n return super.serialize({\n filename: this.filename,\n identifier: this.identifier,\n file: this.file,\n thumb: this.thumb,\n content_type: this.content_type,\n is_deleted: this.is_deleted,\n id: this.id,\n is_new: this.isNew || false\n });\n }\n}\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Tooltip, OverlayTrigger } from 'react-bootstrap';\nimport FIcons from '@components/icons/FIcons';\n\nfunction FieldTooltip({ link }) {\n if (!link) return null;\n return (\n <OverlayTrigger\n delayShow={1000}\n placement=\"top\"\n overlay={<Tooltip id=\"_field_doc_tooltip\">Learn more</Tooltip>}\n >\n <Button\n style={{ padding: '0' }}\n variant=\"link\"\n href={link}\n target=\"_blank\"\n onClick={(e) => e.stopPropagation()}\n >\n {FIcons.faCircleQuestion}\n </Button>\n </OverlayTrigger>\n );\n}\n\nFieldTooltip.propTypes = { link: PropTypes.string.isRequired };\n\nexport default FieldTooltip;\n","import React from 'react';\nimport { v4 as uuid } from 'uuid';\nimport cloneDeep from 'lodash/cloneDeep';\nimport findIndex from 'lodash/findIndex';\nimport { FieldTypes, getUnitSystem } from 'generic-ui-core';\nimport Attachment from '@components/models/Attachment';\nimport Constants from '@components/tools/Constants';\nimport FieldTooltip from '@components/fields/FieldTooltip';\nimport DocuConst from '@components/tools/DocuConst';\n\nconst KlzIcon = (klz, klzSty) => <span className={klz} style={klzSty} />;\n\n// move from GenericElCommon.js > UploadInputChange\nconst uploadFiles = (properties, event, field, layer) => {\n const files = [];\n const fieldObj =\n properties.layers[`${layer}`].fields.find((e) => e.field === field) || {};\n const value = fieldObj.value || {};\n switch (event.action) {\n case 'l': {\n const valIdx = findIndex(value.files || [], (o) => o.uid === event.uid);\n const label =\n event && event.val && event.val.target && event.val.target.value;\n if (value.files[valIdx] && label) value.files[valIdx].label = label;\n break;\n }\n case 'f': {\n (event.val || []).forEach((file) => {\n const uid = uuid();\n if (typeof value.files === 'undefined' || value.files === null)\n value.files = [];\n value.files.push({ uid, filename: file.name });\n files.push({\n uid,\n filename: file.name,\n file: Attachment.fromFile(file),\n });\n });\n break;\n }\n case 'd': {\n const valIdx = findIndex(value.files || [], (o) => o.uid === event.uid);\n if (valIdx >= 0 && value.files && value.files.length > 0)\n value.files.splice(valIdx, 1);\n return [value, files, event.uid];\n }\n default:\n console.log(event);\n }\n return [value, files];\n};\n\nclass GenericDummy {\n constructor() {\n this.type = FieldTypes.F_DUMMY;\n this.field = uuid();\n this.position = 100;\n this.label = '';\n this.default = '';\n this.required = false;\n }\n}\n\n// TODO: Remove this function, maybe not needed\nconst inputEventVal = (event, type) => {\n if (type === FieldTypes.F_SELECT) {\n return event ? event.value : null;\n }\n if (type.startsWith(FieldTypes.F_DRAG)) {\n return event;\n }\n if (type === FieldTypes.F_CHECKBOX) {\n return event.target.checked;\n }\n if (type === FieldTypes.F_FORMULA_FIELD) {\n if (event.target) {\n return event.target.value;\n }\n return event;\n }\n return event.target && event.target.value;\n};\n\nconst genUnitSup = (val) => {\n if (typeof val === 'undefined' || val === null || val === '') return '';\n const vals = val.match(\n /<\\s*(\\w+\\b)(?:(?!<\\s*\\/\\s*\\1\\b)[\\s\\S])*<\\s*\\/\\s*\\1\\s*>|[^<]+/g,\n );\n const reV = vals.map((v) => {\n const supVal = v.match(/<sup[^>]*>([^<]+)<\\/sup>/);\n if (supVal) return <sup key={uuid()}>{supVal[1]}</sup>;\n const subVal = v.match(/<sub[^>]*>([^<]+)<\\/sub>/);\n if (subVal) return <sub key={uuid()}>{subVal[1]}</sub>;\n return v;\n });\n return <span>{reV}</span>;\n};\n\nconst molOptions = [\n { label: 'InChiKey', value: 'inchikey' },\n { label: 'SMILES', value: 'smiles' },\n { label: 'IUPAC', value: 'iupac' },\n { label: 'Mass', value: 'molecular_weight' },\n];\nconst samOptions = [\n { label: 'Name', value: 'name' },\n { label: 'Ext. Label', value: 'external_label' },\n { label: 'Mass', value: 'molecular_weight' },\n];\n\nconst storeFlow = (props) => {\n const { elements } = props;\n const els = cloneDeep(elements);\n els.map((d) => {\n if (['default'].includes(d.type) && d.data) {\n delete d.data.label;\n delete d.data.layer;\n }\n return d;\n });\n return els;\n};\n\nconst fieldCls = (isSpCall = false) => {\n const clsFrm = isSpCall ? 'gu_sp_form' : 'gu_sp_form_none';\n const clsCol = isSpCall ? 'gu_sp_column' : 'gu_sp_column_none';\n return [clsFrm, clsCol];\n};\n\nconst buildDocPath = (segments, hash = '') => {\n const path = [DocuConst.DOC_SITE, ...segments].join('/');\n return hash ? `${path}#${hash}` : path;\n};\n\nconst docDesignerBase = ['designer', 'components'];\nconst docFields = buildDocPath([...docDesignerBase, 'fields']);\n\nconst propDefault = {\n cols: {\n label: 'Column Width Division',\n // tooltip: [\n // 'Determine the portion of the row width allocated to this component.',\n // \"Specify how much of the row width this component occupies.\",\n // ].join(' '),\n doc: [docFields, '#column-width-division'].join(''),\n },\n description: {\n label: 'Hover Info',\n doc: [docFields, '#hover-info'].join(''),\n },\n field: {\n label: 'Field Name',\n doc: [docFields, '#field-name'].join(''),\n },\n hasOwnRow: {\n label: 'Has its own line',\n doc: [docFields, '#has-its-own-line'].join(''),\n },\n label: { label: 'Display Name', doc: [docFields, '#display-name'].join('') },\n placeholder: {\n label: 'Placeholder',\n doc: [docFields, '/types', '/text', '#placeholder'].join(''),\n },\n type: {\n label: 'Type',\n doc: [docFields, '/types'].join(''),\n },\n // special cases\n canAdjust: {\n label: 'Can adjust?',\n doc: [docFields, '/types', '/formula-field', '#can-adjust'].join(''),\n },\n decimal: {\n label: 'Decimal',\n doc: [docFields, '/types', '/formula-field', '#decimal'].join(''),\n },\n formula: {\n label: 'Formula',\n doc: [docFields, '/types', '/formula-field', '#formula'].join(''),\n },\n options: {\n label: 'Options',\n doc: [docFields, '/types', '/select', '#options'].join(''),\n },\n readonly: {\n label: 'Readonly',\n doc: [docFields, '/types', '/text', '#read-only'].join(''),\n },\n required: {\n label: 'Required',\n doc: [docFields, '/types', '/text', '#required'].join(''),\n },\n si: {\n label: 'Measured Parameter',\n doc: [docFields, '/types', '/system-defined', '#system-units'].join(''),\n },\n supportedUnits: {\n label: 'Set Default Unit',\n doc: [docFields, '/types', '/system-defined', '#supported-units'].join(''),\n },\n // designer\n designer: {\n label: 'LabIMotion Designer',\n doc: [DocuConst.DOC_SITE, 'designer'].join('/'),\n },\n restrictionSetting: {\n label: 'Restriction Setting',\n doc: [docFields, 'layers', 'restriction-setting'].join(''),\n },\n templateFeatures: {\n label: 'Template Features',\n doc: [DocuConst.DOC_SITE, 'designer', 'template-features'].join('/'),\n },\n};\n\nconst getFieldProps = (name) => {\n if (!propDefault[name]) return {};\n return {\n label: propDefault[name].label,\n fieldTooltip: (\n <FieldTooltip\n tooltip={propDefault[name].tooltip}\n link={propDefault[name].doc}\n />\n ),\n };\n};\n\nconst frmSelSty = {\n menuPortal: (base) => ({ ...base, zIndex: 9999 }),\n menu: (base) => ({ ...base, zIndex: 9999 }),\n control: (base) => ({\n ...base,\n minHeight: '31px',\n height: '31px',\n border: '1px solid #ced4da',\n boxShadow: 'none',\n '&:hover': {\n borderColor: '#80bdff',\n },\n }),\n valueContainer: (base) => ({\n ...base,\n padding: '0 8px',\n height: '29px',\n }),\n singleValue: (base) => ({\n ...base,\n marginTop: '0',\n lineHeight: '29px',\n }),\n multiValue: (base) => ({\n ...base,\n lineHeight: 'normal',\n }),\n input: (base) => ({\n ...base,\n margin: '0',\n padding: '0',\n }),\n indicatorsContainer: (base) => ({\n ...base,\n height: '29px',\n }),\n dropdownIndicator: (base) => ({\n ...base,\n padding: '4px',\n }),\n};\n\nconst storeOptions = (options) => {\n // First check if options is an array\n if (!Array.isArray(options)) {\n return [];\n }\n\n // Empty array is valid\n if (options.length === 0) {\n return [];\n }\n\n // Check if all elements are objects with a 'value' property\n if (\n !options.every(\n (item) => item && typeof item === 'object' && 'value' in item,\n )\n ) {\n return [];\n }\n\n // Filter out objects with falsy values and remove duplicates\n return Array.from(\n new Map(\n options.filter((item) => item.value).map((item) => [item.value, item]),\n ).values(),\n ).map((item) => ({ value: item.value }));\n};\n\nconst transformValues = (options) => {\n if (!Array.isArray(options)) {\n return [];\n }\n return options\n .map((item) => item.value)\n .filter((value) => value !== null && typeof value !== 'object')\n .map(String);\n};\n\nconst getAssociationStatus = (id, taggable) => {\n if (taggable.element?.id === id) {\n return false;\n }\n return !!(taggable.reaction_id || taggable.wellplate_id || taggable.element);\n};\n\nconst permitTargets = Object.values(Constants.PERMIT_TARGET);\nconst srcElement = Constants.PERMIT_TARGET.ELEMENT;\nconst srcElements = [\n Constants.PERMIT_TARGET.SAMPLE,\n Constants.PERMIT_TARGET.MOLECULE,\n];\nconst exceptElements = srcElements.concat([Constants.PERMIT_TARGET.GRID]);\n\n// source could be one of sample, molecule, element\n// when element, return all permit targets except sample and molecule and grid\nconst searchTargets = (source) => {\n if (srcElements.includes(source[0])) {\n return source;\n }\n return permitTargets.filter((t) => !exceptElements.includes(t));\n};\n\nconst userData = (user) => {\n const userObj = user || {};\n const id = userObj.id;\n if (!id) return { id: '', name: '', email: '' };\n\n const name = `${userObj?.first_name} ${userObj?.last_name}` || '';\n const email = userObj?.email || '';\n return { id, name, email };\n}\n\nconst defaultVSystem = (si) => {\n const sis = getUnitSystem();\n const fSi = sis.filter((e) => e.field === si)[0];\n if (!fSi || Object.keys(fSi).length === 0) return null; // return if SI is not found\n\n return fSi?.units[0];\n};\n\n// true → {}, { a: 1 }, any plain object\n// false → \"hello\", \"\", \"2\", 2, 3.14, null, []\nconst isObject = (value) => {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n};\n\nexport {\n defaultVSystem,\n isObject,\n searchTargets,\n frmSelSty,\n GenericDummy,\n genUnitSup,\n inputEventVal,\n molOptions,\n samOptions,\n storeFlow,\n uploadFiles,\n KlzIcon,\n fieldCls,\n getAssociationStatus,\n getFieldProps,\n permitTargets,\n srcElement,\n srcElements,\n storeOptions,\n transformValues,\n userData,\n};\n","import { getAssociationStatus } from '@components/tools/utils';\nimport Constants from '@components/tools/Constants';\n\nconst getElementTip = (prop1, prop2, separator) =>\n `${prop1}${separator}${prop2}`;\n\nconst elementSource = (props, separator) => {\n const hasProperties = Object.prototype.hasOwnProperty.call(\n props,\n Constants.PROPS_RELEASE,\n );\n const result = {\n icon_name: props.element_klass?.icon_name || '',\n el_tip: hasProperties\n ? getElementTip(props.label, props.name, separator)\n : props.short_label || props.name || props.label || '',\n el_klass: hasProperties ? props.element_klass?.name : props.type,\n };\n return result;\n};\n\n// type: molecule, sample, element\n// props.type: molecule, sample, element, reaction, ...\nconst buildSourceFromElement = (type, props, id, classStr) => {\n const taggable = props?.tag?.taggable_data || {};\n const isAssoc = getAssociationStatus(id, taggable);\n const SEPARATOR = Constants.SEPARATOR_TAG;\n\n const baseSource = {\n el_id: props.id,\n el_type: type,\n el_label: props.short_label,\n el_name: props.name || '',\n el_tip: props.short_label || props.name || props.label || '',\n };\n\n const typeConfigs = {\n [Constants.PERMIT_TARGET.MOLECULE]: {\n el_id: props.molecule?.id,\n el_label: props.molecule_name_label,\n el_tip: getElementTip(\n props.molecule?.inchikey,\n props.molecule?.cano_smiles,\n SEPARATOR,\n ),\n },\n [Constants.PERMIT_TARGET.SAMPLE]: {\n is_new: true,\n cr_opt: classStr && isAssoc ? 1 : 0,\n isAssoc,\n el_decoupled: props.decoupled || false,\n el_klass: Constants.PERMIT_TARGET.SAMPLE,\n },\n [Constants.PERMIT_TARGET.ELEMENT]: elementSource(props, SEPARATOR),\n };\n\n return { ...baseSource, ...(typeConfigs[type] || {}) };\n};\n\nexport default buildSourceFromElement;\n","const iconFinder = {\n cell_line: 'icon-cell_line',\n device_description: 'icon-device_description',\n reaction: 'icon-reaction',\n research_plan: 'icon-research_plan',\n sample: 'icon-sample',\n screen: 'icon-screen',\n wellplate: 'icon-wellplate',\n};\n\nexport default iconFinder;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { v4 as uuid } from 'uuid';\nimport { useDrop } from 'react-dnd';\nimport { Tooltip, OverlayTrigger, Popover } from 'react-bootstrap';\nimport Constants from '@components/tools/Constants';\nimport { KlzIcon, searchTargets } from '@components/tools/utils';\nimport FIcons from '@components/icons/FIcons';\nimport buildSourceFromElement from '@components/tools/build-source-form';\nimport iconFinder from '@components/tools/icon-finder';\n\nconst show = (opt, iconClass, onNavi) => {\n if (opt.value?.el_id) {\n const elementLabel = opt.value?.el_label || opt.value?.el_name;\n let elSvg = opt.value.el_svg;\n if (opt.value.el_type === Constants.PERMIT_TARGET.SAMPLE) {\n if (elSvg && !elSvg.endsWith('.svg') && opt.value.el_decoupled) {\n elSvg = Constants.IMG_NOT_AVAILABLE_SVG;\n }\n }\n if (elSvg && !elSvg.endsWith('.svg'))\n elSvg = Constants.IMG_NOT_AVAILABLE_SVG;\n const tips = opt.value.el_tip && opt.value.el_tip.split(Constants.SEPARATOR_TAG);\n const tip1 = (tips && tips.length >= 1 && tips[0]) || '';\n const tip2 = (tips && tips.length >= 2 && tips[1]) || '';\n const tit = (\n <div>\n {tip1}\n <br />\n {tip2}\n </div>\n );\n const pop = (\n <Popover\n id=\"popover-svg\"\n title={tit}\n style={{ maxWidth: 'none', maxHeight: 'none' }}\n >\n <img src={elSvg} style={{ height: '26vh', width: '26vh' }} alt=\"\" />\n </Popover>\n );\n let label = elementLabel;\n const asShown = path =>\n path === Constants.IMG_NOT_AVAILABLE_SVG ? null : (\n <OverlayTrigger\n delayShow={1000}\n trigger={['hover', 'focus']}\n placement=\"top\"\n rootClose\n onHide={null}\n overlay={pop}\n >\n <img className=\"generic_grid_img\" src={path} alt=\"\" />\n </OverlayTrigger>\n );\n const simg = (path, tip, txt) =>\n path && path !== '' ? (\n <div className=\"s-img\">\n {asShown(path)}\n <span className=\"data\">{txt}</span>\n </div>\n ) : (\n <OverlayTrigger\n placement=\"top\"\n overlay={\n <Tooltip id={uuid()}>\n {tip1}\n <br />\n {tip2}\n </Tooltip>\n }\n >\n <div className=\"data\">{txt}</div>\n </OverlayTrigger>\n );\n if (opt.value.el_type === Constants.PERMIT_TARGET.SAMPLE) {\n if (opt.value.is_new !== true) {\n label = (\n <a\n role=\"link\"\n onClick={() => onNavi(opt.value.el_type, opt.value.el_id)}\n className=\"lu-link\"\n >\n <span className=\"reaction-material-link\">{elementLabel}</span>\n </a>\n );\n }\n }\n if (opt.value.el_type === Constants.PERMIT_TARGET.ELEMENT) {\n const iconName = iconFinder[opt.value.el_klass] || opt.value.icon_name;\n label = (\n <a\n role=\"link\"\n onClick={() => onNavi(opt.value.el_klass, opt.value.el_id)}\n className=\"lu-link\"\n >\n <i className={iconName} />{' '}\n <span className=\"reaction-material-link\">{elementLabel}</span>\n </a>\n );\n }\n return simg(elSvg, opt.value.el_tip, label);\n }\n if (iconClass === Constants.PERMIT_TARGET.ELEMENT) {\n return <span className=\"indicator\">{FIcons.faLink}</span>;\n }\n return KlzIcon(`icon-${iconClass} indicator`, { width: '4vw' });\n};\n\nconst source = (type, props, id, classStr) => {\n return buildSourceFromElement(type, props, id, classStr);\n};\n\nconst GenericElDropTarget = (props) => {\n const { opt, onDrop, readOnly } = props;\n const { onNavi } = opt;\n const [{ isOver, isOverValidTarget }, drop] = useDrop({\n // accept: opt.dndItems,\n accept: searchTargets(opt.dndItems),\n canDrop: (item) => {\n return !readOnly;\n },\n drop: item => {\n const sourceProps = item.element;\n const sourceTag = source(opt.type.split('_')[1], sourceProps, opt.id, opt.classStr); // opt.type: drag_sample, drag_molecule, drag_element\n onDrop(sourceTag);\n },\n collect: monitor => {\n return {\n isOver: monitor.isOver(),\n isOverValidTarget: monitor.canDrop(),\n };\n },\n });\n\n const iconClass =\n opt.dndItems && opt.dndItems[0] === Constants.PERMIT_TARGET.MOLECULE ? Constants.PERMIT_TARGET.SAMPLE : opt.dndItems[0];\n const className = `target${isOver ? ' is-over' : ''}${\n isOverValidTarget ? ' can-drop' : ''\n }`;\n\n return (\n <div ref={drop} className={className}>\n {show(opt, iconClass, onNavi)}\n </div>\n );\n};\n\nGenericElDropTarget.propTypes = {\n opt: PropTypes.object.isRequired,\n onDrop: PropTypes.func.isRequired,\n readOnly: PropTypes.bool,\n};\n\nexport default GenericElDropTarget;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDrag, useDrop } from 'react-dnd';\nimport FIcons from '@components/icons/FIcons';\n\nconst GridDnD = ({ field, rowValue, handleMove, isEditable }) => {\n const [{ isDraggingSource }, drag] = useDrag({\n type: 'GRID',\n item: { fid: field, rId: rowValue.id, type: 'GRID' },\n canDrag: () => isEditable,\n collect: monitor => {\n return {\n isDraggingSource: monitor.isDragging(),\n };\n },\n });\n const [{ isOver, isOverValidTarget }, drop] = useDrop({\n accept: 'GRID',\n canDrop: () => isEditable,\n drop: item => {\n const tar = { fid: field, rId: rowValue.id };\n const src = item;\n if (tar.fid === src.fid && tar.rId !== src.rId) {\n handleMove(src.rId, tar.rId);\n }\n },\n collect: monitor => {\n return {\n isOver: monitor.isOver(),\n isOverValidTarget: monitor.canDrop(),\n };\n },\n });\n const className = `generic_grid_dnd${isOver ? ' is-over' : ''}${\n isOverValidTarget ? ' can-drop' : ''\n }${isDraggingSource ? ' is-dragging' : ''}`;\n return (\n <div ref={drop}>\n <div ref={drag} className={className}>\n <div className=\"dnd-btn\">\n <span className=\"text-primary\">{FIcons.faArrowsUpDownLeftRight}</span>\n </div>\n </div>\n </div>\n );\n};\n\nGridDnD.propTypes = {\n field: PropTypes.string.isRequired,\n rowValue: PropTypes.object.isRequired,\n handleMove: PropTypes.func.isRequired,\n};\n\nexport default GridDnD;\n","export const FN_ID = {\n FN_DRAG_EL_CHEMOTION: 'FN_DRAG_EL_CHEMOTION',\n FN_CONTRIBUTE_TEMPLATE: 'FN_CONTRIBUTE_TEMPLATE',\n FN_DIFF: 'FN_DIFF',\n FN_TABLE_EXPORT: 'FN_TABLE_EXPORT',\n FN_SIZE_GRID: 'FN_SIZE_GRID',\n};\n\nexport const FN = {\n [FN_ID.FN_DRAG_EL_CHEMOTION]: true,\n [FN_ID.FN_CONTRIBUTE_TEMPLATE]: true,\n [FN_ID.FN_DIFF]: false,\n [FN_ID.FN_TABLE_EXPORT]: true,\n [FN_ID.FN_SIZE_GRID]: true,\n};\n","import { FN } from '@ui/common/fnConstants';\n\nexport const permitFN = (fnID) => {\n return FN[fnID] ?? true;\n}\n","import React from 'react';\nimport { permitFN } from '@ui/common/fnCfg';\n\nexport function fnToggle(Component) {\n const fnId = Component.fnId;\n\n return (props) => {\n if (!fnId) {\n return <Component {...props} />;\n }\n\n if (permitFN(fnId) === false) {\n return null;\n }\n\n return <Component {...props} />;\n };\n}\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport GridDnD from '@components/dnd/GridDnD';\nimport FIcons from '@components/icons/FIcons';\nimport Constants from '@components/tools/Constants';\nimport LTooltip from '@components/shared/LTooltip';\nimport { fnToggle } from '@ui/common/fnToggle';\nimport { FN_ID } from '@ui/common/fnConstants';\n\nconst AddRowBtn = ({ addRow, isEditable = true }) => (\n <LTooltip idf=\"add_entry\">\n <Button\n onClick={() => addRow()}\n size=\"xsm\"\n variant=\"primary\"\n disabled={!isEditable}\n >\n {FIcons.faPlus}\n </Button>\n </LTooltip>\n);\n\nAddRowBtn.propTypes = { addRow: PropTypes.func.isRequired };\n\nconst DelRowBtn = ({ delRow, node, isEditable = true }) => {\n const { data } = node;\n return (\n <LTooltip idf=\"remove\">\n <Button\n variant=\"light\"\n onClick={() => delRow(data)}\n size=\"xsm\"\n disabled={!isEditable}\n >\n {FIcons.faMinus}\n </Button>\n </LTooltip>\n );\n};\n\nDelRowBtn.propTypes = {\n delRow: PropTypes.func.isRequired,\n node: PropTypes.object.isRequired,\n};\n\nconst NullRowBtn = () => (\n <div className=\"grid-btn-none\">{FIcons.faArrowsUpDownLeftRight}</div>\n);\n\nconst DnDRowBtn = ({ moveRow, field, type, isEditable, node }) => (\n <GridDnD\n field={field}\n type={type}\n rowValue={node.data}\n handleMove={moveRow}\n isEditable={isEditable}\n />\n);\n\nDnDRowBtn.propTypes = {\n moveRow: PropTypes.func.isRequired,\n field: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n node: PropTypes.object.isRequired,\n};\n\nconst DownloadGridBtn = ({ download, opt, loading = false }) => {\n const { isEditable } = opt;\n\n return (\n <LTooltip idf=\"export_tbl_xlsx\">\n <Button\n variant=\"success\"\n onClick={download}\n size=\"xsm\"\n disabled={!isEditable || loading}\n >\n {loading ? FIcons.faSpinner : FIcons.faDownload}\n </Button>\n </LTooltip>\n );\n};\n\nDownloadGridBtn.fnId = FN_ID.FN_TABLE_EXPORT;\n\nDownloadGridBtn.propTypes = {\n download: PropTypes.func.isRequired,\n opt: PropTypes.object.isRequired,\n loading: PropTypes.bool.isRequired,\n};\n\nconst DownloadGridBtnToggled = fnToggle(DownloadGridBtn);\n\nconst DLGridBtn = (props) => {\n const { opt } = props;\n const { id, genericType } = opt || {};\n\n // Show NullRowBtn if id is not a number (unsaved item) or feature is disabled\n // or it is not Element or Segment\n if (\n typeof id !== 'number' ||\n ![\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n ].includes(genericType)\n ) {\n return <NullRowBtn />;\n }\n\n // fnToggle returns null when feature is disabled, fallback to NullRowBtn\n return <DownloadGridBtnToggled {...props} /> || <NullRowBtn />;\n};\n\nDLGridBtn.propTypes = {\n download: PropTypes.func,\n opt: PropTypes.object.isRequired,\n loading: PropTypes.bool.isRequired,\n};\n\nexport { AddRowBtn, DelRowBtn, DnDRowBtn, NullRowBtn, DLGridBtn };\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport { Form, InputGroup } from 'react-bootstrap';\nimport { FieldTypes } from 'generic-ui-core';\n\nconst setCell = (columnDef, rowValue) => {\n const { type, field, onCellChange, cellRenderer, cellParams } = columnDef;\n switch (type) {\n case FieldTypes.F_TEXT:\n return (\n <Form.Control\n type=\"text\"\n value={rowValue[field] || ''}\n onChange={e => onCellChange({ e, columnDef, rowValue })}\n />\n );\n case FieldTypes.F_SYSTEM_DEFINED:\n return (\n <InputGroup>\n <Form.Control\n type=\"number\"\n value={rowValue[field].value || ''}\n onChange={(e) => onCellChange({ e, columnDef, rowValue })}\n />\n {cellRenderer({ ...cellParams, node: { data: rowValue } })}\n </InputGroup>\n );\n case FieldTypes.F_SELECT:\n case FieldTypes.F_DRAG_MOLECULE:\n case FieldTypes.F_DRAG_SAMPLE:\n case 'dnd':\n return cellRenderer({ ...cellParams, node: { data: rowValue } });\n default:\n return <span />;\n }\n};\n\nconst ColumnHeader = _columnDefs => {\n const columnDefs = _columnDefs;\n const ch = [];\n const h = (col, idx) => {\n const { width, headerName, headerComponent, headerParams } = col;\n const colCss = {};\n if (width) {\n Object.assign(colCss, { width, minWidth: width });\n }\n return (\n <div\n key={`column_header_${col.colId || col.field}_${idx}`}\n className=\"generic_grid_header\"\n style={colCss}\n >\n {headerComponent ? headerComponent(headerParams) : null}\n <div style={colCss}>{headerName}</div>\n </div>\n );\n };\n columnDefs.forEach((col, idx) => ch.push(h(col, idx)));\n return (\n <div className=\"generic_grid\" style={{ borderBottom: '1px solid #ccc' }}>\n <div>{ch}</div>\n </div>\n );\n};\n\nconst ColumnRow = (_columnDefs, _rowValue) => {\n const columnDefs = _columnDefs;\n const rowValue = _rowValue;\n const ch = [];\n const h = (col, val, idx) => {\n const { field, width, cellParams, cellRenderer, type } = col;\n const colCss = {};\n if (width) {\n Object.assign(colCss, { width, minWidth: width });\n }\n const rowKlz =\n type === FieldTypes.F_SELECT\n ? 'generic_grid_row generic_grid_row_left'\n : 'generic_grid_row';\n return (\n <div\n key={`column_row_${val.id}_${col.colId || col.field}_${idx}`}\n className={rowKlz}\n style={colCss}\n >\n {field\n ? setCell(col, val) || ''\n : cellRenderer({ ...cellParams, node: { data: val } }) || ''}\n </div>\n );\n };\n columnDefs.forEach((col, idx) => ch.push(h(col, rowValue, idx)));\n return (\n <div key={`column_row_${rowValue.id}`} className=\"generic_grid\">\n <div>{ch}</div>\n </div>\n );\n};\n\nconst NoRow = (rows) => {\n const values = rows;\n if (values && values.length > 0) return null;\n return (\n <div className=\"generic_grid\">\n <div>\n <div className=\"generic_grid_row\" style={{ width: '100%' }}>\n (No data)\n </div>\n </div>\n </div>\n );\n};\n\nexport { ColumnHeader, ColumnRow, NoRow };\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport { genUnit, FieldTypes } from 'generic-ui-core';\nimport { genUnitSup } from '@components/tools/utils';\n\nconst UConverterRenderer = props => {\n const { sField, onChange, node } = props;\n if (sField.type !== FieldTypes.F_SYSTEM_DEFINED) return null;\n const { data } = node;\n return (\n <Button\n key={`ucr_${data.id}`}\n onClick={() => onChange(sField, node)}\n variant=\"success\"\n size=\"sm\"\n >\n {genUnitSup(\n genUnit(sField.option_layers, data[sField.id].value_system).label\n ) || ''}\n </Button>\n );\n};\n\nUConverterRenderer.propTypes = {\n sField: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n node: PropTypes.object.isRequired,\n};\n\nexport default UConverterRenderer;\n","import Constants from '@components/tools/Constants';\n\nconst buildTableSource = (type, props, id, genericType) => {\n const { molecule, tag } = props;\n const taggable = tag?.taggable_data || {};\n\n let isAssoc = false;\n if (genericType !== 'Segment') {\n if (taggable?.element?.id === id) {\n isAssoc = false;\n } else {\n isAssoc = !!(\n taggable.reaction_id ||\n taggable.wellplate_id ||\n taggable.element\n );\n }\n }\n\n const cr_opt = genericType !== 'Segment' ? 1 : 0;\n\n switch (type) {\n case Constants.PERMIT_TARGET.MOLECULE: {\n return {\n el_id: molecule.id,\n el_type: Constants.PERMIT_TARGET.MOLECULE,\n el_label:\n molecule.cano_smiles ||\n props.molecule_formula ||\n props.molecule_name_label,\n el_inchikey: molecule.inchikey,\n el_smiles: molecule.cano_smiles,\n el_iupac: molecule.iupac_name,\n el_molecular_weight: molecule.molecular_weight,\n el_svg: `/images/molecules/${molecule.molecule_svg_file}`,\n };\n }\n case Constants.PERMIT_TARGET.SAMPLE: {\n return {\n el_id: props.id,\n is_new: true,\n cr_opt,\n isAssoc,\n el_type: Constants.PERMIT_TARGET.SAMPLE,\n el_label: props.short_label,\n el_short_label: props.short_label,\n el_name: props.name,\n el_external_label: props.external_label,\n el_molecular_weight: props.molecule_molecular_weight,\n el_smiles: props.molecule_cano_smiles,\n el_svg: props.sample_svg_file\n ? `/images/samples/${props.sample_svg_file}`\n : `/images/molecules/${molecule.molecule_svg_file}`,\n el_decoupled: props.decoupled || false,\n };\n }\n default: {\n return {\n el_id: props.id,\n is_new: true,\n cr_opt: 0,\n el_type: props.type,\n el_label: props.short_label,\n el_name: props.name || '',\n };\n }\n }\n};\n\nexport default buildTableSource;\n","/* eslint-disable no-unused-vars */\n/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDrop } from 'react-dnd';\nimport { OverlayTrigger, Popover, Button } from 'react-bootstrap';\nimport { FieldTypes } from 'generic-ui-core';\nimport Constants from '@components/tools/Constants';\nimport { KlzIcon, searchTargets } from '@components/tools/utils';\nimport buildTableSource from '@utils/table/build-table-source';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\n\nconst base = (opt, iconClass, onDrop = () => {}, params = {}) => {\n if (opt.value && opt.value.el_id) {\n const label = opt.value.el_label;\n let elSvg = opt.value.el_svg;\n if (opt.value.el_type === 'sample') {\n if (elSvg && !elSvg.endsWith('.svg') && opt.value.el_decoupled) {\n elSvg = Constants.IMG_NOT_AVAILABLE_SVG;\n }\n }\n if (elSvg && !elSvg.endsWith('.svg'))\n elSvg = Constants.IMG_NOT_AVAILABLE_SVG;\n const pop = (\n <Popover\n id=\"popover-svg\"\n title={label}\n style={{ maxWidth: 'none', maxHeight: 'none' }}\n >\n <img src={elSvg} style={{ height: '26vh', width: '26vh' }} alt=\"\" />\n </Popover>\n );\n const asShown = (path) =>\n path === Constants.IMG_NOT_AVAILABLE_SVG ? (\n KlzIcon(`icon-${iconClass}`, { width: '4vw', fontSize: 'x-large' })\n ) : (\n <OverlayTrigger\n delayShow={1000}\n trigger={['hover', 'focus']}\n placement=\"top\"\n rootClose\n onHide={null}\n overlay={pop}\n >\n <img className=\"generic_grid_img\" src={path} alt=\"\" />\n </OverlayTrigger>\n );\n const simg = (path, txt) =>\n path && path !== '' ? (\n <div className=\"s-img\">\n {asShown(path)}\n <div className=\"del_btn\">\n <LTooltip idf=\"remove_molecule\">\n <Button\n variant=\"danger\"\n size=\"xsm\"\n className=\"btn_del\"\n onClick={() => onDrop({}, params)}\n >\n {FIcons.faTrashCan}\n </Button>\n </LTooltip>\n </div>\n </div>\n ) : (\n <div className=\"data\" style={{ width: '4vw' }}>\n {txt}\n </div>\n );\n return simg(elSvg, label);\n }\n return KlzIcon(`icon-${iconClass} indicator`, {\n width: '4vw',\n fontSize: 'x-large',\n });\n};\n\nconst show = (opt, iconClass, onDrop) => {\n if (opt.type === FieldTypes.F_TABLE) {\n const sField = opt.sField || {};\n const subVal = opt.data[sField.id];\n const { data } = opt;\n return base(subVal, iconClass, onDrop, { sField, data });\n }\n return base(opt, iconClass);\n};\n\nconst GenericElTableDropTarget = (props) => {\n const { opt, onDrop, genericType } = props;\n const [{ isOver, isOverValidTarget }, drop] = useDrop({\n accept: searchTargets(opt.dndItems),\n drop: (targetProps, monitor) => {\n const sourceProps = monitor.getItem().element;\n const type = opt.sField.type.split('_')[1];\n const { id } = opt;\n const sourceTag = buildTableSource(type, sourceProps, id, genericType);\n onDrop(sourceTag, opt);\n },\n collect: (monitor) => {\n return {\n isOver: monitor.isOver(),\n isOverValidTarget: monitor.canDrop(),\n };\n },\n });\n const className = `target${isOver ? ' is-over' : ''}${\n isOverValidTarget ? ' can-drop' : ''\n }`;\n return (\n <div\n className={className}\n ref={drop}\n style={{ display: 'inline-flex', justifyContent: 'center' }}\n >\n {show(opt, 'sample', onDrop)}\n </div>\n );\n};\n\nGenericElTableDropTarget.propTypes = {\n opt: PropTypes.object.isRequired,\n onDrop: PropTypes.func,\n};\n\nGenericElTableDropTarget.defaultProps = { onDrop: () => {} };\n\nexport default GenericElTableDropTarget;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { FieldTypes } from 'generic-ui-core';\nimport GenericElTableDropTarget from '@components/table/GenericElTableDropTarget';\n\nconst DropRenderer = (props) => {\n const { opt, sField, onChange, node, genericType } = props;\n if (![FieldTypes.F_DRAG_MOLECULE, FieldTypes.F_DRAG_SAMPLE].includes(sField.type)) return null;\n const { data } = node;\n opt.dndItems = [sField.type.split('_')[1]];\n opt.sField = sField;\n opt.data = data;\n const oopt = cloneDeep(opt);\n return (\n <div className=\"drop_generic_properties drop_generic_table_wrap\">\n <GenericElTableDropTarget opt={oopt} onDrop={onChange} genericType={genericType} />\n </div>\n );\n};\n\nDropRenderer.propTypes = {\n sField: PropTypes.object.isRequired,\n opt: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n node: PropTypes.object.isRequired,\n};\n\nexport default DropRenderer;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport copy from 'copy-to-clipboard';\nimport LTooltip from '@components/shared/LTooltip';\n\nconst DropTextRenderer = (props) => {\n const { attr, sField, node } = props;\n let displayValue =\n ((node.data[sField.id] || {}).value || {})[`el_${attr.value}`] || '';\n displayValue =\n attr.value === 'molecular_weight' && displayValue !== ''\n ? displayValue.toFixed(6)\n : displayValue;\n\n const handleCopy = () => {\n copy(displayValue);\n };\n\n return (\n <LTooltip idf=\"clipboard\">\n <div\n role=\"button\"\n tabIndex={0}\n className=\"clipboardBtn\"\n onClick={handleCopy}\n onKeyDown={(e) => e.key === 'Enter' && handleCopy()}\n style={{ wordBreak: 'break-all', cursor: 'copy' }}\n >\n {displayValue}\n </div>\n </LTooltip>\n );\n};\nDropTextRenderer.propTypes = {\n attr: PropTypes.object.isRequired,\n sField: PropTypes.object.isRequired,\n node: PropTypes.object.isRequired,\n};\n\nexport default DropTextRenderer;\n","/* eslint-disable jsx-a11y/anchor-is-valid */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable jsx-a11y/interactive-supports-focus */\n/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nconst DropLinkRenderer = (props) => {\n const { sField, node, onNavi } = props;\n const dId = ((node.data[sField.id] || {}).value || {}).el_id || '';\n const dVal = ((node.data[sField.id] || {}).value || {}).el_short_label || ' ';\n if (dId === '') return <div />;\n return (\n <a role=\"link\" onClick={() => onNavi('sample', dId)} className=\"lu-link\">\n <span className=\"reaction-material-link\">{dVal}</span>\n </a>\n );\n};\n\nDropLinkRenderer.propTypes = {\n sField: PropTypes.object.isRequired,\n node: PropTypes.object.isRequired,\n onNavi: PropTypes.func,\n};\n\nDropLinkRenderer.defaultProps = { onNavi: () => {} };\nexport default DropLinkRenderer;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { v4 as uuid } from 'uuid';\nimport { Form } from 'react-bootstrap';\nimport LTooltip from '@components/shared/LTooltip';\n\nconst SamOption = (props) => {\n const { sField, node, onChange, genericType } = props;\n const { data } = node;\n const fValue = (data[sField.id] && data[sField.id].value) || {};\n if (!fValue.is_new) return <div />;\n const rUUID = uuid();\n\n if (genericType === 'Segment') {\n return (\n <div className=\"generic_sam_options\">\n <LTooltip idf=\"associate_direct\" placement=\"right\">\n <Form.Check\n type=\"radio\"\n name={`dropS_${rUUID}`}\n disabled={fValue.isAssoc} // the isAssoc is false because no need to associate\n checked={fValue.cr_opt === 0}\n onChange={() => onChange({ node, subField: sField, crOpt: 0 })}\n label=\"Current\"\n />\n </LTooltip>\n </div>\n )\n }\n\n return (\n <div className=\"generic_sam_options\">\n <LTooltip idf=\"associate_direct\" placement=\"right\">\n <Form.Check\n type=\"radio\"\n name={`dropS_${rUUID}`}\n disabled={fValue.isAssoc}\n checked={fValue.cr_opt === 0}\n onChange={() => onChange({ node, subField: sField, crOpt: 0 })}\n label=\"Current\"\n />\n </LTooltip>\n <LTooltip idf=\"associate_split\" placement=\"right\">\n <Form.Check\n type=\"radio\"\n name={`dropS_${rUUID}`}\n checked={fValue.cr_opt === 1}\n onChange={() => onChange({ node, subField: sField, crOpt: 1 })}\n label=\"Split\"\n />\n </LTooltip>\n <LTooltip idf=\"associate_duplicate\" placement=\"right\">\n <Form.Check\n type=\"radio\"\n name={`dropS_${rUUID}`}\n checked={fValue.cr_opt === 2}\n onChange={() => onChange({ node, subField: sField, crOpt: 2 })}\n label=\"Copy\"\n />\n </LTooltip>\n </div>\n );\n};\n\nSamOption.propTypes = {\n sField: PropTypes.object.isRequired,\n node: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default SamOption;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Select from 'react-select';\nimport { FieldTypes } from 'generic-ui-core';\nimport { frmSelSty } from '@components/tools/utils';\n\nconst SelectRenderer = (props) => {\n const { sField, onChange, sOptions, node } = props;\n if (sField.type !== FieldTypes.F_SELECT || sOptions.length < 1) return null;\n const { data } = node;\n const val = sOptions.find((o) => o.value === data[sField.id].value) || null;\n return (\n <Select\n styles={frmSelSty}\n isClearable\n menuContainerStyle={{ position: 'absolute' }}\n multi={false}\n options={sOptions}\n value={val}\n onChange={(e) => onChange(e, sField, node)}\n menuPlacement=\"auto\"\n menuPortalTarget={document.body}\n // className=\"status-select\"\n />\n );\n};\n\nSelectRenderer.propTypes = {\n sField: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n node: PropTypes.object.isRequired,\n sOptions: PropTypes.arrayOf(PropTypes.object).isRequired,\n};\n\nexport default SelectRenderer;\n","/**\n * Utility functions for file handling\n */\n\n/**\n * Utility function to download a blob as a file\n * @param {Blob} blob - The blob to download\n * @param {string} filename - The name to give the downloaded file\n */\nexport const downloadBlobAsFile = (blob, filename) => {\n const url = window.URL.createObjectURL(blob);\n\n const link = document.createElement('a');\n link.href = url;\n link.setAttribute('download', filename);\n\n document.body.appendChild(link);\n\n link.click();\n\n window.URL.revokeObjectURL(url);\n document.body.removeChild(link);\n};\n\n/**\n * Extracts filename from response headers (Content-Disposition)\n * @param {Response} response - The fetch Response object\n * @param {string} defaultFileName - Default filename to use if none is found in the headers\n * @returns {string} The extracted filename or default name\n */\nexport const getFileName = (response, defaultFileName = 'download') => {\n try {\n const disposition = response.headers.get('Content-Disposition');\n\n if (disposition && disposition.indexOf('attachment') !== -1) {\n const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/;\n const matches = filenameRegex.exec(disposition);\n\n if (matches != null && matches[1]) {\n return matches[1].replace(/['\"]/g, '');\n }\n\n const filenameUTF8Regex = /filename\\*=UTF-8''([^;]*)/i;\n const utf8Matches = filenameUTF8Regex.exec(disposition);\n\n if (utf8Matches && utf8Matches[1]) {\n return decodeURIComponent(utf8Matches[1]);\n }\n }\n\n const url = response.url;\n if (url) {\n const urlParts = url.split('/');\n const potentialFilename = urlParts[urlParts.length - 1];\n\n if (\n potentialFilename &&\n potentialFilename.includes('.') &&\n !potentialFilename.includes('?') &&\n potentialFilename.length < 100\n ) {\n return potentialFilename.split('?')[0]; // Remove any query params\n }\n }\n\n return defaultFileName;\n } catch (error) {\n console.error('Error extracting filename from response:', error);\n return defaultFileName;\n }\n};\n\n/**\n * Downloads a file from a fetch response\n * @param {Response} response - The fetch response\n * @param {string} defaultFileName - Default name to use if filename can't be determined\n */\nexport const downloadResponseAsFile = async (\n response,\n defaultFileName = 'download',\n) => {\n try {\n const blob = await response.clone().blob();\n const filename = getFileName(response, defaultFileName);\n downloadBlobAsFile(blob, filename);\n } catch (error) {\n console.error('Error downloading file from response:', error);\n throw error;\n }\n};\n","import Api from '@utils/api';\nimport Response from '@utils/response';\nimport { mc2res } from '@components/tools/format-utils';\n\nclass ApiExecutor {\n static exec = async (endpoint, method = 'GET', data = null, params = {}) => {\n const fullEndpoint = endpoint;\n const res = data\n ? await Api.execApiDataDepr(data, fullEndpoint, method)\n : await Api.execApiDepr(fullEndpoint, method, params);\n\n // this is a temporary solution to return the raw response\n // until the backend is refactored to use mc2res\n if (res.error) {\n return new Response(mc2res('se00', res.error || ''), { data: res });\n }\n return new Response(mc2res('ss00', res.msg || ''), { data: res });\n };\n\n // Execute an API call and return the raw fetch response without JSON parsing\n static execRaw = async (endpoint, method = 'GET', data = null, params = {}) => {\n const fullEndpoint = endpoint;\n const res = data\n ? await Api.execApiDataRaw(data, fullEndpoint)\n : await Api.execApiRaw(fullEndpoint, method, params);\n\n return res;\n };\n}\n\nexport default ApiExecutor;\n","import ApiExecutor from '@utils/apiExecutor';\n\nclass ImpExpManager {\n // a private static method\n static #execRaw = ApiExecutor.execRaw;\n\n static exportTable = (id, params) =>\n ImpExpManager.#execRaw(`exporter/table_xlsx/${id}`, 'GET', null, params);\n}\n\nexport default ImpExpManager;\n","/* eslint-disable no-restricted-globals */\n/* eslint-disable no-empty */\n/* eslint-disable react/forbid-prop-types */\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport Numeral from 'numeral';\nimport { genUnits, unitConversion, FieldTypes } from 'generic-ui-core';\nimport Constants from '@components/tools/Constants';\nimport GenericSubField from '@components/models/GenericSubField';\nimport { AddRowBtn, DelRowBtn, DnDRowBtn, DLGridBtn } from '@components/table/GridBtn';\nimport { ColumnHeader, ColumnRow, NoRow } from '@components/table/GridEntry';\nimport UConverterRenderer from '@components/table/UConverterRenderer';\nimport { molOptions, samOptions } from '@components/tools/utils';\nimport DropRenderer from '@components/table/DropRenderer';\nimport DropTextRenderer from '@components/table/DropTextRenderer';\nimport DropLinkRenderer from '@components/table/DropLinkRenderer';\nimport SampOption from '@components/table/SamOption';\nimport SelectRenderer from '@components/table/SelectRenderer';\nimport { downloadResponseAsFile } from '@utils/fileUtils';\nimport ImpExpManager from '@/utils/impExpMgr';\n\nexport default class TableRecord extends React.Component {\n constructor(props) {\n super(props);\n this.state = { dlLoading: false };\n this.delRow = this.delRow.bind(this);\n this.download = this.download.bind(this);\n this.addRow = this.addRow.bind(this);\n this.moveRow = this.moveRow.bind(this);\n this.onCellChange = this.onCellChange.bind(this);\n this.onSelectClick = this.onSelectClick.bind(this);\n this.onUnitClick = this.onUnitClick.bind(this);\n this.onDrop = this.onDrop.bind(this);\n this.onChk = this.onChk.bind(this);\n this.getColumns = this.getColumns.bind(this);\n }\n\n onCellChange(params) {\n const { e, columnDef, rowValue } = params;\n const newValue = e.target.value;\n const oldValue = rowValue[columnDef.field].value;\n if (oldValue === newValue) return;\n if (columnDef.type === FieldTypes.F_TEXT) {\n rowValue[columnDef.field] = newValue;\n }\n if (columnDef.type === FieldTypes.F_SYSTEM_DEFINED) {\n if (isNaN(newValue)) return;\n rowValue[columnDef.field].value = Numeral(newValue).value();\n }\n const { opt } = this.props;\n const subVals = opt.f_obj.sub_values || [];\n const idx = subVals.findIndex(s => s.id === rowValue.id);\n subVals.splice(idx, 1, rowValue);\n opt.f_obj.sub_values = subVals;\n opt.onSubChange(0, 0, opt.f_obj, true);\n }\n\n onSelectClick(e, subField, node) {\n const { data } = node;\n const { opt } = this.props;\n const subVals = opt.f_obj.sub_values || [];\n const subVal = subVals.find(s => s.id === data.id);\n subVal[subField.id] = { value: e ? e.value : '' };\n const idx = subVals.findIndex(s => s.id === data.id);\n subVals.splice(idx, 1, subVal);\n opt.f_obj.sub_values = subVals;\n opt.onSubChange(subField, subField.id, opt.f_obj, true);\n }\n\n onUnitClick(subField, node) {\n const { data } = node;\n const { opt } = this.props;\n const subVals = opt.f_obj.sub_values || [];\n const subVal = subVals.find(s => s.id === data.id);\n const units = genUnits(subField.option_layers);\n let uIdx = units.findIndex(u => u.key === subVal[subField.id].value_system);\n if (uIdx < units.length - 1) uIdx += 1;\n else uIdx = 0;\n const vs = units.length > 0 ? units[uIdx].key : '';\n const v = unitConversion(\n subField.option_layers,\n vs,\n subVal[subField.id].value\n );\n subVal[subField.id] = { value: v, value_system: vs };\n const idx = subVals.findIndex(s => s.id === data.id);\n subVals.splice(idx, 1, subVal);\n opt.f_obj.sub_values = subVals;\n opt.onSubChange(subField, subField.id, opt.f_obj, true);\n }\n\n onDrop(targetProps, targetOpt) {\n const { opt } = this.props;\n const subField = targetOpt.sField;\n const subVals = opt.f_obj.sub_values || [];\n const subVal = subVals.find(s => s.id === targetOpt.data.id);\n subVal[subField.id] = { value: targetProps };\n const idx = subVals.findIndex(s => s.id === targetOpt.data.id);\n subVals.splice(idx, 1, subVal);\n opt.f_obj.sub_values = subVals;\n opt.onSubChange(subField, subField.id, opt.f_obj, true);\n }\n\n onChk(params) {\n const { node, subField, crOpt } = params;\n const { opt } = this.props;\n const subVals = opt.f_obj.sub_values || [];\n const subVal = subVals.find(s => s.id === node.data.id);\n node.data[subField.id].value.cr_opt = crOpt;\n subVal[subField.id] = { value: node.data[subField.id].value };\n const idx = subVals.findIndex(s => s.id === node.data.id);\n subVals.splice(idx, 1, subVal);\n opt.f_obj.sub_values = subVals;\n opt.onSubChange(subField, subField.id, opt.f_obj, true);\n }\n\n getColumns() {\n const { opt } = this.props;\n\n const { selectOptions, onNavi, isEditable } = opt;\n const sValues = opt.f_obj.sub_values || [];\n let columnDefs = [];\n (opt.f_obj.sub_fields || []).forEach(sF => {\n let colDef = {\n type: sF.type,\n headerName: sF.col_name,\n field: sF.id,\n };\n const colDefExt = [];\n if (sF.type === FieldTypes.F_TEXT) {\n colDef = { ...colDef, editable: true, onCellChange: this.onCellChange };\n }\n if (sF.type === FieldTypes.F_SELECT) {\n let sOptions =\n (selectOptions[sF.option_layers] &&\n selectOptions[sF.option_layers].options) ||\n [];\n sOptions = sOptions.map(op => {\n return {\n value: op.key,\n name: op.key,\n label: op.label,\n };\n });\n const cellParams = {\n sField: sF,\n onChange: this.onSelectClick,\n sOptions,\n };\n colDef = {\n ...colDef,\n cellRenderer: SelectRenderer,\n cellParams,\n onCellChange: this.onCellChange,\n };\n }\n if (sF.type === FieldTypes.F_SYSTEM_DEFINED) {\n const cellParams = { sField: sF, onChange: this.onUnitClick };\n colDef = {\n ...colDef,\n cellRenderer: UConverterRenderer,\n cellParams,\n onCellChange: this.onCellChange,\n };\n }\n if (sF.type === FieldTypes.F_DRAG_MOLECULE) {\n const cellParams = { sField: sF, opt, onChange: this.onDrop, genericType: opt.genericType };\n colDef = {\n ...colDef,\n cellRenderer: DropRenderer,\n cellParams,\n onCellChange: this.onCellChange,\n width: '5vw',\n };\n const conf = (sF.value || '').split(';') || []; // value could be molOptions with ;, e.g. \"inchikey;smiles;\"\n conf.forEach(c => {\n const attr = molOptions.find(m => m.value === c);\n if (attr) {\n const ext = {\n colId: c,\n editable: false,\n type: FieldTypes.F_TEXT,\n headerName: attr.label,\n cellRenderer: DropTextRenderer,\n cellParams: { attr, sField: sF },\n };\n colDefExt.push(ext);\n }\n });\n }\n if (sF.type === FieldTypes.F_DRAG_SAMPLE) {\n const sOpt = sValues.filter(\n o => o[sF.id] && o[sF.id].value && o[sF.id].value.is_new\n );\n const cellParams = { sField: sF, opt, onChange: this.onDrop, genericType: opt.genericType };\n colDef = {\n ...colDef,\n cellRenderer: DropRenderer,\n cellParams,\n onCellChange: this.onCellChange,\n width: '5vw',\n };\n const addOption = {\n colId: 'sam_option',\n editable: false,\n type: FieldTypes.F_TEXT,\n headerName: '',\n cellRenderer: SampOption,\n cellParams: { sField: sF, onChange: this.onChk, genericType: opt.genericType },\n width: '3vw',\n };\n // Add the option column if the generic type is not 'Segment'\n if (sOpt.length > 0 && opt.genericType !== 'Segment') colDefExt.push(addOption);\n const addLink = {\n colId: 'sam_link',\n editable: false,\n type: FieldTypes.F_TEXT,\n headerName: 'Short label',\n cellRenderer: DropLinkRenderer,\n cellParams: { sField: sF, onNavi },\n width: '10vw',\n };\n colDefExt.push(addLink);\n const conf = (sF.value || '').split(';') || [];\n conf.forEach(c => {\n const attr = samOptions.find(m => m.value === c);\n if (attr) {\n const ext = {\n colId: c,\n editable: false,\n type: FieldTypes.F_TEXT,\n headerName: attr.label,\n cellRenderer: DropTextRenderer,\n cellParams: { attr, sField: sF },\n };\n colDefExt.push(ext);\n }\n });\n }\n columnDefs.push(colDef);\n if (colDefExt.length > 0) columnDefs = columnDefs.concat(colDefExt);\n });\n const act = {\n type: 'button',\n headerName: '',\n colId: opt.f_obj.field,\n headerComponent: AddRowBtn,\n headerParams: { addRow: this.addRow, isEditable: isEditable },\n cellRenderer: DelRowBtn,\n cellParams: { delRow: this.delRow, isEditable: isEditable },\n width: 'unset',\n };\n columnDefs.splice(0, 0, act);\n const dtype = `${Constants.PERMIT_TARGET.GENERIC_GRID}_${opt.layer.key}_${opt.f_obj.field}`;\n const move = {\n type: 'dnd',\n field: opt.f_obj.field,\n headerName: '',\n colId: `${opt.f_obj.field}_dnd`,\n headerComponent: DLGridBtn,\n headerParams: { download: this.download, opt: opt, loading: this.state.dlLoading },\n cellRenderer: DnDRowBtn,\n cellParams: {\n moveRow: this.moveRow,\n field: opt.f_obj.field,\n type: dtype,\n isEditable,\n },\n width: 'unset',\n };\n columnDefs.splice(0, 0, move);\n return columnDefs;\n }\n\n moveRow(source, target) {\n const { opt } = this.props;\n const alles = opt.f_obj.sub_values;\n const sid = alles.findIndex(e => e.id === source);\n const tid = alles.findIndex(e => e.id === target);\n const temp = alles[sid];\n alles[sid] = alles[tid];\n alles[tid] = temp;\n opt.onSubChange(0, 0, opt.f_obj, true);\n }\n\n delRow(rowData) {\n const { opt } = this.props;\n opt.f_obj.sub_values = opt.f_obj.sub_values.filter(\n s => s.id !== rowData.id\n );\n opt.onSubChange(0, 0, opt.f_obj, true);\n }\n\n addRow() {\n const { opt } = this.props;\n const subFields = opt.f_obj.sub_fields || [];\n const newSub = new GenericSubField();\n subFields.map(e => {\n if (e.type === FieldTypes.F_TEXT) return Object.assign(newSub, { [e.id]: '' });\n return Object.assign(newSub, {\n [e.id]: { value: '', value_system: e.value_system },\n });\n });\n opt.f_obj.sub_values = opt.f_obj.sub_values || [];\n opt.f_obj.sub_values.push(newSub);\n opt.onSubChange(0, 0, opt.f_obj, true);\n }\n\n async download() {\n try {\n this.setState({ dlLoading: true });\n\n const { opt } = this.props;\n const response = await ImpExpManager.exportTable(opt.id, {\n klass: opt.genericType,\n layer_id: opt.layer.key,\n field_id: opt.field,\n });\n\n await downloadResponseAsFile(response);\n } catch (error) {\n console.error('Error exporting file:', error);\n } finally {\n this.setState({ dlLoading: false });\n }\n }\n\n render() {\n const { opt } = this.props;\n if (opt.isSearch) return <div>(This is a table)</div>;\n if ((opt.f_obj.sub_fields || []).length < 1) return null;\n const columnDefs = this.getColumns();\n return (\n <div>\n {ColumnHeader(columnDefs)}\n <div>{NoRow(opt.f_obj.sub_values)}</div>\n <div>\n {(opt.f_obj.sub_values || []).map(s => ColumnRow(columnDefs, s))}\n </div>\n </div>\n );\n }\n}\n\nTableRecord.propTypes = {\n opt: PropTypes.object.isRequired,\n};\n","/* eslint-disable jsx-a11y/anchor-is-valid */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable react/forbid-prop-types */\nimport React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Form, InputGroup } from 'react-bootstrap';\nimport { downloadFile } from 'generic-ui-core';\nimport FIcons from '@components/icons/FIcons';\n\nconst FieldUploadItem = ({ opt, attachment }) => {\n const [secondImgSrc, setSecondImgSrc] = useState('');\n const [imgWidth, setImgWidth] = useState('50%');\n\n useEffect(() => {\n const urlParams = new URLSearchParams({\n identifier: attachment.uid,\n annotated: false,\n });\n\n fetch(`/api/v1/attachments/image/-1?${urlParams}`, {\n credentials: 'same-origin',\n method: 'GET',\n })\n .then(response => response.blob())\n .then(blob => {\n if (blob?.type.startsWith('image')) {\n setSecondImgSrc(URL.createObjectURL(blob));\n }\n })\n .catch(errorMessage => {\n console.log(errorMessage);\n });\n }, [attachment.uid]);\n\n const handleInputChange = e => {\n let newWidth = parseFloat(e.target.value);\n if (Number.isNaN(newWidth)) {\n newWidth = 50; // default value\n } else if (newWidth < 0) {\n newWidth = 0;\n } else if (newWidth > 100) {\n newWidth = 100;\n }\n setImgWidth(`${newWidth}%`);\n };\n\n const delBtn = (\n <Button\n size=\"sm\"\n id={attachment.uid}\n className=\"button-right\"\n onClick={() =>\n opt.onChange({ ...opt.value, action: 'd', uid: attachment.uid })\n }\n >\n {FIcons.faTimes}\n </Button>\n );\n\n const filename = attachment.aid ? (\n <>\n <a\n onClick={() =>\n downloadFile({\n contents: `/api/v1/attachments/${attachment.aid}`,\n name: attachment.filename,\n })\n }\n style={{ cursor: 'pointer' }}\n title={attachment.filename}\n >\n {attachment.filename}\n </a>\n </>\n ) : (\n attachment.filename\n );\n\n return (\n <div className=\"generic_grid\">\n <div>\n <div>{delBtn}</div>\n <div className=\"generic_grid_row file_text\">{filename}</div>\n <div className=\"generic_grid_row\">\n <Form.Group size=\"sm\">\n <Form.Control\n type=\"text\"\n value={attachment.label || ''}\n onChange={e =>\n opt.onChange({\n ...opt.value,\n action: 'l',\n uid: attachment.uid,\n val: e,\n })\n }\n />\n </Form.Group>\n </div>\n </div>\n <div style={{ flexDirection: 'column', alignItems: 'center' }}>\n {secondImgSrc && (\n <>\n <div style={{ alignSelf: 'flex-end', display: 'inline-flex' }}>\n <InputGroup size=\"sm\" className=\"gu-xsmall-input-group\">\n <Form.Control\n type=\"number\"\n step=\"any\"\n value={parseFloat(imgWidth)}\n onChange={handleInputChange}\n />\n <InputGroup.Text>%</InputGroup.Text>\n </InputGroup>\n <Button\n size=\"sm\"\n onClick={() => window.open(secondImgSrc, '_blank')}\n >\n Original\n </Button>\n </div>\n <img\n src={secondImgSrc}\n alt={attachment.filename}\n style={{ width: imgWidth, height: 'auto', maxWidth: '100%' }}\n />\n </>\n )}\n </div>\n </div>\n );\n};\n\nFieldUploadItem.propTypes = {\n attachment: PropTypes.shape({\n aid: PropTypes.number,\n filename: PropTypes.string,\n label: PropTypes.string,\n uid: PropTypes.string,\n }),\n opt: PropTypes.shape({\n onChange: PropTypes.func,\n value: PropTypes.object,\n }),\n};\n\nFieldUploadItem.defaultProps = { attachment: {}, opt: {} };\n\nexport default FieldUploadItem;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDrop } from 'react-dnd';\nimport { FieldTypes } from 'generic-ui-core';\n\n// Use for reaction drop panel\nconst DroppablePanel = ({\n children,\n type,\n field: fid,\n rowValue: rid,\n fnCb,\n}) => {\n const [{ isOver, isOverValidTarget }, drop] = useDrop({\n accept: type,\n canDrop: (item) => {\n // only allow drop reaction to sys-reaction field\n const isAccepted = (\n item.element.type === 'reaction' &&\n rid.key === FieldTypes.F_SYS_REACTION\n );\n return isAccepted;\n // return item.fid.field !== fid.field && item.rid.key === rid.key;\n },\n drop: (item) => fnCb({ source: item, target: fid, rid }),\n collect: (monitor) => ({\n isOver: !!monitor.isOver(),\n isOverValidTarget: !!monitor.canDrop(),\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n }),\n });\n\n const dropClass = [\n // 'panel-heading',\n // 'template_panel_heading_reset',\n // 'd-flex justify-content-between align-items-center',\n isOver && 'gu_is-over',\n isOverValidTarget && 'gu_can-drop',\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div ref={drop} className={dropClass}>\n {children}\n </div>\n );\n};\n\nDroppablePanel.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node),\n PropTypes.node,\n ]).isRequired,\n type: PropTypes.array.isRequired,\n fnCb: PropTypes.func.isRequired,\n field: PropTypes.object.isRequired,\n rowValue: PropTypes.object.isRequired,\n};\n\nexport default DroppablePanel;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport SvgFileZoomPan from 'react-svg-file-zoom-pan';\nimport DroppablePanel from '@components/dnd/DroppablePanel';\nimport Constants from '@components/tools/Constants';\nimport FIcons from '@components/icons/FIcons';\n\nconst DropReaction = props => {\n const { field: fObj, onNavi, onChange, isEditable } = props;\n const { value = {} } = fObj;\n const {\n el_id: elId,\n el_label: elLabel,\n el_svg: elSvg,\n el_tip: elTip,\n el_type: elType,\n } = value;\n\n const svgPath = elSvg\n ? `/images/reactions/${elSvg}`\n : Constants.IMG_NOT_AVAILABLE_SVG;\n\n const reactionView = svgPath.endsWith('.svg') ? (\n <div style={{ width: '100%', height: 'auto' }}>\n <SvgFileZoomPan svgPath={svgPath} duration={300} resize />\n </div>\n ) : (\n <img src={svgPath} style={{ height: '26vh' }} alt=\"\" />\n );\n\n const reactionError = (\n <>\n <span style={{ color: 'red' }}>{FIcons.faBan}</span>\n &nbsp; Reaction is not accessible.\n </>\n );\n\n const onDrop = item => {\n const { source, target } = item;\n const { element } = source;\n target.value = {\n el_id: element.id,\n el_label: element.short_label,\n el_svg: element.reaction_svg_file,\n el_type: element.type,\n };\n onChange({ target });\n };\n\n const showDrop = (\n <div\n className=\"lu-drop-zone\"\n style={{ alignContent: 'center', height: 68 }}\n >\n Drop Reaction {FIcons.faFlask} Here\n </div>\n );\n\n const showReaction = () => {\n if (!isEditable && !elId) {\n return null;\n }\n if (!elId) {\n return showDrop;\n }\n const reactionLink = (\n <Button\n variant=\"link\"\n style={{\n border: '1px solid #003366',\n borderRadius: '4px',\n padding: '0px 5px',\n }}\n onClick={() => onNavi(elType, elId)}\n >\n {elLabel}\n </Button>\n );\n\n const reactionImage = elTip === 'ERROR' ? reactionError : reactionView;\n\n return (\n <div\n style={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n }}\n >\n <div style={{ position: 'absolute', top: 0, left: 0 }}>\n {reactionLink}\n </div>\n {reactionImage}\n </div>\n );\n };\n\n return isEditable ? (\n <DroppablePanel\n type={[\"reaction\"]} // rename the drop target as 'reaction' to differentiate the 'element' drop zones\n field={fObj}\n rowValue={{ key: fObj.type }}\n fnCb={onDrop}\n >\n {showReaction()}\n </DroppablePanel>\n ) : showReaction()\n};\n\nDropReaction.propTypes = {\n field: PropTypes.object.isRequired,\n onNavi: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default DropReaction;\n","import React, { useState } from 'react';\nimport { Button, Form } from 'react-bootstrap';\nimport DatePicker from 'react-datepicker';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\n\nconst DatePickerComponent = ({ handleChange, val, readOnly }) => {\n const selectedValue = val ? new Date(val) : null;\n\n return (\n <Form.Group onClick={(e) => e.stopPropagation()}>\n <div className=\"gu-datepicker\">\n <DatePicker\n isClearable={!readOnly}\n clearButtonClassName=\"gu_date_picker-clear\"\n showTimeSelect\n timeFormat=\"HH:mm\"\n timeIntervals={15}\n timeCaption=\"Time\"\n dateFormat=\"dd/MM/yyyy HH:mm\"\n selected={selectedValue}\n onSelect={handleChange}\n onChange={handleChange}\n placeholderText=\"DD/MM/YYYY hh:mm\"\n readOnly={readOnly}\n className={readOnly ? 'gu-readonly' : ''}\n />\n </div>\n </Form.Group>\n );\n};\n\nconst ButtonDatePicker = ({ onChange, val, readOnly }) => {\n const [showDatePicker, setShowDatePicker] = useState(false);\n\n const handleDateChange = (date) => {\n onChange(date);\n setShowDatePicker(false);\n };\n\n if (val || showDatePicker) {\n return (\n <DatePickerComponent\n handleChange={handleDateChange}\n val={val}\n readOnly={readOnly}\n />\n );\n }\n return (\n <LTooltip idf=\"record_time\">\n <Button\n variant=\"light\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n setShowDatePicker(!showDatePicker);\n }}\n disabled={readOnly}\n >\n {FIcons.faClock}\n </Button>\n </LTooltip>\n );\n};\n\nexport default ButtonDatePicker;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form } from 'react-bootstrap';\nimport FIcons from '@components/icons/FIcons';\nimport FieldHeader from '@components/fields/FieldHeader';\nimport { parseTextWithLinks } from '@utils/pureUtils';\n\nconst TextLabel = ({ opt, value }) => {\n const parts = parseTextWithLinks(value);\n return (\n <Form.Group className=\"props_text\">\n {FieldHeader(opt)}\n <div>\n {parts.map((part, i) =>\n part.type === 'link' ? (\n <a\n key={i}\n href={part.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ wordBreak: 'break-word' }}\n >\n {part.content} {FIcons.faArrowUpRightFromSquare}\n </a>\n ) : (\n <span key={i}>{part.content}</span>\n ),\n )}\n </div>\n </Form.Group>\n );\n};\n\nTextLabel.propTypes = {\n opt: PropTypes.object,\n value: PropTypes.string,\n};\n\nTextLabel.defaultProps = {\n opt: {},\n value: '',\n};\n\nexport default TextLabel;\n","/* eslint-disable react/destructuring-assignment */\n/* eslint-disable jsx-a11y/no-static-element-interactions */\n/* eslint-disable jsx-a11y/anchor-is-valid */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\n/* eslint-disable no-eval */\n/* eslint-disable no-restricted-globals */\n\nimport React, { useState, useCallback } from 'react';\nimport {\n Button,\n Form,\n InputGroup,\n ListGroup,\n ListGroupItem,\n} from 'react-bootstrap';\nimport 'react-datepicker/dist/react-datepicker.css';\nimport Dropzone from 'react-dropzone';\nimport Select from 'react-select';\nimport { v4 as uuid } from 'uuid';\nimport moment from 'moment';\nimport { downloadFile, genUnit, FieldTypes } from 'generic-ui-core';\nimport Constants from '@components/tools/Constants';\nimport DateTimeRange from '@components/fields/DateTimeRange';\nimport FieldHeader from '@components/fields/FieldHeader';\nimport { fieldCls, frmSelSty, genUnitSup } from '@components/tools/utils';\nimport GenericElDropTarget from '@components/dnd/GenericElDropTarget';\nimport TableRecord from '@components/table/TableRecord';\nimport FieldUploadItem from '@components/fields/FieldUploadItem';\nimport DropReaction from '@components/dnd/DropReaction';\nimport ButtonDatePicker from '@components/fields/ButtonDatePicker';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\nimport TAs from '@components/tools/TAs';\nimport TextLabel from '@ui/common/TextLabel';\nimport { modeClass } from '@/utils/pureUtils';\n\nconst GenPropertiesCheckbox = (opt) => {\n if (opt.isSpCall) {\n return (\n <Form.Group className=\"props_text gu_sp_form\">\n {FieldHeader(opt)}\n <Form.Check\n type=\"checkbox\"\n name={opt.field}\n checked={opt.value}\n onChange={opt.onChange}\n disabled={opt.readOnly}\n className=\"gu_sp_column\"\n />\n </Form.Group>\n );\n }\n return (\n <Form.Group>\n {FieldHeader({ label: '', description: '' })}\n <Form.Check\n type=\"checkbox\"\n id={opt.field}\n checked={opt.value}\n onChange={opt.onChange}\n disabled={opt.readOnly}\n // style={{ marginTop: '5px' }}\n >\n <Form.Check.Input\n // className=\"mt-2\"\n type=\"checkbox\"\n name={opt.field}\n checked={opt.value}\n onChange={opt.onChange}\n disabled={opt.readOnly}\n />\n <Form.Check.Label>{FieldHeader(opt)}</Form.Check.Label>\n {/* <div style={{ marginTop: '-2px' }}>{FieldHeader(opt)}</div> */}\n </Form.Check>\n </Form.Group>\n );\n};\n\nconst GenPropertiesDate = (opt) => {\n const klz = fieldCls(opt.isSpCall);\n const klzLayer =\n opt.isAtLayer || false\n ? 'gu_date_picker gu_date_picker_layer'\n : 'gu_date_picker';\n const newVal =\n opt.value &&\n new Date(moment(opt.value, 'DD/MM/YYYY HH:mm:ss').toISOString());\n // const newVal = opt.value && moment(opt.value, 'DD/MM/YYYY HH:mm:ss');\n\n return (\n <Form.Group className={klz[0]}>\n {FieldHeader(opt)}\n <div className={klzLayer}>\n <ButtonDatePicker\n onChange={opt.onChange}\n val={newVal}\n readOnly={opt.readOnly}\n />\n </div>\n </Form.Group>\n );\n};\n\nconst GenPropertiesDateTimeRange = (opt) => {\n const klz = fieldCls(opt.isSpCall);\n return (\n <Form.Group className={`${klz[0]}`}>\n {FieldHeader(opt)}\n <DateTimeRange key={`grid_${opt.f_obj.field}`} opt={opt} />\n </Form.Group>\n );\n};\n\nconst GenPropertiesDrop = (opt) => {\n const className = opt.isRequired\n ? 'drop_generic_properties field_required'\n : 'drop_generic_properties';\n\n let createOpt = null;\n\n if (opt.value?.is_new === true && opt.classStr) {\n createOpt = (\n <div className=\"sample_radios\">\n <LTooltip idf=\"associate_direct\">\n <Form.Check\n type=\"radio\"\n name={`dropS_${opt.value.el_id}`}\n disabled={opt.value.isAssoc === true}\n checked={opt.value.cr_opt === 0}\n onChange={() => opt.onChange({ ...opt.value, cr_opt: 0 })}\n inline\n label=\"Current\"\n />\n </LTooltip>\n <LTooltip idf=\"associate_split\">\n <Form.Check\n type=\"radio\"\n name={`dropS_${opt.value.el_id}`}\n checked={opt.value.cr_opt === 1}\n onChange={() => opt.onChange({ ...opt.value, cr_opt: 1 })}\n inline\n label=\"Split\"\n />\n </LTooltip>\n <LTooltip idf=\"associate_duplicate\">\n <Form.Check\n type=\"radio\"\n name={`dropS_${opt.value.el_id}`}\n checked={opt.value.cr_opt === 2}\n onChange={() => opt.onChange({ ...opt.value, cr_opt: 2 })}\n inline\n label=\"Copy\"\n />\n </LTooltip>\n </div>\n );\n }\n const defaultIcon =\n opt.type === FieldTypes.F_DRAG_ELEMENT ? (\n <span className=\"indicator\">{FIcons.faLink}</span>\n ) : (\n <span className=\"icon-sample indicator\" />\n );\n const dragTarget =\n opt.isPreview === true ? (\n <div className=\"target\">{defaultIcon}</div>\n ) : (\n <GenericElDropTarget\n opt={opt}\n onDrop={opt.onChange}\n readOnly={opt.readOnly}\n />\n );\n\n return (\n <Form.Group>\n {FieldHeader(opt)}\n <div style={{ paddingBottom: '0px' }}>\n <div className={className}>\n {dragTarget}\n {createOpt}\n {opt.isEditable && (\n <div style={{ zIndex: '3' }}>\n <LTooltip idf=\"remove\">\n <Button\n size=\"sm\"\n className=\"btn_del\"\n variant=\"danger\"\n onClick={() => opt.onChange({})}\n disabled={!opt.isEditable}\n >\n {FIcons.faTrashCan}\n </Button>\n </LTooltip>\n </div>\n )}\n </div>\n </div>\n </Form.Group>\n );\n};\n\nconst GenDummy = () => (\n <Form.Group className=\"props_text\">\n <Form.Control type=\"text\" className=\"dummy\" readOnly />\n </Form.Group>\n);\n\nconst GenDropReaction = (opt) => (\n <DropReaction\n field={opt.f_obj}\n onNavi={opt.onNavi}\n onChange={opt.onChange}\n isEditable={opt.isEditable}\n />\n);\n\nconst GenPropertiesInputGroup = (opt) => {\n const { f_obj: fObj, isSpCall, onSubChange, readOnly } = opt;\n const handleSubChange = useCallback(\n (event, id) => {\n onSubChange(event, id, fObj);\n },\n [onSubChange, fObj],\n );\n const klz = fieldCls(isSpCall);\n const subs = fObj?.sub_fields?.map((e) => {\n if (e.type === FieldTypes.F_LABEL) {\n return (\n <InputGroup.Text key={`_label_${e.id}`}>{e.value}</InputGroup.Text>\n );\n }\n if (e.type === FieldTypes.F_SYSTEM_DEFINED) {\n return (\n <React.Fragment key={`_fra_${e.id}`}>\n <Form.Control\n type=\"number\"\n name={e.id}\n value={e.value}\n className={`gu-${modeClass(readOnly, false)}`}\n onChange={(o) => handleSubChange(o, e.id, fObj)}\n min={1}\n readOnly={readOnly}\n />\n <Button\n onClick={() => handleSubChange(e, e.id, fObj)}\n variant=\"success\"\n disabled={readOnly}\n >\n {genUnitSup(genUnit(e.option_layers, e.value_system).label) || ''}\n </Button>\n </React.Fragment>\n );\n }\n\n return (\n <Form.Control\n key={e.id}\n type={e.type}\n name={e.id}\n value={e.value || ''}\n className={`gu-${modeClass(readOnly, false)}`}\n onChange={(o) => handleSubChange(o, e.id, fObj)}\n readOnly={readOnly}\n />\n );\n });\n return (\n <Form.Group className={klz[0]}>\n {FieldHeader(opt)}\n <InputGroup>{subs}</InputGroup>\n </Form.Group>\n );\n};\n\nconst GenPropertiesNumber = (opt) => {\n const className = modeClass(opt.readOnly, opt.isRequired);\n const klz = fieldCls(opt.isSpCall);\n return (\n <Form.Group className={klz[0]}>\n {FieldHeader(opt)}\n <Form.Control\n type=\"number\"\n value={opt.value}\n onChange={opt.onChange}\n className={className}\n readOnly={opt.readOnly}\n required={opt.isRequired}\n placeholder={opt.placeholder}\n min={1}\n />\n </Form.Group>\n );\n};\n\nconst GenPropertiesSelect = (opt) => {\n const options = opt.options.map((op) => {\n return {\n value: op.key,\n name: op.key,\n label: op.label,\n };\n });\n let className = modeClass(opt.readOnly, opt.isRequired);\n className = `select_generic_properties_${className}`;\n const val = options.find((o) => o.value === opt.value) || null;\n const klz = fieldCls(opt.isSpCall);\n\n const customStyles = {\n menuPortal: (base) => ({ ...base, zIndex: 9999 }),\n menu: (base) => ({ ...base, zIndex: 9999 }),\n };\n return (\n <Form.Group className={klz[0]}>\n {FieldHeader(opt)}\n <span className={klz[1]}>\n <Select\n isClearable\n name={opt.field}\n multi={false}\n options={options}\n value={val}\n onChange={opt.onChange}\n className={className}\n isDisabled={opt.readOnly}\n menuPlacement=\"auto\"\n menuPortalTarget={document.body}\n styles={{ ...frmSelSty, ...customStyles }}\n />\n </span>\n </Form.Group>\n );\n};\n\nconst GenPropertiesSystemDefined = (opt) => {\n const className = modeClass(opt.readOnly, opt.isRequired);\n const klz = fieldCls(opt.isSpCall);\n const hasUT = !!genUnit(opt.option_layers, opt.value_system).unit_type;\n return (\n <Form.Group className={klz[0]}>\n {FieldHeader(opt)}\n <InputGroup className={klz[1]}>\n <Form.Control\n type=\"number\"\n value={\n opt.f_obj.value !== undefined && opt.f_obj.value !== null\n ? opt.f_obj.value\n : ''\n }\n onChange={opt.onChange}\n className={`gu-${className} ${klz[1]}`}\n readOnly={opt.readOnly}\n required={opt.isRequired}\n placeholder={opt.placeholder}\n />\n <Button\n size=\"sm\"\n disabled={opt.readOnly}\n onClick={opt.onClick}\n variant=\"success\"\n title={hasUT ? TAs.no_unit_conversion : undefined}\n >\n {genUnitSup(genUnit(opt.option_layers, opt.value_system).label) || ''}\n </Button>\n </InputGroup>\n </Form.Group>\n );\n};\n\nconst GenPropertiesTable = (opt) => (\n <Form.Group>\n {FieldHeader(opt)}\n <TableRecord key={`grid_${opt.f_obj.field}`} opt={opt} />\n </Form.Group>\n);\n\nconst GenPropertiesText = (opt) => {\n const [id] = useState(uuid());\n const { f_obj: fObj } = opt;\n const showVal = opt.value;\n if (fObj?.readonly) return <TextLabel opt={opt} value={fObj.placeholder} />;\n\n const klz = fieldCls(opt.isSpCall);\n\n let className = modeClass(opt.readOnly, opt.isRequired);\n let readOnly = opt.readOnly || false;\n if (readOnly) {\n className = 'readonly';\n }\n\n return (\n <Form.Group className={`props_text ${klz[0]}`}>\n {FieldHeader(opt)}\n <Form.Control\n id={id}\n type=\"text\"\n value={showVal}\n onChange={opt.onChange}\n className={`${className} ${klz[1]}`}\n readOnly={readOnly}\n required={opt.isRequired}\n placeholder={opt.placeholder}\n />\n </Form.Group>\n );\n};\n\nconst GenPropertiesTextArea = (opt) => {\n const [id] = useState(uuid());\n const className = modeClass(opt.readOnly, opt.isRequired);\n const klz = fieldCls(opt.isSpCall);\n return (\n <Form.Group className={`props_text ${klz[0]}`}>\n {FieldHeader(opt)}\n <Form.Control\n id={id}\n as=\"textarea\"\n value={opt.value}\n onChange={opt.onChange}\n className={className}\n readOnly={opt.readOnly}\n required={opt.isRequired}\n placeholder={opt.placeholder}\n />\n </Form.Group>\n );\n};\n\nconst GenTextFormula = (opt) => {\n const [id] = useState(uuid());\n const { layers } = opt;\n const subs = [];\n (opt.f_obj?.text_sub_fields || []).map((e) => {\n const { layer, field, separator } = e;\n if (field && field !== '') {\n if (field.includes(`[${Constants.SEPARATOR_TAG}]`)) {\n const fds = field.split(`[${Constants.SEPARATOR_TAG}]`);\n if (fds && fds.length === 2) {\n const fdt = ((layers[layer] || {}).fields || []).find(\n (f) => f.field === fds[0] && f.type === FieldTypes.F_TABLE,\n );\n ((fdt && fdt.sub_values) || []).forEach((svv) => {\n if (svv && svv[fds[1]] && svv[fds[1]] !== '') {\n subs.push(svv[fds[1]]);\n subs.push(separator);\n }\n });\n }\n } else {\n const fd = ((layers[layer] || {}).fields || []).find(\n (f) => f.field === field,\n );\n if (fd && fd.value && fd.value !== '') {\n subs.push(fd.value);\n subs.push(separator);\n }\n }\n }\n return true;\n });\n const klz = fieldCls(opt.isSpCall);\n return (\n <Form.Group className={`props_text ${klz[0]}`}>\n {FieldHeader(opt)}\n <Form.Control\n id={id}\n type=\"text\"\n value={subs.join('')}\n className={`readonly ${klz[1]}`}\n readOnly\n required={false}\n />\n </Form.Group>\n );\n};\n\nconst renderListGroupItem = (opt, attachment) => {\n const delBtn = (\n <Button\n id={attachment.uid}\n size=\"sm\"\n className=\"button-right\"\n onClick={() =>\n opt.onChange({ ...opt.value, action: 'd', uid: attachment.uid })\n }\n >\n {FIcons.faTimes}\n </Button>\n );\n const filename = attachment.aid ? (\n <>\n <a\n onClick={() =>\n downloadFile({\n contents: `/api/v1/attachments/${attachment.aid}`,\n name: attachment.filename,\n })\n }\n style={{ cursor: 'pointer' }}\n title={attachment.filename}\n >\n {attachment.filename}\n </a>\n <br />\n <img\n src={`/api/v1/attachments/thumbnail/${attachment.aid}`}\n alt={attachment.filename}\n />\n </>\n ) : (\n attachment.filename\n );\n return (\n <div className=\"generic_grid\">\n <div>\n <div>{delBtn}</div>\n <div className=\"generic_grid_row file_text\">{filename}</div>\n <div className=\"generic_grid_row\">\n <Form.Group size=\"sm\">\n <Form.Control\n type=\"text\"\n value={attachment.label || ''}\n onChange={(e) =>\n opt.onChange({\n ...opt.value,\n action: 'l',\n uid: attachment.uid,\n val: e,\n })\n }\n />\n </Form.Group>\n </div>\n </div>\n </div>\n );\n};\n\nconst GenPropertiesUpload = (opt) => {\n const attachments = (opt.value && opt.value.files) || [];\n if (opt.isSearch) return <div>(This is an upload)</div>;\n return (\n <Form.Group className=\"props_text\">\n {FieldHeader(opt)}\n {!opt.readOnly ? (\n <div style={{ paddingBottom: '0px', paddingTop: '0px' }}>\n <Dropzone\n id=\"dropzone\"\n onDrop={(e) =>\n opt.onChange({\n ...opt.value,\n action: 'f',\n val: e,\n })\n }\n className=\"lu-drop-zone\"\n style={{ height: 34 }}\n >\n <div\n style={{\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n }}\n >\n Drop File, or Click to Select.\n </div>\n </Dropzone>\n </div>\n ) : null}\n <ListGroup>\n {attachments.map((attachment) => (\n <ListGroupItem key={attachment.uid} className=\"generic_files\">\n {/* {renderListGroupItem(opt, attachment)} */}\n <FieldUploadItem opt={opt} attachment={attachment} />\n </ListGroupItem>\n ))}\n </ListGroup>\n </Form.Group>\n );\n};\n\nconst GenWFNext = (opt) => {\n const options = (opt.f_obj.wf_options || []).map((op) => {\n const label = op.label.match(/(.*)\\(.*\\)/);\n return {\n value: op.key,\n name: op.key,\n label: label[1] === '' ? label[0] : label[1],\n };\n });\n let className = modeClass(opt.readOnly, opt.isRequired);\n className = `select_generic_properties_${className}`;\n\n const val = options.find((o) => o.value === opt.value) || null;\n return (\n <Form.Group>\n {FieldHeader(opt)}\n <Select\n menuContainerStyle={{ position: 'absolute' }}\n name={opt.field}\n multi={false}\n options={options}\n value={val}\n onChange={opt.onChange}\n className={className}\n disabled={opt.readOnly}\n styles={frmSelSty}\n />\n </Form.Group>\n );\n};\n\nexport {\n GenPropertiesCheckbox,\n GenPropertiesDate,\n GenPropertiesDateTimeRange,\n GenPropertiesDrop,\n GenDummy,\n GenTextFormula,\n GenPropertiesInputGroup,\n GenPropertiesNumber,\n GenPropertiesSelect,\n GenPropertiesSystemDefined,\n GenPropertiesTable,\n GenPropertiesText,\n GenPropertiesTextArea,\n GenPropertiesUpload,\n GenWFNext,\n GenDropReaction,\n};\n","import React from 'react';\nimport { Button, Form, InputGroup } from 'react-bootstrap';\nimport filter from 'lodash/filter';\nimport { evaluate } from 'mathjs';\nimport { FieldTypes } from 'generic-ui-core';\nimport FieldHeader from '@components/fields/FieldHeader';\nimport { fieldCls } from '@components/tools/utils';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\nimport { toBool, toNullOrInt } from '@utils/pureUtils';\n\nconst PropCalculate = (opt) => {\n const {\n f_obj: fObj,\n formula,\n isSpCall,\n layer,\n onChange,\n placeholder,\n type,\n value,\n isEditable,\n } = opt;\n let { canAdjust = false, decimal = 5 } = fObj;\n canAdjust = toBool(canAdjust);\n decimal = toNullOrInt(decimal) || 5;\n\n const fields = layer?.fields || [];\n let showVal = 0;\n let showTxt = null;\n\n const calFields = filter(fields, (o) =>\n [FieldTypes.F_INTEGER, FieldTypes.F_SYSTEM_DEFINED].includes(o.type)\n );\n\n const regF = /[a-zA-Z0-9_]+/gm;\n const varFields =\n formula && formula.match(regF)\n ? formula.match(regF).sort((a, b) => b.length - a.length)\n : [];\n\n let newFormula = formula?.replace(/\\*\\*/g, '^');\n\n varFields.forEach((fi) => {\n if (!isNaN(fi)) return;\n\n const tmpField = calFields.find((e) => e.field === fi);\n if (typeof tmpField === 'undefined' || tmpField == null) {\n newFormula = newFormula?.replace(fi, 0);\n } else {\n newFormula = newFormula?.replace(fi, parseFloat(tmpField.value || 0));\n }\n });\n\n if (type === FieldTypes.F_FORMULA_FIELD) {\n try {\n showVal = evaluate(newFormula);\n showTxt = !isNaN(showVal) ? parseFloat(showVal.toFixed(decimal)) : 0;\n } catch (e) {\n showTxt = e.message;\n }\n }\n\n const comp = (\n <Form.Control\n type=\"text\"\n value={showTxt}\n className=\"readonly\"\n readOnly\n disabled={!isEditable}\n required={false}\n placeholder={placeholder}\n min={0}\n />\n );\n\n const klz = fieldCls(isSpCall);\n return (\n <Form.Group className={klz[0]}>\n {FieldHeader(opt)}\n {!canAdjust ? (\n comp\n ) : (\n <InputGroup className={klz[1]}>\n {comp}\n <LTooltip idf=\"adjust_calculation\">\n <Button\n variant=\"light\"\n className=\"clipboardBtn\"\n onClick={() => onChange(showTxt)}\n disabled={!isEditable}\n >\n {FIcons.faArrowRight}\n </Button>\n </LTooltip>\n <Form.Control\n type=\"text\"\n value={value}\n onChange={onChange}\n required={false}\n placeholder={placeholder}\n min={0}\n readOnly={!isEditable}\n />\n </InputGroup>\n )}\n </Form.Group>\n );\n};\n\nexport default PropCalculate;\n","import ApiExecutor from '@utils/apiExecutor';\n\nconst API_EL = 'generic_elements';\nconst API_SG = 'segments';\nconst API_DS = 'generic_dataset';\n\nconst API_KS = 'generic_klass';\n\nclass VerManager {\n static #exec = async (apiPrefix, endpoint, method = 'GET', params = null) => {\n const fullEndpoint = `${apiPrefix}/${endpoint}`;\n const data = method === 'GET' ? null : params;\n const queryParams = method === 'GET' ? params || {} : {};\n\n return ApiExecutor.exec(fullEndpoint, method, data, queryParams);\n };\n\n static klassRevisions = (params = {}) =>\n VerManager.#exec(API_EL, 'klass_revisions.json', 'GET', params);\n\n static revisions = ({ type, id } = {}) =>\n VerManager.#exec(API_EL, `${type}_revisions.json`, 'GET', { id });\n\n static deleteKlassRevision = (data) =>\n VerManager.#exec(API_EL, 'delete_klass_revision', 'POST', data);\n\n static deleteRevision = (data) =>\n VerManager.#exec(API_EL, 'delete_revision', 'POST', data);\n\n static listELKlass = (params = {}) =>\n VerManager.#exec(API_EL, 'list_element_klass.json', 'GET', params);\n\n static listSGKlass = (params = {}) =>\n VerManager.#exec(API_SG, 'list_segment_klass.json', 'GET', params);\n\n static listDSKlass = (params = {}) =>\n VerManager.#exec(API_DS, 'list_klass.json', 'GET', params);\n\n static deActivateKlass = (params = {}) =>\n VerManager.#exec(API_KS, 'de_activate', 'POST', params);\n\n static fetchKlass = (params = {}) =>\n VerManager.#exec(API_KS, 'fetch', 'GET', params);\n\n static updateTemplate = (params = {}) =>\n VerManager.#exec(API_EL, 'update_template', 'POST', params);\n\n static listELby = (params = {}) =>\n VerManager.#exec(API_EL, 'search_by_like', 'GET', params);\n\n static listBasicELby = (params = {}) =>\n VerManager.#exec(API_EL, 'search_basic_by_like', 'GET', params);\n\n static dispatchListELby = (params = {}) => {\n const { name, short_label, selected_klass, limit } = params;\n\n if (selected_klass.klass.is_generic) {\n return VerManager.listELby({\n name,\n short_label,\n klass_id: selected_klass.klass.id,\n limit,\n });\n } else {\n return VerManager.listBasicELby({\n name,\n short_label,\n klass_name: selected_klass.klass.name,\n limit,\n });\n }\n };\n}\n\nexport default VerManager;\n","/* eslint-disable react/forbid-prop-types */\nimport React, {\n useState,\n useEffect,\n useCallback,\n useMemo,\n useRef,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport sortBy from 'lodash/sortBy';\nimport { Modal, Button, Form, Row, Col, Alert } from 'react-bootstrap';\nimport { AgGridReact } from 'ag-grid-react';\nimport Select from 'react-select';\nimport Constants from '@components/tools/Constants';\nimport VerManager from '@utils/verMgr';\nimport { frmSelSty } from '@components/tools/utils';\n\nconst permitTargets = Object.values(Constants.PERMIT_TARGET);\n\n/**\n * Modal component for searching and selecting elements\n * Displays a searchable grid with element data\n */\nconst ElementSelectModal = ({ show, onHide, onSelect }) => {\n const [elements, setElements] = useState([]);\n const [filteredElements, setFilteredElements] = useState([]);\n const [loading, setLoading] = useState(false);\n const [selectedElement, setSelectedElement] = useState(null);\n const [name, setName] = useState('');\n const [shortLabelFilter, setShortLabelFilter] = useState('');\n const [limit, setLimit] = useState(20);\n const [errors, setErrors] = useState({});\n const gridRef = useRef();\n\n // Fetch all elements when modal opens\n useEffect(() => {\n if (show) {\n fetchElements();\n }\n }, [show]);\n\n const fetchElements = async () => {\n setLoading(true);\n try {\n const res = await VerManager.listELKlass({ is_active: true });\n if (res.notify?.isSuccess) {\n const activeELs = sortBy(\n (res.element?.data?.klass || []).filter(\n (el) => el.is_generic || permitTargets.includes(el.name),\n ),\n 'label',\n );\n setElements(activeELs);\n } else {\n console.error('Failed to fetch elements:', res.error);\n setElements([]);\n }\n } catch (error) {\n console.error('Error fetching elements:', error);\n setElements([]);\n } finally {\n setLoading(false);\n }\n };\n\n // Build element options for dropdown\n const elementOptions = useMemo(() => {\n return elements.map((klass) => ({\n value: klass.name,\n label: klass.label,\n klass: klass,\n }));\n }, [elements]);\n\n // Filter elements based on search criteria\n const handleSearch = useCallback(async () => {\n const newErrors = {};\n\n // Validation\n if (!selectedElement) {\n newErrors.element = 'Element selection is required';\n }\n\n if (shortLabelFilter.trim() && shortLabelFilter.trim().length < 3) {\n newErrors.shortLabel = 'Short Label must be at least 3 characters';\n }\n\n if (name.trim() && name.trim().length < 3) {\n newErrors.name = 'Name must be at least 3 characters';\n }\n\n // For research_plan, name is always required because short_label means nothing to it\n if (selectedElement?.value === 'research_plan') {\n if (!name.trim()) {\n newErrors.name = 'Name is required for research plans';\n }\n } else {\n // At least one of name or shortLabelFilter is required for other elements\n if (!name.trim() && !shortLabelFilter.trim()) {\n newErrors.search = 'At least one of Name or Short Label is required';\n }\n }\n\n setErrors(newErrors);\n\n if (Object.keys(newErrors).length > 0) {\n return;\n }\n\n try {\n const res = await VerManager.dispatchListELby({\n name: name,\n short_label: shortLabelFilter,\n selected_klass: selectedElement,\n limit: 20,\n });\n if (res.notify?.isSuccess) {\n setFilteredElements(res.element?.data?.elements || []);\n } else {\n console.error('Failed to search elements:', res.error);\n setFilteredElements([]);\n }\n } catch (error) {\n console.error('Error searching elements:', error);\n setFilteredElements([]);\n }\n }, [selectedElement, shortLabelFilter, name, elements]);\n\n // Reset filters\n const handleReset = () => {\n setSelectedElement(null);\n setShortLabelFilter('');\n setName('');\n setFilteredElements([]);\n setErrors({});\n };\n\n // Handle row selection\n const handleRowSelect = useCallback(\n (params) => {\n if (params.node.isSelected()) {\n const selected = params.data;\n onSelect(selected);\n handleClose();\n }\n },\n [onSelect],\n );\n\n // Close modal and reset state\n const handleClose = useCallback(() => {\n handleReset();\n onHide();\n }, [onHide, handleReset]);\n\n // Column definitions for AG Grid\n const columnDefs = useMemo(\n () => [\n {\n headerName: 'Element',\n field: 'klass_label',\n sortable: false,\n flex: 1,\n },\n {\n headerName: 'Name',\n field: 'name',\n sortable: true,\n flex: 2,\n },\n {\n headerName: 'Short Label',\n field: 'short_label',\n sortable: true,\n flex: 1,\n },\n {\n headerName: 'Action',\n field: 'id',\n sortable: false,\n width: 120,\n cellRenderer: (params) => {\n return (\n <Button\n variant=\"primary\"\n size=\"xsm\"\n onClick={() => {\n onSelect(params.data);\n handleClose();\n }}\n >\n Select\n </Button>\n );\n },\n },\n ],\n [onSelect, handleClose],\n );\n\n const defaultColDef = useMemo(\n () => ({\n minWidth: 100,\n filter: false,\n sortable: true,\n resizable: true,\n }),\n [],\n );\n\n return (\n show && (\n <>\n <div\n className=\"modal-backdrop fade show\"\n style={{\n zIndex: 1055, // slightly higher than Modal-A backdrop (default 1040)\n }}\n >\n <Modal\n show={show}\n onHide={handleClose}\n size=\"xl\"\n centered\n backdrop=\"static\"\n enforceFocus={true}\n >\n <Modal.Header closeButton>\n <Modal.Title>Link Element</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n {Object.keys(errors).length > 0 && (\n <Alert variant=\"danger\" className=\"mb-3\">\n {errors.element && <div>{errors.element}</div>}\n {errors.search && <div>{errors.search}</div>}\n {errors.shortLabel && <div>{errors.shortLabel}</div>}\n {errors.name && <div>{errors.name}</div>}\n </Alert>\n )}\n {/* Search Criteria */}\n <Row className=\"mb-3 align-items-end\">\n <Col md={3}>\n <Form.Group>\n <Form.Label>Element</Form.Label>\n <Select\n styles={frmSelSty}\n isClearable\n options={elementOptions}\n value={selectedElement}\n onChange={setSelectedElement}\n placeholder=\"select from element...\"\n menuPortalTarget={document.body}\n menuPosition=\"fixed\"\n />\n </Form.Group>\n </Col>\n <Col md={3}>\n <Form.Group>\n <Form.Label>Name</Form.Label>\n <Form.Control\n type=\"text\"\n size=\"sm\"\n placeholder=\"(case-insensitive like search)\"\n value={name}\n onChange={(e) => setName(e.target.value)}\n />\n </Form.Group>\n </Col>\n <Col md={3}>\n <Form.Group>\n <Form.Label>Short Label</Form.Label>\n <Form.Control\n type=\"text\"\n size=\"sm\"\n placeholder=\"(case-insensitive like search)\"\n value={shortLabelFilter}\n onChange={(e) => setShortLabelFilter(e.target.value)}\n />\n </Form.Group>\n </Col>\n <Col md={1}>\n <Form.Group>\n <Form.Label>Results</Form.Label>\n <Form.Control\n disabled\n type=\"text\"\n size=\"sm\"\n placeholder=\"20\"\n value={limit}\n onChange={(e) => setLimit(e.target.value)}\n />\n </Form.Group>\n </Col>\n <Col md={2}>\n <Form.Group>\n <Button\n variant=\"primary\"\n onClick={handleSearch}\n className=\"me-2\"\n size=\"sm\"\n >\n Search\n </Button>\n <Button variant=\"secondary\" onClick={handleReset} size=\"sm\">\n Reset\n </Button>\n </Form.Group>\n </Col>\n </Row>\n\n {/* Results Grid */}\n <div\n className={Constants.GRID_THEME.BALHAM.VALUE}\n style={{ height: '400px', width: '100%', overflow: 'auto' }}\n >\n <AgGridReact\n ref={gridRef}\n rowData={filteredElements}\n columnDefs={columnDefs}\n defaultColDef={defaultColDef}\n loading={loading}\n rowSelection={{\n mode: 'singleRow',\n checkboxes: false,\n enableClickSelection: false,\n }}\n onRowClicked={handleRowSelect}\n suppressAutoSize={false}\n />\n </div>\n </Modal.Body>\n <Modal.Footer className=\"justify-content-start\">\n <Button variant=\"secondary\" onClick={handleClose}>\n Close\n </Button>\n </Modal.Footer>\n </Modal>\n </div>\n </>\n )\n );\n};\n\nElementSelectModal.propTypes = {\n show: PropTypes.bool.isRequired,\n onHide: PropTypes.func.isRequired,\n onSelect: PropTypes.func.isRequired,\n};\n\nexport default ElementSelectModal;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport ElementSelectModal from '@components/shared/ElementSelectModal';\n\n/**\n * Button component that opens the Element Select Modal\n * Allows users to search and select an element from available elements\n */\nconst ElementSelectButton = ({ onSelect, label, variant, size, className, disabled }) => {\n const [showModal, setShowModal] = useState(false);\n\n const handleSelect = (element) => {\n onSelect(element);\n setShowModal(false);\n };\n\n return (\n <>\n <Button\n variant={variant}\n size={size}\n className={className}\n disabled={disabled}\n onClick={() => setShowModal(true)}\n >\n {label}\n </Button>\n <ElementSelectModal\n show={showModal}\n onHide={() => setShowModal(false)}\n onSelect={handleSelect}\n />\n </>\n );\n};\n\nElementSelectButton.propTypes = {\n onSelect: PropTypes.func.isRequired,\n label: PropTypes.string,\n variant: PropTypes.string,\n size: PropTypes.string,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n};\n\nElementSelectButton.defaultProps = {\n label: 'Link Element',\n variant: 'success',\n size: 'xsm',\n className: '',\n disabled: false,\n};\n\nexport default ElementSelectButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Form } from 'react-bootstrap';\nimport Constants from '@components/tools/Constants';\nimport ElementSelectButton from '@components/shared/ElementSelectButton';\nimport FieldHeader from '@components/fields/FieldHeader';\nimport FIcons from '@components/icons/FIcons';\nimport { fnToggle } from '@ui/common/fnToggle';\nimport { FN_ID } from '@ui/common/fnConstants';\n\nconst DUMMY_BUTTON = (\n <Button variant=\"success\" size=\"xsm\" disabled>\n Link Element\n </Button>\n);\n\nfunction ElementLink({\n elId,\n elTip,\n iconName,\n elLabel,\n elKlass,\n onNavi,\n onChange,\n isEditable,\n}) {\n if (!elId) return <span />;\n const [, eName] = (elTip || '').split(Constants.SEPARATOR_TAG);\n return (\n <span className=\"d-flex align-items-center gap-3\">\n <a role=\"link\" onClick={() => onNavi(elKlass, elId)} className=\"lu-link\">\n <i className={iconName} />{' '}\n <span className=\"reaction-material-link\">{elLabel || eName}</span>{' '}\n {FIcons.faArrowUpRightFromSquare}\n </a>\n <Button\n size=\"sm\"\n variant=\"danger\"\n onClick={() => onChange({})}\n disabled={!isEditable}\n >\n {FIcons.faTrashCan}\n </Button>\n </span>\n );\n}\n\nElementLink.propTypes = {\n elId: PropTypes.string,\n elTip: PropTypes.string,\n iconName: PropTypes.string,\n elLabel: PropTypes.string,\n elKlass: PropTypes.string,\n onNavi: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n isEditable: PropTypes.bool,\n};\n\nElementLink.defaultProps = {\n elId: null,\n elTip: '',\n iconName: '',\n elLabel: '',\n elKlass: '',\n isEditable: false,\n};\n\nfunction SelectElement(props) {\n const { onChange, isEditable, isPreview, onNavi, value } = props;\n const {\n el_id: elId,\n el_label: elLabel,\n el_klass: elKlass,\n icon_name: iconName,\n el_tip: elTip,\n } = value || {};\n\n const handleElementSelect = (element) => {\n if (!element || !element.id) return;\n const newValue = {\n el_id: element.id,\n el_type: Constants.PERMIT_TARGET.ELEMENT,\n icon_name: element.klass_icon || '',\n el_klass: element.klass_name,\n el_label: element.short_label,\n el_name: element.name || '',\n el_tip: `${element.klass_label}${Constants.SEPARATOR_TAG}${element.name}`,\n };\n onChange(newValue);\n };\n\n if (isPreview) {\n return (\n <Form.Group>\n {FieldHeader(props)}\n <div>{DUMMY_BUTTON}</div>\n </Form.Group>\n );\n }\n\n return (\n <Form.Group>\n {FieldHeader(props)}\n <div>\n {elId ? (\n <ElementLink\n elId={elId}\n elTip={elTip}\n iconName={iconName}\n elLabel={elLabel}\n elKlass={elKlass}\n onNavi={onNavi}\n onChange={onChange}\n isEditable={isEditable}\n />\n ) : (\n <ElementSelectButton onSelect={handleElementSelect} />\n )}\n </div>\n </Form.Group>\n );\n}\n\nSelectElement.fnId = FN_ID.FN_DRAG_EL_CHEMOTION;\n\nexport default fnToggle(SelectElement);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Constants from '@components/tools/Constants';\nimport SelectElement from '@components/fields/SelectElement';\nimport { GenPropertiesDrop } from '@components/fields/GenPropertiesFields';\n\nfunction PropDrop(props) {\n const { genericType } = props;\n if (genericType === Constants.GENERIC_TYPES.DATASET) {\n return <SelectElement {...props} />;\n }\n return <GenPropertiesDrop {...props} />;\n}\n\nPropDrop.propTypes = {\n genericType: PropTypes.string.isRequired,\n};\n\nexport default PropDrop;\n","import React from 'react';\nimport { Form } from 'react-bootstrap';\nimport Select from 'react-select';\nimport FieldHeader from '@components/fields/FieldHeader';\nimport { fieldCls, frmSelSty } from '@components/tools/utils';\n\nconst GenPropSelectMulti = (opt) => {\n const {\n field,\n f_obj: fObj,\n options,\n onChange,\n isRequired,\n isEditable,\n isSpCall,\n readOnly,\n } = opt;\n const klz = fieldCls(isSpCall);\n const selectOpts = options.map((op) => {\n return {\n value: op.key,\n name: op.key,\n label: op.label,\n };\n });\n let className = isEditable\n ? 'select_generic_properties_editable'\n : 'select_generic_properties_readonly';\n className =\n isRequired && isEditable ? 'select_generic_properties_required' : className;\n const selectedOpts = (fObj?.sub_fields || [])\n .map((sf) => {\n const op = selectOpts.find((o) => o.value === sf.value);\n if (op) {\n return op;\n }\n return null;\n })\n .filter(Boolean);\n return (\n <Form.Group className={klz[0]}>\n {FieldHeader(opt)}\n <span className={klz[1]}>\n <Select\n className={className}\n isClearable\n isMulti\n isDisabled={readOnly}\n menuPlacement=\"auto\"\n menuPortalTarget={document.body}\n name={field}\n options={selectOpts}\n onChange={onChange}\n styles={frmSelSty}\n value={selectedOpts}\n />\n </span>\n </Form.Group>\n );\n};\n\nexport default GenPropSelectMulti;\n","const VOC_IDENT = 'is_voc';\nconst VOC_MODE = {\n R: { value: 'read', op: 7 },\n S: { value: 'skip', op: 5 },\n W: { value: 'write', op: 6 },\n};\n\nconst isNotObject = (value) => {\n return typeof value !== 'object' || value === null || Array.isArray(value);\n};\n\nconst isEmptyObject = (input) => {\n return (\n typeof input === 'object' &&\n input !== null &&\n !Array.isArray(input) &&\n Object.keys(input).length === 0\n );\n};\n\nconst vocMode = (fieldObject) => {\n if (isNotObject(fieldObject)) return VOC_MODE.S.value;\n if (isEmptyObject(fieldObject)) return VOC_MODE.S.value;\n if (!(VOC_IDENT in fieldObject)) return VOC_MODE.S.value;\n if (fieldObject[VOC_IDENT] === true && fieldObject?.opid >= VOC_MODE.R.op) {\n return VOC_MODE.R.value;\n }\n return VOC_MODE.W.value;\n};\n\nexport { VOC_IDENT, VOC_MODE, vocMode };\n","import React from 'react';\nimport { FieldTypes } from 'generic-ui-core';\nimport {\n GenPropertiesCheckbox,\n GenPropertiesDate,\n GenPropertiesDateTimeRange,\n GenPropertiesSelect,\n // GenPropertiesDrop,\n GenPropertiesNumber,\n GenPropertiesSystemDefined,\n GenPropertiesInputGroup,\n GenPropertiesTextArea,\n GenPropertiesUpload,\n GenDummy,\n GenPropertiesTable,\n GenTextFormula,\n GenWFNext,\n GenPropertiesText,\n GenDropReaction,\n} from '@components/fields/GenPropertiesFields';\n// import Constants from '@components/tools/Constants';\nimport PropCalculate from '@components/fields/PropCalculate';\nimport PropDrop from '@components/fields/PropDrop';\nimport GenPropSelectMulti from '@components/fields/GenPropSelectMulti';\n// import ElementSelectButton from '@components/shared/ElementSelectButton';\nimport { VOC_MODE, vocMode } from '@/utils/vocUtils';\n\n// const renderDrop = (props) => {\n// const { genericType } = props;\n// console.log('renderDrop props:', props);\n// if (genericType === Constants.GENERIC_TYPES.DATASET) {\n// return <ElementSelectButton {...props} />;\n// }\n// return <GenPropertiesDrop {...props} />;\n// };\n\nconst readVoc = (field, readonly) => {\n if (vocMode(field) === VOC_MODE.R.value) {\n return true;\n }\n return readonly;\n};\n\nconst GenProperties = (opt) => {\n const fieldProps = { ...opt, dndItems: [], readOnly: readVoc(opt.f_obj, opt.readOnly), isEditable: !readVoc(opt.f_obj, !opt.isEditable) };\n let [mainType, custom] = fieldProps.type.split('_');\n if (opt.isSearch && mainType === FieldTypes.F_DRAG) mainType = FieldTypes.F_TEXT;\n // if (opt.isPreview && (mainType === 'drag' || mainType === 'upload')) mainType = 'text';\n switch (mainType) {\n case FieldTypes.F_CHECKBOX:\n return GenPropertiesCheckbox(fieldProps);\n case FieldTypes.F_DATETIME:\n return GenPropertiesDate(fieldProps);\n // case 'datetime-range':\n // return GenPropertiesDateTimeRange(fieldProps);\n case FieldTypes.F_FORMULA_FIELD:\n return PropCalculate(fieldProps);\n case FieldTypes.F_SELECT:\n return GenPropertiesSelect(fieldProps);\n case FieldTypes.F_SELECT_MULTI:\n return GenPropSelectMulti(fieldProps);\n case FieldTypes.F_DRAG:\n fieldProps.dndItems = [...fieldProps.dndItems, custom];\n // return GenPropertiesDrop(fieldProps);\n // return renderDrop(fieldProps);\n return PropDrop(fieldProps);\n case FieldTypes.F_INTEGER:\n return GenPropertiesNumber(fieldProps);\n case FieldTypes.F_SYSTEM_DEFINED:\n return GenPropertiesSystemDefined(fieldProps);\n case FieldTypes.F_INPUT_GROUP:\n return GenPropertiesInputGroup(fieldProps);\n case FieldTypes.F_TEXTAREA:\n return GenPropertiesTextArea(fieldProps);\n case FieldTypes.F_UPLOAD:\n return GenPropertiesUpload(fieldProps);\n case FieldTypes.F_DUMMY:\n return GenDummy();\n case FieldTypes.F_SYS_REACTION:\n return GenDropReaction(fieldProps);\n case FieldTypes.F_TABLE:\n return GenPropertiesTable(fieldProps);\n case FieldTypes.F_TEXT_FORMULA:\n return GenTextFormula(fieldProps);\n case FieldTypes.F_WF_NEXT:\n return GenWFNext(fieldProps);\n default:\n return GenPropertiesText(fieldProps);\n }\n};\n\nexport default GenProperties;\n","import React from 'react';\nimport { useDrag, useDrop } from 'react-dnd';\nimport Button from 'react-bootstrap/Button';\nimport ButtonGroup from 'react-bootstrap/ButtonGroup';\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger';\nimport Tooltip from 'react-bootstrap/Tooltip';\nimport { GenPropertiesDate } from '@components/fields/GenPropertiesFields';\nimport Constants from '@components/tools/Constants';\nimport FIcons from '@components/icons/FIcons';\nimport { LWf } from '@components/shared/LCom';\nimport fbc from '@components/tools/ui-styles';\n\nconst orderSource = {\n canDrag(props) {\n return !props.layer.wf;\n },\n beginDrag(props) {\n return props;\n },\n};\n\nconst PanelDnD = (props) => {\n const {\n type,\n layer,\n field,\n handleMove,\n id,\n handleChange,\n onAttrChange,\n // bs,\n hasAi,\n editMode,\n grouped,\n } = props;\n\n const [{ isDraggingSource }, drag] = useDrag(() => {\n return {\n type,\n canDrag: () => orderSource.canDrag(props),\n item: () => orderSource.beginDrag(props),\n collect: (monitor) => {\n return {\n isDraggingSource: monitor.isDragging(),\n };\n },\n };\n });\n\n const [{ isOver, isOverValidTarget }, drop] = useDrop(() => {\n return {\n accept: type,\n canDrop: (item) => !layer.wf || !item.layer.wf,\n drop: (item) => {\n if (field === item.field && layer.key !== item.layer.key)\n handleMove(item.layer.key, layer.key);\n },\n collect: (monitor) => {\n return {\n isOver: monitor.isOver(),\n isOverValidTarget: monitor.canDrop(),\n };\n },\n };\n });\n\n const className = `generic_grid_dnd${isOver ? ' is-over' : ''}${\n isOverValidTarget ? ' can-drop' : ''\n }${isDraggingSource ? ' is-dragging' : ''}`;\n\n const { style, label, wf = false, key, timeRecord } = layer;\n const isSys = key.startsWith(Constants.SYS_REACTION);\n\n const dndKlz = wf ? `dnd-none` : `dnd`;\n\n const klz = style || 'panel_generic_heading';\n\n const createButton = (icon, tooltip, tooltipId, handleClick) => {\n return (\n <OverlayTrigger\n key={`${layer.key}-${tooltipId}`}\n delayShow={1000}\n placement=\"top\"\n overlay={<Tooltip id={`tooltip-${layer.key}-${tooltipId}`}>{tooltip}</Tooltip>}\n >\n <Button key={`btn-${layer.key}-${tooltipId}`} variant=\"light\" size=\"sm\" onClick={handleClick}>\n {icon}\n </Button>\n </OverlayTrigger>\n );\n };\n\n const btnLinkAna = hasAi\n ? createButton(\n FIcons.faPaperclip,\n 'link analysis',\n '_tooltip_link_ana',\n (event) => handleChange(event, id, layer, 'ana-modal')\n )\n : null;\n\n const btnReaction = createButton(\n FIcons.faFlask,\n 'Add reaction',\n '_tooltip_layer_add_reaction',\n (event) => handleChange(event, id, layer, 'layer-add-reaction')\n );\n\n const btnAdd = createButton(\n FIcons.faPlus,\n 'Add layer',\n '_tooltip_add_layer',\n (event) => handleChange(event, id, layer, 'layer-modal')\n );\n\n const btnRemove = createButton(\n FIcons.faMinus,\n isSys ? 'Remove this reaction' : 'Remove layer',\n '_tooltip_remove_layer',\n (event) => handleChange(event, id, layer, 'layer-remove')\n );\n\n const moveIcon = (\n <div className={dndKlz}>\n <div className=\"text-black\">\n <span>{FIcons.faArrowsUpDownLeftRight}</span>\n </div>\n </div>\n );\n const moveDiv = (\n <div\n className={`p-2 m-2 ${className}`}\n ref={(node) => drag(drop(node))}\n onMouseDown={(e) => e.stopPropagation()}\n >\n {moveIcon}\n </div>\n );\n\n const layerHeader = () => {\n const splitKey = key.split('.');\n return (\n splitKey.length > 1 ? <span>{`Repetition ${splitKey[1]}`}</span> : null\n )\n }\n\n const layerWithButton = () => {\n const dateButton = (\n <ButtonGroup key={`${layer.key}-group1`}>\n {GenPropertiesDate({\n isSpCall: false,\n isAtLayer: true,\n label: undefined,\n value: timeRecord || '',\n onChange: onAttrChange,\n readOnly: !editMode,\n })}\n </ButtonGroup>\n );\n if (!editMode) return dateButton;\n const shouldEnableRemove = !wf && (/\\.\\d+$/.test(key) || isSys);\n return (\n <>\n {isSys ? null : dateButton}\n <ButtonGroup className=\"me-2\" key={`${layer.key}-group2`}>\n {btnReaction}\n {btnLinkAna}\n {isSys ? null : btnAdd}\n {shouldEnableRemove ? btnRemove : null}\n </ButtonGroup>\n </>\n );\n };\n\n const accordionDiv = (\n <div className={fbc}>\n <LWf wf={wf} />\n {layerHeader()}\n {layerWithButton()}\n </div>\n );\n\n return <div>{accordionDiv}</div>;\n};\n\nexport default PanelDnD;\n","import { showProperties } from 'generic-ui-core';\n\n/**\n * Determines if a field is effectively visible.\n * A field is visible if:\n * 1. It satisfies its own visible conditions (restriction).\n * 2. AND all fields it depends on are also effectively visible.\n */\nexport const isFieldEffectivelyVisible = (\n field,\n layer,\n allLayers,\n checkedFields = new Set(),\n refElement = null,\n) => {\n const fieldKey = `${layer.key}.${field.field}`;\n if (checkedFields.has(fieldKey)) return [false, field.label];\n checkedFields.add(fieldKey);\n\n const [show, label] = showProperties(field, allLayers, refElement);\n if (!show) return [false, label];\n\n if (field.cond_fields && field.cond_fields.length > 0) {\n for (const cond of field.cond_fields) {\n const depLayer = allLayers[cond.layer];\n if (depLayer) {\n const depField = (depLayer.fields || []).find(\n (f) => f.field === cond.field,\n );\n if (depField) {\n const [depVisible] = isFieldEffectivelyVisible(\n depField,\n depLayer,\n allLayers,\n checkedFields,\n refElement,\n );\n if (!depVisible) {\n return [false, label];\n }\n }\n }\n }\n }\n return [true, label];\n};\n\n/**\n * Check if an item (group or layer) is effectively visible.\n * Return [show, label] where show is a boolean(visible or not) and label is a string(alternative text).\n */\nexport const isItemEffectivelyVisible = (item, allLayers, refElement = null) => {\n let transformedRestriction = item;\n // Transform group restriction to expected format\n if (item.cond && !item.cond_fields) {\n transformedRestriction = {\n cond_fields: item.cond.map((c) => ({\n ...c,\n value: c.eq || c.value,\n })),\n cond_operator: item.op,\n };\n }\n\n const [show, label] = showProperties(transformedRestriction, allLayers, refElement);\n if (!show) return [false, label];\n\n // For groups/layers, also check if the fields they depend on are visible\n if (transformedRestriction.cond_fields) {\n for (const cond of transformedRestriction.cond_fields) {\n const depLayer = allLayers[cond.layer];\n if (depLayer) {\n const depField = (depLayer.fields || []).find(\n (f) => f.field === cond.field,\n );\n if (depField) {\n const [depVisible] = isFieldEffectivelyVisible(\n depField,\n depLayer,\n allLayers,\n new Set(),\n refElement,\n );\n if (!depVisible) {\n return [false, label];\n }\n }\n }\n }\n }\n return [true, label];\n};\n","import { isFieldEffectivelyVisible } from '@utils/template/visibility-handler';\n\n/**\n * Removes any fields that don't exist in the layer or are not valid types\n * Valid types: select fields (always), text fields (only if not readonly)\n */\nexport const validateLabelFields = (labelFields, layerFields) => {\n if (!Array.isArray(labelFields) || !Array.isArray(layerFields)) {\n return [];\n }\n\n const validFieldNames = layerFields\n .filter((field) => {\n if (field.type === 'select') {\n return true;\n }\n if (field.type === 'text') {\n return field.readonly !== true;\n }\n return false;\n })\n .map((field) => field.field);\n\n return labelFields.filter((fieldName) => validFieldNames.includes(fieldName));\n};\n\n/**\n * Updates when a field is removed from the layer\n */\nexport const updateLabelFieldsOnRemoval = (labelFields, removedFieldName) => {\n if (!Array.isArray(labelFields)) {\n return [];\n }\n return labelFields.filter((fieldName) => fieldName !== removedFieldName);\n};\n\n/**\n * Gets available fields for dynamic label (select fields and non-readonly text fields)\n */\nexport const getAvailableFieldsForLabel = (layerFields) => {\n if (!Array.isArray(layerFields)) {\n return [];\n }\n return layerFields.filter((field) => {\n if (field.type === 'select') {\n return true;\n }\n if (field.type === 'text') {\n return field.readonly !== true;\n }\n return false;\n });\n};\n\n/**\n * Computes the layer dynamic display name\n */\nexport const computeDynamicDisplayName = (\n baseLabel,\n labelFields,\n layer,\n allLayers = null,\n fieldValues = {},\n refElement = null,\n) => {\n if (!baseLabel) {\n return '';\n }\n\n if (!Array.isArray(labelFields) || labelFields.length === 0) {\n return baseLabel;\n }\n\n const layerFields = layer?.fields || [];\n const validatedFields = validateLabelFields(labelFields, layerFields);\n\n if (validatedFields.length === 0) {\n return baseLabel;\n }\n\n const fieldParts = validatedFields\n .map((fieldName) => {\n const field = layerFields.find((f) => f.field === fieldName);\n if (!field) return null;\n\n // Check visibility if allLayers is provided\n if (allLayers) {\n const [isVisible] = isFieldEffectivelyVisible(\n field,\n layer,\n allLayers,\n new Set(),\n refElement,\n );\n if (!isVisible) return null;\n }\n\n // Try to get value\n if (fieldValues[fieldName]) {\n return fieldValues[fieldName];\n }\n\n // Otherwise, try to get value from definition\n return field.value || field.default || '';\n })\n .filter((val) => val && val.toString().trim() !== ''); // Skip empty values\n\n if (fieldParts.length === 0) {\n return baseLabel;\n }\n\n return `${baseLabel} - ${fieldParts.join(' - ')}`;\n};\n\n","import React, { createContext, useContext } from 'react';\n\nconst GenInterfaceContext = createContext();\n\nexport const GenInterfaceProvider = ({ children, value }) => {\n return (\n <GenInterfaceContext.Provider value={value}>\n {children}\n </GenInterfaceContext.Provider>\n );\n};\n\nexport const useGenInterfaceContext = () => {\n const context = useContext(GenInterfaceContext);\n if (context === undefined) {\n return { refSource: {} };\n }\n return context;\n};\n\nexport default GenInterfaceContext;\n","/* eslint-disable max-len */\n/* eslint-disable react/require-default-props */\n/* eslint-disable react/forbid-prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Accordion from 'react-bootstrap/Accordion';\nimport Col from 'react-bootstrap/Col';\nimport Row from 'react-bootstrap/Row';\nimport {\n genUnits,\n unitConversion,\n FieldTypes,\n showProperties,\n} from 'generic-ui-core';\nimport GenProperties from '@components/fields/GenProperties';\nimport PanelDnD from '@components/dnd/PanelDnD';\nimport DateTimeRange from '@components/fields/DateTimeRange';\nimport Prop from '@components/designer/template/Prop';\nimport { bgColor } from '@components/tools/format-utils';\nimport { editable } from '@/utils/pureUtils';\nimport { computeDynamicDisplayName } from '@utils/template/label-handler';\nimport { isFieldEffectivelyVisible } from '@utils/template/visibility-handler';\nimport GenInterfaceContext from '@components/details/GenInterfaceContext';\n\nexport default class GenPropertiesLayer extends Component {\n static contextType = GenInterfaceContext;\n\n constructor(props) {\n super(props);\n this.handleChange = this.handleChange.bind(this);\n this.handleSubChange = this.handleSubChange.bind(this);\n this.handleDTRChange = this.handleDTRChange.bind(this);\n this.moveLayer = this.moveLayer.bind(this);\n }\n\n handleChange(e, f, k, t) {\n const { onChange } = this.props;\n onChange(e, f, k, t);\n }\n\n handleSubChange(e, id, f, valueOnly = false) {\n const { onSubChange } = this.props;\n const sub = f.sub_fields.find((m) => m.id === id);\n if (!valueOnly) {\n if (e.type === FieldTypes.F_SYSTEM_DEFINED) {\n const units = genUnits(e.option_layers);\n let uIdx = units.findIndex((u) => u.key === e.value_system);\n if (uIdx < units.length - 1) uIdx += 1;\n else uIdx = 0;\n sub.value_system = units.length > 0 ? units[uIdx].key : '';\n sub.value = unitConversion(e.option_layers, sub.value_system, e.value);\n } else {\n sub.value = e.target.value;\n }\n }\n const { layer } = this.props;\n const obj = { f, sub };\n onSubChange(layer.key, obj, valueOnly);\n }\n\n handleDTRChange(params) {\n const { field, layer, subFields, type } = params;\n // event, field, layer, type = 'text'\n this.handleChange(subFields, field, layer, type);\n }\n\n handleClick(keyLayer, obj, val) {\n const { onClick } = this.props;\n const units = genUnits(obj.option_layers);\n let uIdx = units.findIndex((e) => e.key === val);\n if (uIdx < units.length - 1) uIdx += 1;\n else uIdx = 0;\n const update = obj;\n update.value_system = units.length > 0 ? units[uIdx].key : '';\n onClick(keyLayer, update);\n }\n\n views() {\n const {\n layer,\n selectOptions,\n id,\n layers,\n classStr,\n isPreview,\n isSearch,\n onNavi,\n isSpCall,\n editMode,\n genericType,\n } = this.props;\n const { fields, key, sp } = layer;\n let { cols } = layer;\n\n // TODO: review isSpCall scenarios\n if (isSpCall && !!sp) cols = 1;\n\n // layer level settings\n let perRow = cols || 1;\n let colWidth = Math.floor(12 / perRow);\n\n const vs = [];\n let op = [];\n let remainingWidth = 12;\n let columnCount = 0; // Add counter to track columns in current row\n\n const { refSource } = this.context;\n\n (fields || []).forEach((f, idx) => {\n const [showProp, showLabel] = isFieldEffectivelyVisible(f, layer, layers, new Set(), refSource?.element);\n if (showProp) {\n let fieldWidth;\n\n if (f.type === FieldTypes.F_DATETIME_RANGE) {\n // If there are fields in the current row, push them to the rows array\n if (op.length > 0) {\n vs.push(<Row key={`${key}_${vs.length}`}>{op}</Row>);\n op = [];\n remainingWidth = 12;\n }\n vs.push(\n <DateTimeRange\n key={`${key}_${vs.length}`}\n layer={layer}\n opt={{ f_obj: f }}\n onInputChange={this.handleDTRChange}\n editMode={editMode}\n />,\n );\n columnCount = 0;\n return;\n }\n if (f.hasOwnRow) {\n // If there are fields in the current row, push them to the rows array\n if (op.length > 0) {\n vs.push(<Row key={`${key}_${vs.length}`}>{op}</Row>);\n op = [];\n remainingWidth = 12;\n }\n fieldWidth = 12;\n columnCount = 0;\n } else if (f.type === FieldTypes.F_TABLE) {\n fieldWidth = 12 / (f.cols || 1);\n columnCount = 0;\n } else {\n // field level settings\n perRow = f.cols || perRow;\n colWidth = Math.floor(12 / perRow);\n fieldWidth = colWidth;\n }\n\n if ((perRow === 5 && columnCount >= 5) || remainingWidth < fieldWidth) {\n vs.push(<Row key={`${key}_${vs.length}`}>{op}</Row>);\n op = [];\n remainingWidth = 12;\n columnCount = 0;\n }\n\n const unit = genUnits(f.option_layers)[0] || {};\n const cls =\n perRow === 5 &&\n ![FieldTypes.F_TABLE, FieldTypes.F_DATETIME_RANGE].includes(f.type) &&\n !f.hasOwnRow\n ? 'g_col_w'\n : '';\n\n op.push(\n <Col\n key={`prop_${key}_${f.priority}_${f.field}`}\n md={fieldWidth}\n lg={fieldWidth}\n className={cls}\n >\n <GenProperties\n key={`${id}_${layer}_${f.field}_GenPropertiesLayer`}\n layers={layers}\n id={id}\n layer={layer}\n classStr={classStr || ''}\n f_obj={f}\n label={showLabel || f.label}\n value={f.value || ''}\n description={f.description || ''}\n type={f.type || FieldTypes.F_TEXT}\n field={f.field || 'field'}\n formula={f.formula || ''}\n options={\n (selectOptions &&\n selectOptions[f.option_layers] &&\n selectOptions[f.option_layers].options) ||\n []\n }\n onChange={(event) =>\n this.handleChange(event, f.field, key, f.type)\n }\n onSubChange={this.handleSubChange}\n isEditable={editable(editMode, !(f.readonly ?? false))}\n isPreview={isPreview}\n isSearch={isSearch}\n readOnly={!editable(editMode, !(f.readonly ?? false))}\n isRequired={f.required || false}\n placeholder={f.placeholder || ''}\n option_layers={f.option_layers}\n value_system={f.value_system || unit.key}\n onClick={() =>\n this.handleClick(key, f, f.value_system || unit.key)\n }\n selectOptions={selectOptions || {}}\n onNavi={onNavi}\n isSpCall={isSpCall}\n genericType={genericType}\n />\n </Col>,\n );\n\n remainingWidth -= fieldWidth;\n columnCount += 1;\n\n if (\n fieldWidth === 12 ||\n idx === fields.length - 1 ||\n (perRow === 5 && columnCount >= 5)\n ) {\n vs.push(<Row key={`${key}_${vs.length}`}>{op}</Row>);\n op = [];\n remainingWidth = 12;\n columnCount = 0;\n }\n }\n });\n\n if (op.length > 0) {\n vs.push(<Row key={`${key}_${vs.length}`}>{op}</Row>);\n }\n return vs;\n }\n\n moveLayer(src, tar) {\n this.handleChange(null, src, tar, 'drop-layer');\n }\n\n render() {\n const {\n id,\n layer,\n layers,\n activeWF,\n hasAi,\n aiComp,\n expandAll,\n editMode,\n grouped,\n groups,\n } = this.props;\n const { color = 'default', style, label } = layer;\n // const ai = layer.ai || [];\n\n const { refSource } = this.context;\n\n // Compute dynamic display name\n const displayName = computeDynamicDisplayName(\n label,\n layer.label_fields || [],\n layer,\n layers,\n {},\n refSource?.element,\n );\n\n const bgColorClass = bgColor(color);\n let klz = style || 'panel_generic_heading';\n klz = ['lu-bg-light', 'lu-bg-white'].includes(bgColorClass)\n ? `${klz} text-dark`\n : `${klz} text-white`;\n // panel header color is based on input bs value\n const panelDnD = (\n <PanelDnD\n type=\"gen_panel\"\n layer={layer}\n field=\"layer\"\n rowValue={{ id: layer.key }}\n handleMove={this.moveLayer}\n id={id}\n handleChange={this.handleChange}\n onAttrChange={(event) =>\n this.handleChange(event, 'timeRecord', layer, 'layer-data-change')\n }\n hasAi={hasAi}\n editMode={editMode}\n grouped={grouped}\n />\n );\n const panelHeader = (\n <Accordion.Header\n as=\"div\"\n className={`custom-accordion-header ${bgColorClass} flex-grow-1`}\n >\n {displayName === '' ? (\n <span className={klz}>&nbsp;</span>\n ) : (\n <span className={klz}>{displayName}</span>\n )}\n </Accordion.Header>\n );\n // const panelDiv = (\n // <div className=\"flex-grow-1\">\n // {label === '' ? <span /> : <span className={klz}>{label}</span>}\n // </div>\n // );\n\n const newPanel = (\n <Prop\n key={`_usr_prop_content_${layer.key}`}\n dnd={activeWF ? panelDnD : undefined}\n layerKey={layer.key}\n propHeader={panelHeader}\n extClass={bgColorClass}\n layers={layers}\n expandAll={expandAll}\n groups={groups}\n >\n {this.views()}\n {aiComp && aiComp[layer.key]}\n </Prop>\n );\n\n return newPanel;\n }\n}\n\nGenPropertiesLayer.propTypes = {\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), // element id or new id\n layer: PropTypes.object,\n selectOptions: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n onSubChange: PropTypes.func.isRequired,\n onClick: PropTypes.func,\n classStr: PropTypes.string,\n layers: PropTypes.object.isRequired,\n isPreview: PropTypes.bool,\n isSearch: PropTypes.bool,\n activeWF: PropTypes.bool,\n isSpCall: PropTypes.bool,\n onNavi: PropTypes.func,\n hasAi: PropTypes.bool,\n aiComp: PropTypes.any,\n expandAll: PropTypes.bool,\n editMode: PropTypes.bool.isRequired,\n genericType: PropTypes.string.isRequired,\n grouped: PropTypes.bool.isRequired,\n groups: PropTypes.array,\n};\n\nGenPropertiesLayer.defaultProps = {\n id: 0,\n selectOptions: {},\n onClick: () => {},\n isPreview: false,\n classStr: '',\n isSearch: false,\n activeWF: false,\n isSpCall: false,\n onNavi: () => {},\n hasAi: false,\n aiComp: null,\n expandAll: undefined,\n groups: [],\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Card, Badge, Collapse } from 'react-bootstrap';\nimport GenPropertiesLayer from '@components/layers/GenPropertiesLayer';\nimport FIcons from '@components/icons/FIcons';\nimport ConditionView from '@components/designer/template/ConditionView';\nimport { isItemEffectivelyVisible } from '@utils/template/visibility-handler';\nimport { useGenInterfaceContext } from '@components/details/GenInterfaceContext';\nimport { isFirstLayer } from '@components/details/handler';\n\n/**\n * Renders a group of layers with optional restrictions\n */\nfunction GenPropertiesGroup({\n groupId,\n groupLabel,\n groupLayers,\n restriction,\n allLayers,\n id,\n classStr,\n onChange,\n onSubChange,\n selectOptions,\n onClick,\n isPreview,\n isSearch,\n activeWF,\n onNavi,\n isSpCall,\n hasAi,\n aiComp,\n expandAll,\n editMode,\n genericType,\n groups,\n}) {\n const { refSource } = useGenInterfaceContext();\n const [isInitialExpansion, setIsInitialExpansion] = useState(true);\n const [expanded, setExpanded] = useState(() => {\n if (expandAll != null) {\n return expandAll;\n }\n // Check if any layer in the group is the first layer\n const hasFirstLayer = (groupLayers || []).some((layer) =>\n isFirstLayer(allLayers, layer.key, groups),\n );\n return hasFirstLayer;\n });\n const [showRestrictions, setShowRestrictions] = useState(false);\n\n const hasRestrictions =\n restriction && restriction.cond && restriction.cond.length > 0;\n\n // Transform restriction format if needed\n const transformedRestriction = hasRestrictions\n ? {\n cond_fields: restriction.cond.map((c) => ({\n ...c,\n value: c.eq || c.value,\n })),\n cond_operator: restriction.op,\n }\n : null;\n\n // Sort layers by position within the group (use array order from metadata)\n const sortedLayers = groupLayers || [];\n\n // Determine effective expandAll for child layers\n let effectiveExpandAll = expandAll;\n if (effectiveExpandAll === undefined) {\n if (!isInitialExpansion) {\n effectiveExpandAll = false;\n }\n }\n\n // Render layers considering their conditions\n const layerElements = sortedLayers\n .map((layer, idx) => {\n const uk = `${groupId}_${layer.key}_${idx}`;\n\n // Check if layer should be shown based on its conditions\n if (\n typeof layer.cond_fields === 'undefined' ||\n layer.cond_fields == null ||\n layer.cond_fields.length === 0\n ) {\n return (\n <GenPropertiesLayer\n id={id}\n key={uk}\n layer={layer}\n classStr={classStr || ''}\n onChange={onChange}\n onSubChange={onSubChange}\n selectOptions={selectOptions}\n onClick={onClick}\n layers={allLayers}\n isPreview={isPreview}\n isSearch={isSearch}\n activeWF={activeWF}\n onNavi={onNavi}\n isSpCall={isSpCall}\n hasAi={hasAi}\n aiComp={aiComp}\n expandAll={effectiveExpandAll}\n editMode={editMode}\n genericType={genericType}\n grouped\n groups={groups}\n />\n );\n }\n\n // Layer has conditions, check if it should be shown\n const [showLayer] = isItemEffectivelyVisible(layer, allLayers, refSource?.element);\n if (showLayer) {\n return (\n <GenPropertiesLayer\n id={id}\n key={uk}\n layer={layer}\n classStr={classStr || ''}\n onChange={onChange}\n onSubChange={onSubChange}\n selectOptions={selectOptions}\n onClick={onClick}\n layers={allLayers}\n isPreview={isPreview}\n isSearch={isSearch}\n activeWF={activeWF}\n onNavi={onNavi}\n isSpCall={isSpCall}\n hasAi={hasAi}\n aiComp={aiComp}\n expandAll={effectiveExpandAll}\n editMode={editMode}\n genericType={genericType}\n grouped\n groups={groups}\n />\n );\n }\n\n return null;\n })\n .filter(Boolean);\n\n return (\n <Card className=\"mb-3 border-2 border-info\" id={`group-anchor-${groupId}`}>\n <Card.Header\n className=\"d-flex align-items-center justify-content-between cursor-pointer\"\n onClick={() => {\n setExpanded(!expanded);\n setIsInitialExpansion(false);\n }}\n style={{ cursor: 'pointer' }}\n >\n <div className=\"d-flex align-items-center\">\n <Badge bg=\"info\" className=\"me-2\">\n {FIcons.faLayerGroup}\n </Badge>\n <strong className=\"text-info\">{groupLabel}</strong>\n <span className=\"ms-2 text-muted small\">\n ({groupLayers.length} layer{groupLayers.length !== 1 ? 's' : ''})\n </span>\n </div>\n <div className=\"d-flex align-items-center\">\n {hasRestrictions && (\n <Badge\n bg=\"secondary\"\n className=\"me-2 cursor-pointer\"\n onClick={(e) => {\n e.stopPropagation();\n setShowRestrictions(!showRestrictions);\n }}\n style={{ cursor: 'pointer' }}\n >\n {FIcons.faGears} {showRestrictions ? 'Hide' : 'Show'} Restrictions\n </Badge>\n )}\n <span className=\"text-muted\">\n {expanded ? FIcons.faChevronUp : FIcons.faChevronDown}\n </span>\n </div>\n </Card.Header>\n {showRestrictions && hasRestrictions && transformedRestriction && (\n <Card.Body className=\"border-bottom bg-light py-2\">\n <ConditionView\n conditions={transformedRestriction}\n layers={allLayers}\n />\n </Card.Body>\n )}\n <Collapse in={expanded} unmountOnExit>\n <Card.Body className=\"p-2\">\n {layerElements.length > 0 ? (\n layerElements\n ) : (\n <div className=\"text-muted text-center py-3\">\n No layers to display in this group\n </div>\n )}\n </Card.Body>\n </Collapse>\n </Card>\n );\n}\n\nGenPropertiesGroup.propTypes = {\n groupId: PropTypes.string.isRequired,\n groupLabel: PropTypes.string.isRequired,\n groupLayers: PropTypes.array.isRequired,\n restriction: PropTypes.object,\n allLayers: PropTypes.object.isRequired,\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n classStr: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n onSubChange: PropTypes.func.isRequired,\n selectOptions: PropTypes.object,\n onClick: PropTypes.func,\n isPreview: PropTypes.bool,\n isSearch: PropTypes.bool,\n activeWF: PropTypes.bool,\n onNavi: PropTypes.func,\n isSpCall: PropTypes.bool,\n hasAi: PropTypes.bool,\n aiComp: PropTypes.object,\n expandAll: PropTypes.bool,\n editMode: PropTypes.bool,\n genericType: PropTypes.string,\n groups: PropTypes.array,\n};\n\nGenPropertiesGroup.defaultProps = {\n groups: [],\n};\n\nexport default GenPropertiesGroup;\n","import React from 'react';\nimport GenPropertiesLayer from '@components/layers/GenPropertiesLayer';\nimport GenPropertiesGroup from '@components/layers/GenPropertiesGroup';\nimport GenProperties from '@components/fields/GenProperties';\nimport { organizeLayersForDisplay } from '@utils/template/group-handler';\nimport { isItemEffectivelyVisible } from '@utils/template/visibility-handler';\nimport { editable } from '@/utils/pureUtils';\nimport { useGenInterfaceContext } from '@components/details/GenInterfaceContext';\n\nconst LayersLayout = (props) => {\n const {\n generic,\n // layers,\n // options,\n funcChange,\n funcSubChange,\n funcClick,\n // classStr,\n extLys,\n id,\n isPreview,\n activeWF,\n isSearch,\n fnNavi,\n isSpCall,\n hasAi,\n aiComp,\n expandAll,\n editMode,\n genericType,\n } = props;\n\n const { refSource } = useGenInterfaceContext();\n\n const layers = generic.properties?.layers || {};\n const options = generic.properties_release?.select_options || {};\n const classStr = generic?.short_label || '';\n const metadata = generic.metadata || {};\n const groups = metadata.groups || [];\n const restrictions = metadata.restrict || {};\n\n // if call from SP, extra layer is impossible\n const buildExtLys = isSpCall\n ? []\n : extLys.map((e) => (\n <GenProperties\n key={`${e.generic.id}_${e.field}_elementalPropertiesExt`}\n field={e.field}\n label=\"Name\"\n classStr={classStr || ''}\n description={e.generic.description || ''}\n value={e.generic[e.field] || ''}\n type={e.type}\n isEditable={editable(editMode, true)}\n readOnly={!editable(editMode, true)}\n isRequired={e.isRequired || false}\n onChange={(event) => funcChange(event, e.field, '', e.type)}\n genericType={genericType}\n />\n ));\n\n const layout = [].concat(\n <div className=\"pb-3\" key=\"ext-layers\">\n {buildExtLys}\n </div>,\n );\n\n // Get organized display items\n const displayItems = organizeLayersForDisplay(layers, groups);\n\n const layerProps = {\n id,\n classStr: classStr || '',\n onChange: funcChange,\n onSubChange: funcSubChange,\n selectOptions: options,\n onClick: funcClick,\n layers: layers,\n isPreview,\n isSearch,\n activeWF,\n onNavi: fnNavi,\n isSpCall,\n hasAi,\n aiComp,\n expandAll,\n editMode: editable(editMode, true),\n genericType,\n groups,\n };\n\n displayItems.forEach((item, idx) => {\n if (item.type === 'group') {\n // Render grouped layers\n const groupLayers = item.layers.map((layer) => layer.data);\n\n // Skip if all layers in group should be hidden due to SP call\n if (isSpCall && groupLayers.every((layer) => !layer.sp)) return;\n\n // Filter layers for SP call\n const filteredGroupLayers = isSpCall\n ? groupLayers.filter((layer) => layer.sp)\n : groupLayers;\n\n if (filteredGroupLayers.length === 0) return;\n\n // Check if group should be shown based on its restrictions\n const groupRestriction = restrictions[item.id];\n if (\n groupRestriction &&\n groupRestriction.cond &&\n groupRestriction.cond.length > 0\n ) {\n // Transform restriction format to expected format\n const transformedRestriction = {\n cond_fields: groupRestriction.cond.map((c) => ({\n ...c,\n value: c.eq || c.value,\n })),\n cond_operator: groupRestriction.op,\n };\n\n const [showGroup] = isItemEffectivelyVisible(transformedRestriction, layers, refSource?.element);\n if (!showGroup) return; // Skip this group if conditions are not met\n }\n\n const groupElement = (\n <GenPropertiesGroup\n key={`group-${item.id}-${idx}`}\n groupId={item.id}\n groupLabel={item.label}\n groupLayers={filteredGroupLayers}\n restriction={restrictions[item.id]}\n allLayers={layers}\n {...layerProps}\n />\n );\n layout.push(groupElement);\n } else {\n // Render individual ungrouped layer\n const layer = item.data;\n\n // if call from SP and layer is not sp, skip\n if (isSpCall && !layer.sp) return;\n\n const uk = `${layer.key}_${idx}`;\n\n if (\n typeof layer.cond_fields === 'undefined' ||\n layer.cond_fields == null ||\n layer.cond_fields.length === 0\n ) {\n const ig = (\n <GenPropertiesLayer key={uk} layer={layer} grouped={false} {...layerProps} />\n );\n layout.push(ig);\n } else if (layer?.cond_fields?.length > 0) {\n const [showLayer] = isItemEffectivelyVisible(layer, layers, refSource?.element);\n if (showLayer) {\n const igs = (\n <GenPropertiesLayer key={uk} layer={layer} grouped={false} {...layerProps} />\n );\n layout.push(igs);\n }\n }\n }\n });\n\n return layout;\n};\n\nexport default LayersLayout;\n","import React, { createContext, useContext, useState } from 'react';\nimport PropTypes from 'prop-types';\n\nconst GenUIContext = createContext();\n\nexport const GenUIProvider = ({ children, initialShowOverview = true }) => {\n const [showOverview, setShowOverview] = useState(initialShowOverview);\n\n const toggleOverview = () => setShowOverview((prev) => !prev);\n\n const value = {\n showOverview,\n setShowOverview,\n toggleOverview,\n isProviderPresent: true,\n };\n\n return (\n <GenUIContext.Provider value={value}>\n {children}\n </GenUIContext.Provider>\n );\n};\n\nGenUIProvider.propTypes = {\n children: PropTypes.node.isRequired,\n initialShowOverview: PropTypes.bool,\n};\n\nexport const useGenUIContext = () => {\n const context = useContext(GenUIContext);\n // Fallback to default values if not wrapped in Provider to ensure stability\n if (!context) {\n return {\n showOverview: false,\n setShowOverview: () => console.warn('useGenUIContext must be used within a GenUIProvider'),\n toggleOverview: () => console.warn('useGenUIContext must be used within a GenUIProvider'),\n isProviderPresent: false,\n };\n }\n return context;\n};\n\nexport default GenUIContext;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\n/**\n * A progress bar that uses dots/circles to indicate progress.\n */\nconst DotProgressBar = ({\n now,\n maxDots = 10,\n variant = 'primary',\n shape = 'dot',\n className = '',\n}) => {\n const filledDots = Math.round((now / 100) * maxDots);\n const dots = Array.from({ length: maxDots });\n\n const getDotClass = (index) => {\n const isFilled = index < filledDots;\n return `lu_dot ${isFilled ? 'filled' : 'empty'} variant-${variant} shape-${shape}`;\n };\n\n return (\n <div className={`lu_dot-progress-container ${className}`}>\n {dots.map((_, i) => (\n <div key={i} className={getDotClass(i)} />\n ))}\n </div>\n );\n};\n\nDotProgressBar.propTypes = {\n now: PropTypes.number.isRequired,\n maxDots: PropTypes.number,\n variant: PropTypes.string,\n shape: PropTypes.oneOf(['dot', 'square']),\n className: PropTypes.string,\n};\n\nexport default DotProgressBar;\n","import { FieldTypes } from 'generic-ui-core';\nimport { isFieldEffectivelyVisible } from '@utils/template/visibility-handler';\n\n/**\n * Checks if a value is effectively filled (not empty string, null, or undefined).\n */\nconst hasValue = (v) => v !== '' && v !== null && v !== undefined;\n\n/**\n * Type-specific handlers for determining if a field is filled.\n */\nconst FILL_HANDLERS = {\n // Always filled types\n [FieldTypes.F_CHECKBOX]: () => true,\n [FieldTypes.F_TEXT_FORMULA]: () => true,\n\n // Simple value types\n [FieldTypes.F_TEXT]: (f) => f.readonly === true || hasValue(f.value),\n\n // Container types\n [FieldTypes.F_TABLE]: (f) =>\n Array.isArray(f.sub_values) &&\n f.sub_values.length > 0 &&\n typeof f.sub_values[0] === 'object' &&\n f.sub_values[0] !== null,\n\n [FieldTypes.F_DATETIME_RANGE]: ({ sub_fields: sf }) =>\n Array.isArray(sf) &&\n sf.length >= 4 &&\n hasValue(sf[0]?.value) &&\n hasValue(sf[1]?.value) &&\n hasValue(sf[3]?.value),\n\n [FieldTypes.F_INPUT_GROUP]: ({ sub_fields: sf }) =>\n Array.isArray(sf) &&\n sf.length > 0 &&\n sf.every((sub) => sub.type === FieldTypes.F_LABEL || hasValue(sub.value)),\n\n [FieldTypes.F_SELECT_MULTI]: ({ sub_fields: sf }) =>\n Array.isArray(sf) && sf.some((sub) => hasValue(sub.value)),\n\n // Nested property types (drag & upload)\n [FieldTypes.F_DRAG_ELEMENT]: ({ value: v }) =>\n v && typeof v === 'object' && hasValue(v.el_id),\n [FieldTypes.F_DRAG_MOLECULE]: ({ value: v }) =>\n v && typeof v === 'object' && hasValue(v.el_id),\n [FieldTypes.F_DRAG_SAMPLE]: ({ value: v }) =>\n v && typeof v === 'object' && hasValue(v.el_id),\n\n [FieldTypes.F_UPLOAD]: ({ value: v }) =>\n v && typeof v === 'object' && Array.isArray(v.files) && v.files.length > 0,\n};\n\n/**\n * Determines if a field is considered \"filled\" based on its type and configuration.\n */\nconst isFieldFilled = (field) => {\n const handler = FILL_HANDLERS[field.type];\n if (handler) return handler(field);\n\n // Default fallback for generic fields\n return hasValue(field.value);\n};\n\n/**\n * Calculates the completion percentage of a layer based on its visible fields.\n * completion = (fields with values) / (total visible fields)\n */\nexport const calculateLayerCompletion = (\n layer,\n allLayers,\n refElement = null,\n) => {\n const fields = layer.fields || [];\n if (fields.length === 0) return 100;\n\n // 1. Identify all fields that are actually visible\n const visibleFields = fields.filter((field) => {\n const [isVisible] = isFieldEffectivelyVisible(\n field,\n layer,\n allLayers,\n new Set(),\n refElement,\n );\n return isVisible;\n });\n\n const visibleCount = visibleFields.length;\n if (visibleCount === 0) return 100;\n\n // 2. Count how many of the visible fields are filled\n const filledCount = visibleFields.filter(isFieldFilled).length;\n\n return Math.round((filledCount / visibleCount) * 100);\n};\n\n/**\n * Calculates the completion percentage of a group based on its layers.\n */\nexport const calculateGroupCompletion = (\n groupLayers,\n allLayers,\n refElement = null,\n) => {\n if (groupLayers.length === 0) return 0;\n\n const totalCompletion = groupLayers.reduce((acc, layer) => {\n return acc + calculateLayerCompletion(layer, allLayers, refElement);\n }, 0);\n\n return Math.round(totalCompletion / groupLayers.length);\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Card, Button, Row, Col } from 'react-bootstrap';\nimport FIcons from '@components/icons/FIcons';\nimport DotProgressBar from '@components/shared/DotProgressBar';\nimport {\n organizeLayersForDisplay\n} from '@utils/template/group-handler';\nimport {\n calculateLayerCompletion,\n calculateGroupCompletion,\n} from '@utils/template/flow-handler';\nimport {\n isItemEffectivelyVisible\n} from '@utils/template/visibility-handler';\n\nconst ProgressOverview = ({ generic, onNodeJump, refElement }) => {\n const { properties, metadata = {} } = generic;\n const layers = properties?.layers || {};\n const groups = metadata.groups || [];\n const restrictions = metadata.restrict || {};\n const [expandedGroups, setExpandedGroups] = useState(new Set());\n\n const toggleExpand = (groupId) => {\n setExpandedGroups(prev => {\n const next = new Set(prev);\n if (next.has(groupId)) next.delete(groupId);\n else next.add(groupId);\n return next;\n });\n };\n\n const displayItems = organizeLayersForDisplay(layers, groups);\n\n const visibleItems = displayItems.filter(item => {\n const isGroup = item.type === 'group';\n const restriction = isGroup ? (restrictions[item.id] || {}) : item.data;\n const [isVisible] = isItemEffectivelyVisible(restriction, layers, refElement);\n return isVisible;\n });\n\n const renderCard = (item, isSubLayer = false) => {\n const isGroup = item.type === 'group';\n\n const completion = isGroup\n ? calculateGroupCompletion(item.layers.map(l => l.data), layers, refElement)\n : calculateLayerCompletion(item.data, layers, refElement);\n\n const isExpanded = expandedGroups.has(item.id);\n const variant = completion === 100 ? 'success' : completion > 50 ? 'warning' : 'danger';\n\n return (\n <Card\n key={isGroup ? `group-${item.id}` : `layer-${item.key}`}\n className={`mb-2 shadow-sm ${isSubLayer ? 'ms-3 border-start-0 bg-light' : ''}`}\n style={{ fontSize: '0.85rem', borderColor: isGroup ? '#5bc0de' : '#dee2e6', borderLeftWidth: isGroup ? '4px' : '1px' }}\n >\n <Card.Body className=\"p-2\">\n <div className=\"d-flex justify-content-between align-items-center mb-1\">\n <div className=\"d-flex align-items-center text-truncate pe-2\">\n {isGroup && (\n <span className=\"me-2 text-info\" style={{ fontSize: '0.9rem', minWidth: '16px' }}>\n {FIcons.faLayerGroup}\n </span>\n )}\n <span className={`fw-bold text-truncate ${!isGroup ? 'ps-1' : ''}`} title={isGroup ? item.label : (item.data.label || item.key)}>\n {isGroup ? item.label : (item.data.label || item.key)}\n </span>\n </div>\n <div className=\"d-flex align-items-center flex-shrink-0\">\n <Button\n variant=\"light\"\n size=\"sm\"\n className=\"p-0 px-1 me-1\"\n title=\"Go to section\"\n onClick={() => onNodeJump(isGroup ? item.id : item.key, isGroup)}\n >\n {FIcons.faArrowDown}\n </Button>\n {isGroup && (\n <Button\n variant=\"primary\"\n size=\"sm\"\n className=\"p-0 px-1\"\n title={isExpanded ? 'Collapse' : 'Expand'}\n onClick={() => toggleExpand(item.id)}\n >\n {isExpanded ? FIcons.faMinus : FIcons.faPlus}\n </Button>\n )}\n </div>\n </div>\n\n <div className=\"px-1\">\n <div className=\"small text-muted mb-1\" style={{ fontSize: '0.7rem' }}>Completion</div>\n <div className=\"d-flex align-items-center\">\n <DotProgressBar\n now={completion}\n variant={variant}\n className=\"me-2\"\n shape=\"square\"\n />\n <span className=\"small text-muted fw-bold\" style={{ minWidth: '35px', textAlign: 'right', fontSize: '0.75rem' }}>\n {completion}%\n </span>\n </div>\n </div>\n\n {isGroup && isExpanded && (\n <div className=\"mt-2 border-top pt-2\">\n {item.layers\n .filter(layerItem => {\n const [isVisible] = isItemEffectivelyVisible(layerItem.data, layers, refElement);\n return isVisible;\n })\n .map(layerItem => renderCard({ ...layerItem, type: 'layer' }, true))\n }\n </div>\n )}\n </Card.Body>\n </Card>\n );\n };\n\n return (\n <div className=\"prog-overview-dashboard\">\n <div className=\"d-flex align-items-center mb-3 bg-white\" style={{ lineHeight: 1 }}>\n <span className=\"me-2 d-flex align-items-center\" style={{ fontSize: '1.1rem', transform: 'translateY(-1px)' }}>\n {FIcons.faChartBar}\n </span>\n <div className=\"fw-bold uppercase tracking-wider\" style={{ fontSize: '0.85rem', letterSpacing: '0.05rem' }}>\n OVERVIEW MAP\n </div>\n </div>\n <Row xs={1} md={2} lg={3} xl={4} className=\"g-2\">\n {visibleItems.map(item => (\n <Col key={item.type === 'group' ? `col-group-${item.id}` : `col-layer-${item.key}`}>\n {renderCard(item)}\n </Col>\n ))}\n </Row>\n </div>\n );\n};\n\nProgressOverview.propTypes = {\n generic: PropTypes.object.isRequired,\n onNodeJump: PropTypes.func.isRequired,\n refElement: PropTypes.object,\n};\n\nexport default ProgressOverview;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useGenUIContext } from '@components/details/GenUIContext';\nimport ProgressOverview from '@components/flow/ProgressOverview';\n\nconst ProgressFlowWrapper = ({ generic, refElement }) => {\n const { showOverview, isProviderPresent } = useGenUIContext();\n\n const handleNodeJump = (key, isGroup) => {\n const doJump = (targetId) => {\n const element = document.getElementById(targetId);\n if (element) {\n element.scrollIntoView({ behavior: 'smooth', block: 'start' });\n\n // Temporary highlight effect\n element.classList.add('lu_jump-highlight');\n setTimeout(() => {\n element.classList.remove('lu_jump-highlight');\n }, 4000);\n return true;\n }\n return false;\n };\n\n const layerAnchorId = `_accordion_design_props_${key}`;\n const groupAnchorId = `group-anchor-${key}`;\n\n if (isGroup) {\n doJump(groupAnchorId);\n } else {\n // If jumping to a layer, check if we're inside a collapsed group\n const layerElement = document.getElementById(layerAnchorId);\n\n if (layerElement) {\n // Layer is visible, just jump\n doJump(layerAnchorId);\n } else {\n // Layer not found, might be inside a collapsed group\n const groups = generic.metadata?.groups || [];\n const parentGroup = groups.find(g => (g.layers || []).includes(key));\n\n if (parentGroup) {\n const groupHeader = document.querySelector(`#group-anchor-${parentGroup.id} .card-header`);\n if (groupHeader) {\n // Trigger click to expand\n groupHeader.click();\n\n // Wait for React to render the newly visible layers\n setTimeout(() => {\n doJump(layerAnchorId);\n }, 100);\n }\n } else {\n // No parent group, but still not found? Fallback to just trying\n doJump(layerAnchorId);\n }\n }\n }\n };\n\n const hasLayers = Object.keys(generic.properties?.layers || {}).length > 0;\n\n if (!hasLayers) return null;\n\n return (\n <>\n {isProviderPresent && showOverview && (\n <div className=\"mb-4\">\n <ProgressOverview\n generic={generic}\n onNodeJump={handleNodeJump}\n refElement={refElement}\n />\n </div>\n )}\n </>\n );\n};\n\nProgressFlowWrapper.propTypes = {\n generic: PropTypes.object.isRequired,\n refElement: PropTypes.object,\n};\n\nexport default ProgressFlowWrapper;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, Card } from 'react-bootstrap';\nimport sortBy from 'lodash/sortBy';\nimport FIcons from '@components/icons/FIcons';\n\nconst block = (layer, fnAdd, isEnabled) => (\n <Card key={layer.key} className=\"shadow-sm\" style={{ width: '100%' }}>\n <Card.Body className=\"d-flex justify-content-between align-items-center p-3\">\n <div>\n <Card.Title className=\"h6 mb-0\">\n {layer.label}\n <span className=\"text-muted small me-2 fw-normal\">\n {' '}\n ({layer.key})\n </span>\n </Card.Title>\n </div>\n <span\n title={isEnabled ? 'Add this layer' : 'This layer cannot be added'}\n style={{ cursor: isEnabled ? 'pointer' : 'not-allowed' }}\n >\n <Button\n size=\"sm\"\n variant={isEnabled ? 'primary' : 'secondary'}\n onClick={(event) => fnAdd(event, layer)}\n disabled={!isEnabled}\n >\n {FIcons.faPlus} Add\n </Button>\n </span>\n </Card.Body>\n </Card>\n);\n\nfunction LayerModal(props) {\n const { show, generic, fnClose, fnAdd, selectedLayerKey } = props;\n if (!show) return null;\n\n const layers = generic.properties_release?.layers || {};\n const metadata = generic.metadata || {};\n\n const layerValues = Object.values(layers);\n if (layerValues.length < 1) return null;\n\n // Organize layers by groups - creates a mixed list of groups and ungrouped layers\n const organizeLayersByGroups = (layersObj, groupMetadata) => {\n const groups = groupMetadata.groups || [];\n const allLayers = Object.values(layersObj);\n\n // Get layers that belong to groups\n const groupedLayersSet = new Set();\n groups.forEach((group) => {\n group.layers?.forEach((layerKey) => groupedLayersSet.add(layerKey));\n });\n\n // Get ungrouped layers\n const ungroupedLayers = allLayers.filter(\n (layer) => !groupedLayersSet.has(layer.key),\n );\n\n // Create a mixed array of groups and ungrouped layers, sorted by position\n const items = [\n ...groups.map((group) => ({\n type: 'group',\n data: group,\n position: group.position || 0,\n })),\n ...ungroupedLayers.map((layer) => ({\n type: 'layer',\n data: layer,\n position: layer.position || 0,\n })),\n ];\n\n const sortedItems = sortBy(items, 'position');\n\n return {\n items: sortedItems,\n allLayers: layersObj,\n };\n };\n\n const organized = organizeLayersByGroups(layers, metadata);\n\n const isSelectedGrouped = (metadata.groups || []).some((group) =>\n group.layers?.includes(selectedLayerKey),\n );\n let selectedGroupId = null;\n if (isSelectedGrouped) {\n selectedGroupId = (metadata.groups || []).find((group) =>\n group.layers?.includes(selectedLayerKey),\n )?.id;\n }\n\n // Build layout with group headers\n const layout = [];\n organized.items.forEach((item) => {\n if (item.type === 'group') {\n const groupLayers =\n item.data.layers\n ?.map((layerKey) => organized.allLayers[layerKey])\n .filter(Boolean) || [];\n layout.push(\n <div\n key={`group-${item.data.id}`}\n className=\"p-3 pt-2 border rounded bg-light\"\n >\n <h5>{item.data.label}</h5>\n <div className=\"d-flex flex-wrap gap-3\">\n {groupLayers.map((layer) => {\n let isEnabled = false;\n if (!isSelectedGrouped) {\n // selected is ungrouped, disable grouped layers\n isEnabled = false;\n } else {\n // selected is grouped, enable only layers in same group\n isEnabled = item.data.id === selectedGroupId;\n }\n return block(layer, fnAdd, isEnabled);\n })}\n </div>\n </div>,\n );\n } else {\n // ungrouped layer\n let isEnabled = false;\n if (!isSelectedGrouped) {\n // selected is ungrouped, enable ungrouped layers\n isEnabled = true;\n } else {\n // selected is grouped, disable ungrouped layers\n isEnabled = false;\n }\n layout.push(block(item.data, fnAdd, isEnabled));\n }\n });\n\n return (\n <Modal size=\"lg\" centered show={show} onHide={fnClose}>\n <Modal.Header closeButton>\n <Modal.Title>Choose Layer</Modal.Title>\n </Modal.Header>\n <Modal.Body style={{ maxHeight: '70vh', overflowY: 'auto' }}>\n <div className=\"d-flex flex-column gap-3\">{layout}</div>\n </Modal.Body>\n </Modal>\n );\n}\n\nLayerModal.propTypes = {\n show: PropTypes.bool.isRequired,\n selectedLayerKey: PropTypes.string.isRequired,\n generic: PropTypes.object.isRequired,\n fnClose: PropTypes.func.isRequired,\n fnAdd: PropTypes.func.isRequired,\n};\n\nexport default LayerModal;\n","// plan to replace flowDefault\nexport const flowInputNode = {\n id: '1',\n type: 'input',\n data: { label: 'Start' },\n position: { x: 250, y: 15 },\n width: 150,\n height: 39,\n};\n\nexport const flowOutputNode = {\n id: '2',\n type: 'output',\n data: { label: 'End' },\n position: { x: 250, y: 255 },\n width: 150,\n height: 39,\n};\n\nexport const initialNodes = [flowInputNode, flowOutputNode];\n\nexport const initialViewport = {\n x: 0,\n y: 0,\n zoom: 1,\n};\n","import cloneDeep from 'lodash/cloneDeep';\nimport { MarkerType } from 'reactflow';\nimport { initialNodes, initialViewport } from '@utils/flow/initial-flow';\n\n/**\n * splitFlowElements, to construct flow into nodes, edges, viewport.\n *\n * @param {object} flow\n * @return {object} Returns a flow object.\n */\nconst splitFlowElements = flow => {\n const deep = cloneDeep(flow || {});\n const els = deep?.elements || [];\n\n if (els.length < 1)\n return { nodes: initialNodes, edges: [], viewport: initialViewport };\n\n const nodes = els.filter(el => !el.source);\n const edges = els\n .filter(el => el.source && el.source !== el.target)\n .map(el => {\n return { ...el, markerEnd: { type: MarkerType.ArrowClosed } };\n });\n const viewport = {\n x: deep?.position[0],\n y: deep?.position[1],\n zoom: deep?.zoom,\n };\n return { nodes, edges, viewport };\n};\n\nexport default splitFlowElements;\n","import cloneDeep from 'lodash/cloneDeep';\nimport sortBy from 'lodash/sortBy';\nimport { v4 as uuid } from 'uuid';\nimport { orgLayerObject, FieldTypes } from 'generic-ui-core';\nimport splitFlowElements from '@utils/flow/split-flow-elements';\n\nconst getWFNode = (_flow, nodeId) => _flow.nodes?.filter(e => e.id === nodeId)[0];\n\n// full-flow, node id\nconst getFlowLayer = (templateFlow, nodeId, sourceLayer, sIdx) => {\n const { nodes, edges, viewport } = templateFlow;\n // const flow = cloneDeep(templateFlow);\n\n const nd = nodes?.filter(e => e.id === nodeId); // fetch node\n if (nd.length < 1) return null;\n const { layer } = nd[0].data;\n const ls = edges || []; // lines\n const ns = nodes?.filter(e => e.type === 'default' && e.data) || []; // nodes - Start - End\n const ndNs = ls.filter(e => e.source === nodeId).map(e => e.target) || []; // next nodes' id\n const wfOpts = ns.filter(n => ndNs.includes(n.id))?.map(e => ({ key: e.id, label: `${e.data.layer.label}(${e.data.layer.key})` })) || []; // next nodes\n if (wfOpts.length > 0) {\n const position = (layer.fields || []).length + 1;\n layer.fields.push({\n type: FieldTypes.F_WF_NEXT, default: '', field: '_wf_next', label: 'Next', required: false, sub_fields: [], text_sub_fields: [], position, wf_options: wfOpts\n });\n }\n layer.wf_info = { node_id: nodeId, source_layer: sourceLayer };\n layer.wf_position = sIdx + 1;\n return layer;\n};\n\nconst reformCondFields = (_layer, _oKey) => {\n const layer = _layer;\n layer.fields.map(_f => {\n const f = _f;\n let conds = f.cond_fields;\n // no cond_fields\n if (!conds || conds.length < 1 || conds.filter(o => !o.field || o.field === '').length === conds.length) return f;\n conds = conds.filter(o => o.layer === _oKey);\n // no same layer, remove cond_fields\n if (conds.length < 1) {\n delete f.cond_fields;\n return f;\n }\n // rename layer\n conds = conds.map(o => {\n const n = o;\n n.layer = layer.key;\n return n;\n });\n f.cond_fields = conds;\n return f;\n });\n return layer.fields;\n};\n\nconst addToObject = (obj, key, addAfter) => {\n const temp = {};\n const ok = Object.keys(obj);\n Object.keys(obj).forEach(e => {\n if (Object.prototype.hasOwnProperty.call(obj, e)) {\n temp[e] = obj[e];\n if (e === key) {\n const srcPosition = temp[e].position;\n const cnt = ok.filter(o => o === addAfter.key || o.startsWith(`${addAfter.key}.`)).length;\n if (cnt === 0) {\n temp[addAfter.key] = addAfter;\n temp[addAfter.key].position = srcPosition;\n } else {\n const oKey = addAfter.key;\n temp[`${addAfter.key}.${cnt}`] = addAfter;\n temp[`${addAfter.key}.${cnt}`].position = srcPosition;\n temp[`${addAfter.key}.${cnt}`].key = `${addAfter.key}.${cnt}`;\n temp[addAfter.key].fields = reformCondFields(addAfter, oKey);\n }\n }\n }\n });\n if (Object.keys(obj).length === 0) temp[addAfter.key] = addAfter;\n return temp;\n};\n\nconst traverseToRemove = (layers, rmKey) => {\n let rms = [];\n Object.keys(layers).forEach(e => {\n if (Object.prototype.hasOwnProperty.call(layers, e)) {\n if (layers[e].key === rmKey) rms = rms.concat(rmKey);\n else if (layers[e].wf_info && (layers[e].wf_info.source_layer === rmKey)) {\n rms = rms.concat(traverseToRemove(layers, layers[e].key));\n }\n }\n });\n return rms;\n};\n\nconst removeFromObject = (_propertiesLayers = {}, srcLayer = '', rmNode = {}) => {\n const layers = _propertiesLayers;\n const rmLayer = rmNode.data && rmNode.data.layer ? rmNode.data.layer.key : null;\n if (!rmLayer) return [];\n let rms = [];\n Object.keys(layers).forEach(e => {\n if (Object.prototype.hasOwnProperty.call(layers, e)) {\n const wf = layers[e].wf_info;\n if (wf && (wf.source_layer === srcLayer) && (wf.node_id === rmNode.id)) {\n rms = rms.concat(traverseToRemove(layers, layers[e].key));\n }\n }\n });\n rms.forEach(e => delete layers[e]);\n return layers;\n};\n\nconst buildInitWF = (template) => {\n const orig = cloneDeep(template);\n const { layers, flow, flowObject } = orig;\n\n const { nodes, edges, viewport } = flowObject\n ? cloneDeep(flowObject)\n : splitFlowElements(flow);\n\n const sortedLayers = sortBy(layers, l => l.position);\n if (nodes?.filter(e => !['input', 'output'].includes(e.type).length > 0)) {\n // id = 1 Start, id = 2 End\n const nls = nodes; // nodes\n const ls = edges; // lines\n const ns = nls.filter(e => e.type === 'default' && e.data); // nodes - Start - End\n const nNs = ls.filter(e => e.source === '1').map(e => e.target); // get target ids from Start\n const nextNodes = ns.filter(n => nNs.includes(n.id)); // target nodes\n const result = [];\n sortedLayers.forEach((sortedLayer) => {\n const fLayer = sortedLayer;\n if (fLayer.wf) {\n const position = (fLayer.fields || []).length + 1;\n const passen = nextNodes.filter(n => n.data.layer.key === fLayer.key);\n passen.forEach((pas) => {\n const nextOptions = ls.filter(e => e.source === pas.id && e.source !== e.target).map(e => e.target);\n const wfOpts = ns.filter(n => nextOptions.includes(n.id)).map(e => ({ key: e.id, label: `${e.data.layer.label}(${e.data.layer.key})` })); // next nodes\n if (wfOpts.length > 0) {\n fLayer.fields.push({\n type: FieldTypes.F_WF_NEXT, default: '', field: '_wf_next', label: 'Next', required: false, sub_fields: [], text_sub_fields: [], position, wf_options: wfOpts\n });\n }\n fLayer.wf_info = { node_id: pas.id };\n fLayer.wf_position = 1;\n fLayer.wf_uuid = uuid();\n result.push(fLayer);\n });\n } else {\n result.push(fLayer);\n }\n });\n const ll = orgLayerObject(result);\n orig.layers = ll;\n } else {\n orig.layers = layers;\n }\n return orig;\n};\n\nexport {\n getWFNode,\n getFlowLayer,\n addToObject,\n removeFromObject,\n reformCondFields,\n buildInitWF,\n};\n","import { useEffect, useReducer, useRef } from 'react';\n\nconst useReducerWithCallback = (reducer, initialState, initializer) => {\n const callbackRef = useRef();\n const [state, dispatch] = useReducer(reducer, initialState, initializer);\n\n useEffect(() => {\n if (callbackRef.current) {\n callbackRef.current(state);\n callbackRef.current = null;\n }\n }, [state]);\n\n const customDispatch = (action, callback) => {\n callbackRef.current = callback;\n dispatch(action);\n };\n\n return [state, customDispatch];\n};\n\nexport default useReducerWithCallback;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Accordion } from 'react-bootstrap';\nimport { userData } from '@components/tools/utils';\nimport { bgColor } from '@components/tools/format-utils';\nimport { useGenInterfaceContext } from '@components/details/GenInterfaceContext';\n\nfunction GeneralDescriptionFields({\n disabled, readOnly\n}) {\n const { refSource } = useGenInterfaceContext();\n const datasetContainer = refSource?.datasetContainer;\n const currentUser = refSource?.currentUser;\n const onChange = refSource?.fnRef;\n // Get general description data from extended_metadata\n const generalDescription = datasetContainer?.extended_metadata?.general_description || {};\n\n // Get creator name from current user\n const creatorName = userData(currentUser).name || '';\n\n // Helper function to handle field changes\n const handleFieldChange = (fieldName, value) => {\n if (onChange) {\n const updatedContainer = { ...datasetContainer };\n if (!updatedContainer.extended_metadata) {\n updatedContainer.extended_metadata = {};\n }\n if (!updatedContainer.extended_metadata.general_description) {\n updatedContainer.extended_metadata.general_description = {};\n }\n updatedContainer.extended_metadata.general_description[fieldName] = value;\n onChange(updatedContainer);\n }\n };\n\n // Helper function to get field value\n const getFieldValue = (fieldName) => {\n if (fieldName === 'creator') {\n return generalDescription[fieldName] || creatorName;\n }\n return generalDescription[fieldName] || '';\n };\n\n // Define fields with their configurations\n const fields = [\n {\n key: 'title', label: 'Title', type: 'text', placeholder: 'Enter title', readOnly: false\n },\n {\n key: 'date', label: 'Date', type: 'text', placeholder: '', readOnly: false\n },\n {\n key: 'time', label: 'Time', type: 'text', placeholder: '', readOnly: false\n },\n {\n key: 'contributor', label: 'Contributor', type: 'text', placeholder: 'Enter contributor name', readOnly: false\n },\n {\n key: 'creator', label: 'Creator', type: 'text', placeholder: '', readOnly: true\n },\n {\n key: 'operator', label: 'Operator', type: 'text', placeholder: 'Enter operator name', readOnly: false\n },\n ];\n\n // Group fields into rows of 3\n const rows = [];\n for (let i = 0; i < fields.length; i += 3) {\n rows.push(fields.slice(i, i + 3));\n }\n\n return (\n <Accordion\n defaultActiveKey=\"0\"\n className=\"mb-4\"\n >\n <Accordion.Item eventKey=\"0\" style={{ border: 'none' }}>\n <Accordion.Header\n as=\"div\"\n className={`lu-ds-element-accordion-header flex-grow-1 ${bgColor()}`}\n style={{ boxShadow: 'none' }}\n >\n <span className=\"panel_generic_heading\" style={{ pointerEvents: 'none' }}>General description</span>\n </Accordion.Header>\n <Accordion.Body className=\"py-0\">\n <div className=\"container-fluid\">\n {rows.map((row, index) => (\n <div className={`row ${index === 0 ? 'mt-1' : ''} mb-3`} key={row.map((f) => f.key).join('-')}>\n {row.map((field) => (\n <div className=\"col-md-4\" key={field.key}>\n <Form.Label>{field.label}</Form.Label>\n <Form.Control\n type={field.type}\n value={getFieldValue(field.key)}\n placeholder={field.placeholder}\n disabled={readOnly || disabled || field.readOnly}\n readOnly={field.readOnly}\n onChange={(e) => handleFieldChange(field.key, e.target.value)}\n style={field.readOnly ? { backgroundColor: '#f5f5f5' } : {}}\n />\n </div>\n ))}\n {/* Fill remaining columns if less than 3 fields in the last row */}\n {row.length < 3 && Array.from({ length: 3 - row.length }).map((__, emptyIdx) => (\n <div className=\"col-md-4\" key={`empty-col-${row[0].key}-pos${emptyIdx + row.length}`} />\n ))}\n </div>\n ))}\n </div>\n </Accordion.Body>\n </Accordion.Item>\n </Accordion>\n );\n}\n\nGeneralDescriptionFields.propTypes = {\n disabled: PropTypes.bool,\n readOnly: PropTypes.bool,\n};\n\nGeneralDescriptionFields.defaultProps = {\n datasetContainer: {},\n currentUser: {},\n disabled: false,\n readOnly: false,\n};\n\nexport default GeneralDescriptionFields;\n","import React from 'react';\nimport { Form } from 'react-bootstrap';\n\n/**\n * Helper function to build link from type and id\n * @param {string} type - The type of resource\n * @param {string|number} id - The id of resource\n * @returns {string} The constructed URL\n */\nexport const buildLink = (type, id) => {\n if (!type || !id) {\n return '';\n }\n\n // Get hostname and port from window.location\n const { protocol, hostname, port } = window.location;\n const portPart = port ? `:${port}` : '';\n\n return `${protocol}//${hostname}${portPart}/mydb/collection/all/${type.toLowerCase()}/${id}`;\n};\n\n/**\n * Helper function to build resource link from resources array\n * @param {Array} resources - Array of resource objects\n * @returns {string} The constructed resource URL\n */\nexport const buildResourceLink = (resources) => {\n const contextType = resources[0]?.resource_context_type;\n const contextId = resources[0]?.resource_context_id;\n const link = buildLink(contextType, contextId);\n return link;\n};\n\n/**\n * Helper function to build default element link\n * @param {Object} element - The element object\n * @returns {string} The constructed element URL\n */\nexport const buildElementLink = (element) => {\n return buildLink(element?.type, element?.id);\n};\n\n/**\n * Get identifier label for display\n * @param {Object} field - The field object\n * @param {Object} element - The element object\n * @returns {string} The label to display\n */\nexport const getIdentifierLabel = (field, element) => {\n if (field.key === 'resource_identifier') {\n return element?.id;\n }\n if (field.key === 'resource_context_identifier') {\n const resources = element?.tag?.taggable_data?.resources;\n if (!resources || !Array.isArray(resources) || resources.length === 0) {\n return '';\n }\n return resources[0]?.['resource_context_id'] || '';\n }\n return '';\n};\n\n/**\n * Get identifier URL for linking\n * @param {Object} field - The field object\n * @param {Object} element - The element object\n * @returns {string} The URL to link to\n */\nexport const getIdentifierUrl = (field, element) => {\n if (field.key === 'resource_identifier') {\n return buildElementLink(element);\n }\n if (field.key === 'resource_context_identifier') {\n const resources = element?.tag?.taggable_data?.resources;\n if (!resources || !Array.isArray(resources) || resources.length === 0) {\n return '';\n }\n return buildResourceLink(resources);\n }\n return '';\n};\n\n/**\n * Render identifier field as link or empty text field\n * @param {Object} field - The field object\n * @param {Object} element - The element object\n * @returns {JSX.Element} The rendered field\n */\nexport const renderIdentifierField = (field, element) => {\n const label = getIdentifierLabel(field, element);\n\n if (!label) {\n return (\n <Form.Control\n type=\"text\"\n value=\"\"\n readOnly\n style={{ backgroundColor: '#f5f5f5' }}\n />\n );\n }\n\n const url = getIdentifierUrl(field, element);\n\n return (\n <div>\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'block',\n padding: '0.375rem 0.75rem',\n backgroundColor: '#f5f5f5',\n border: '1px solid #ced4da',\n borderRadius: '0.25rem',\n textDecoration: 'none',\n color: '#0d6efd',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap'\n }}\n >\n {label}\n </a>\n </div>\n );\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Accordion } from 'react-bootstrap';\nimport { bgColor } from '@components/tools/format-utils';\nimport elementFieldsMapping from '@utils/json/element-fields-mapping.json';\nimport { renderIdentifierField } from '@/components/details/ElementDetailsIdentifier';\nimport { useGenInterfaceContext } from '@components/details/GenInterfaceContext';\n\nfunction ElementDetailsFields() {\n const { refSource } = useGenInterfaceContext();\n const element = refSource?.element;\n let elementType = element?.type?.toLowerCase() || 'default';\n\n if (element?.klassType === 'GenericEl') {\n elementType = element?.element_klass?.label || 'default';\n }\n\n // Helper function to resolve field reference to full field object\n const resolveField = (fieldRef) => {\n if (typeof fieldRef === 'string') {\n return elementFieldsMapping.baseFields.find((f) => f.key === fieldRef);\n }\n return fieldRef;\n };\n\n const rawFieldMapping = elementFieldsMapping[elementType] || elementFieldsMapping.default;\n const fieldMapping = rawFieldMapping.map(resolveField).filter((f) => f !== undefined);\n\n // Get element type label\n const elementTypeLabel = elementType\n .split('_')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n\n // Helper function to get field value\n const getFieldValue = (field) => {\n const { key, additionalKey, source } = field;\n\n // Handle system-sourced fields\n if (source === 'system') {\n if (key === 'current_datetime') {\n return new Date().toLocaleString();\n }\n return '';\n }\n\n // Handle element-sourced fields\n if (key === 'type' && elementType) {\n return `${elementType} analysis`;\n }\n\n // Handle element-sourced fields\n if (key === 'rxno') {\n return element?.rxno?.split('|')?.pop().trim();\n }\n\n // Handle compound fields (e.g., amount_value + amount_unit)\n if (additionalKey) {\n const mainValue = element?.[key] || '';\n const additionalValue = element?.[additionalKey] || '';\n return additionalValue ? `${mainValue} ${additionalValue}` : mainValue;\n }\n\n return element?.[key] || '';\n };\n\n // Helper function to get field label\n const getFieldLabel = (key, label) => {\n if (key === 'type') {\n return 'Type of the data';\n }\n return `${elementTypeLabel} ${label}`;\n };\n\n // Group fields into rows of 4\n const rows = [];\n for (let i = 0; i < fieldMapping.length; i += 4) {\n rows.push(fieldMapping.slice(i, i + 4));\n }\n\n return (\n <Accordion\n defaultActiveKey=\"0\"\n className=\"mb-4\"\n >\n <Accordion.Item eventKey=\"0\" style={{ border: 'none' }}>\n <Accordion.Header\n as=\"div\"\n className={`lu-ds-element-accordion-header flex-grow-1 ${bgColor()}`}\n style={{ boxShadow: 'none' }}\n >\n <span className=\"panel_generic_heading\" style={{ pointerEvents: 'none' }}>\n Source details:\n {' '}\n {elementTypeLabel}\n </span>\n </Accordion.Header>\n <Accordion.Body className=\"py-0\">\n <div className=\"container-fluid\" style={{ paddingTop: '6px' }}>\n {rows.map((row) => (\n <div className=\"row mb-3\" key={row.map((f) => f.key).join('-')}>\n {row.map((field) => (\n <div className=\"col-md-3\" key={field.key}>\n <Form.Label title={field.hover_text || ''}>\n {getFieldLabel(field.key, field.label)}\n </Form.Label>\n {field.key === 'resource_identifier' ? (\n renderIdentifierField(field, element)\n ) : (\n <Form.Control\n type=\"text\"\n value={getFieldValue(field)}\n readOnly\n style={{ backgroundColor: '#f5f5f5' }}\n />\n )}\n </div>\n ))}\n {/* Fill remaining columns if less than 4 fields in the last row */}\n {row.length < 4 && Array.from({ length: 4 - row.length }).map((__, emptyIdx) => (\n <div className=\"col-md-3\" key={`empty-col-${row[0].key}-pos${emptyIdx + row.length}`} />\n ))}\n </div>\n ))}\n </div>\n </Accordion.Body>\n </Accordion.Item>\n </Accordion>\n );\n}\n\nElementDetailsFields.propTypes = {};\n\nElementDetailsFields.defaultProps = {};\n\nexport default ElementDetailsFields;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, Accordion } from 'react-bootstrap';\nimport { bgColor } from '@components/tools/format-utils';\nimport { renderIdentifierField } from '@/components/details/ElementDetailsIdentifier';\nimport { useGenInterfaceContext } from '@components/details/GenInterfaceContext';\n\nfunction ResourceContextFields() {\n const { refSource } = useGenInterfaceContext();\n const element = refSource?.element;\n // Only show for samples with resource context data\n const resources = element?.tag?.taggable_data?.resources;\n const elementType = element?.type?.toLowerCase();\n\n // Don't render if not a sample or no resources\n if (elementType !== 'sample' || !resources || !Array.isArray(resources) || resources.length === 0) {\n return null;\n }\n\n // Fixed fields for resource context\n const fields = [\n {\n key: 'resource_context_id',\n label: 'Resource Context ID',\n },\n {\n key: 'resource_context_type',\n label: 'Resource Context Type',\n },\n {\n key: 'resource_context_label',\n label: 'Resource Context Label',\n },\n {\n key: 'resource_context_identifier',\n label: 'Resource Context Identifier',\n }\n ];\n\n // Helper function to get field value from resources\n const getFieldValue = (fieldKey) => {\n return resources[0]?.[fieldKey] || '';\n };\n\n // Group fields into a single row of 4\n const row = fields;\n\n return (\n <Accordion\n defaultActiveKey=\"0\"\n className=\"mb-4\"\n >\n <Accordion.Item eventKey=\"0\" style={{ border: 'none' }}>\n <Accordion.Header\n as=\"div\"\n className={`lu-ds-element-accordion-header flex-grow-1 ${bgColor()}`}\n style={{ boxShadow: 'none' }}\n >\n <span className=\"panel_generic_heading\" style={{ pointerEvents: 'none' }}>\n Contextual Information/Origin of the sample\n </span>\n </Accordion.Header>\n <Accordion.Body className=\"py-0\">\n <div className=\"container-fluid\" style={{ paddingTop: '6px' }}>\n <div className=\"row mb-3\">\n {row.map((field) => (\n <div className=\"col-md-3\" key={field.key}>\n <Form.Label>\n {field.label}\n </Form.Label>\n {field.key === 'resource_context_identifier' ? (\n renderIdentifierField(field, element)\n ) : (\n <Form.Control\n type=\"text\"\n value={getFieldValue(field.key)}\n readOnly\n style={{ backgroundColor: '#f5f5f5' }}\n />\n )}\n </div>\n ))}\n </div>\n </div>\n </Accordion.Body>\n </Accordion.Item>\n </Accordion>\n );\n}\n\nResourceContextFields.propTypes = {};\n\nResourceContextFields.defaultProps = {};\n\nexport default ResourceContextFields;\n","/* eslint-disable react/no-unused-prop-types */\n/* eslint-disable camelcase */\n/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport cloneDeep from 'lodash/cloneDeep';\nimport findIndex from 'lodash/findIndex';\nimport sortBy from 'lodash/sortBy';\nimport {\n FieldTypes,\n genUnits,\n orgLayerObject,\n swapAryEls,\n unitConversion,\n} from 'generic-ui-core';\nimport GenAnaModal from '@components/details/GenAnaModal';\nimport LayersLayout from '@components/layers/LayersLayout';\nimport ProgressFlowWrapper from '@components/flow/ProgressFlowWrapper';\nimport LayerModal from '@/ui/modals/LayerModal';\nimport Constants from '@components/tools/Constants';\nimport {\n getWFNode,\n getFlowLayer,\n addToObject,\n removeFromObject,\n reformCondFields,\n} from '@components/tools/orten';\nimport { storeOptions, uploadFiles } from '@components/tools/utils';\nimport useReducerWithCallback from '@components/tools/useReducerWithCallback';\nimport splitFlowElements from '@utils/flow/split-flow-elements';\nimport { genericVariant } from '@utils/pureUtils';\nimport { addLayer, layerDropReaction } from '@components/details/handler';\nimport { GenInterfaceProvider } from '@components/details/GenInterfaceContext';\nimport GeneralDescriptionFields from '@components/details/GeneralDescriptionFields';\nimport ElementDetailsFields from '@components/details/ElementDetailsFields';\nimport ResourceContextFields from '@components/details/ResourceContextFields';\n\nconst initialState = {\n showViewLayer: false,\n selectedLayerKey: '',\n showAnaModal: false,\n};\n\nconst reducer = (state, action) => {\n return { ...state, ...action };\n};\n\nconst GenInterface = (props) => {\n const [state, dispatch] = useReducerWithCallback(reducer, initialState);\n const {\n generic,\n fnChange,\n extLayers,\n genId,\n isPreview,\n isActiveWF,\n isSearch,\n fnNavi,\n isSpCall,\n aiComp,\n expandAll,\n editMode,\n genericType: propGenericType,\n refSource,\n } = props;\n\n if (Object.keys(generic).length === 0) return null;\n\n const { container, metadata = {} } = generic;\n const genericType = propGenericType || genericVariant(generic);\n const layerReactionDrop = (_field, _layerKey) => {\n layerDropReaction(generic, _field, _layerKey);\n fnChange(generic);\n };\n\n const layerReaction = (_layer) => {\n addLayer(generic, _layer, 'REACTION');\n fnChange(generic);\n };\n\n const layerDrop = (_source, _target) => {\n const { layers } = generic.properties;\n let sortedLayers = sortBy(layers, ['position', 'wf_position']);\n // swap or move\n const srcIdx = sortedLayers.findIndex((e) => e.key === _source);\n const tmpSrc = sortedLayers[srcIdx];\n let tarIdx = sortedLayers.findIndex((e) => e.key === _target);\n if (Math.abs(srcIdx - tarIdx) === 1) {\n sortedLayers = swapAryEls(sortedLayers, srcIdx, tarIdx);\n } else {\n // delete src\n sortedLayers.splice(srcIdx, 1);\n // keep tar\n tarIdx = sortedLayers.findIndex((e) => e.key === _target);\n const tmpTar = sortedLayers[tarIdx];\n // prepare new layer\n tmpSrc.position = tmpTar.position;\n tmpSrc.wf_position = (tmpTar.wf_position || 0) + 1;\n // insert new layer\n sortedLayers.splice(tarIdx + 1, 0, tmpSrc);\n }\n // re-count wf_position\n sortedLayers\n .filter((e) => e.position === tmpSrc.position)\n .map((e, idx) => {\n const el = e;\n el.wf_position = idx;\n return el;\n });\n const ll = orgLayerObject(sortedLayers);\n generic.properties.layers = ll;\n generic.changed = true;\n fnChange(generic);\n };\n\n const layerDataChange = (event, field, layer) => {\n const { properties } = generic;\n if (event) {\n const value = new Date(event)\n .toLocaleString('en-GB')\n .split(', ')\n .join(' ');\n properties.layers[layer.key][field] = value;\n } else {\n delete properties.layers[layer.key][field]; // remove the attribute of layer if event/value is null\n }\n generic.changed = true;\n fnChange(generic);\n };\n\n const layerRemove = (elId, layer) => {\n const { layers } = generic.properties;\n\n // remove layer(layer.key) if needed\n const group = (metadata.groups || []).find((g) =>\n g.layers?.includes(layer.key),\n );\n if (group) {\n const grpIdx = metadata.groups.findIndex((g) => g.id === group.id);\n const grpLayers = metadata.groups[grpIdx].layers || [];\n const layerIdx = grpLayers.indexOf(layer.key);\n if (layerIdx !== -1) {\n grpLayers.splice(layerIdx, 1);\n }\n metadata.groups[grpIdx].layers = grpLayers;\n generic.metadata = metadata;\n }\n\n const sortedLayers = sortBy(layers, ['position', 'wf_position']);\n const selectedIdx = sortedLayers.findIndex((e) => e.key === layer.key);\n const selected = sortedLayers[selectedIdx];\n sortedLayers.splice(selectedIdx, 1);\n sortedLayers\n .filter((e) => e.position === selected.position)\n .map((e, idx) => {\n const el = e;\n el.wf_position = idx;\n return el;\n });\n generic.properties.layers = orgLayerObject(sortedLayers);\n generic.changed = true;\n fnChange(generic);\n };\n\n const layerNext = (event, layer) => {\n const value = event ? event.value : null;\n if (value) {\n const { properties, properties_release } = generic;\n // next step value if exists\n let rmNeeded = false;\n const preValue = properties.layers[`${layer}`].fields.find(\n (e) => e.field === '_wf_next',\n ).value;\n if (value !== preValue) {\n if (preValue && preValue !== '' && preValue !== value) {\n rmNeeded = true;\n }\n const { flow, flowObject } = properties_release;\n const preLayer = properties.layers[`${layer}`];\n\n const { nodes, edges, viewport } = flowObject\n ? cloneDeep(flowObject)\n : splitFlowElements(flow);\n\n // value is the next node's id\n const nxLayer = getFlowLayer(\n { nodes, edges, viewport },\n value,\n layer,\n preLayer.wf_position,\n );\n if (nxLayer) {\n properties.layers = addToObject(properties.layers, layer, nxLayer);\n }\n if (rmNeeded) {\n properties.layers = removeFromObject(\n properties.layers,\n layer,\n getWFNode({ nodes, edges, viewport }, preValue),\n );\n }\n // update next step value\n properties.layers[`${layer}`].fields.find(\n (e) => e.field === '_wf_next',\n ).value = value;\n generic.properties = properties;\n generic.changed = true;\n fnChange(generic); // cb move to e.g. SampleDetails.js\n }\n }\n };\n\n const handleLinkAi = (pAiId, pLayer, pAct) => {\n let propsChange = false;\n const { layers } = generic.properties;\n const selectedLayer = layers[pLayer];\n let layerAi = selectedLayer.ai || [];\n switch (pAct) {\n case Constants.BTN_AI_UNLINK:\n layerAi = layerAi.filter((x) => x !== pAiId);\n propsChange = true;\n break;\n case Constants.BTN_AI_LINK:\n layerAi.push(pAiId);\n propsChange = true;\n break;\n default:\n break;\n }\n if (propsChange) {\n selectedLayer.ai = layerAi;\n generic.properties.layers[pLayer] = selectedLayer;\n dispatch({ showAnaModal: false, selectedLayerKey: pLayer }, () => {\n fnChange(generic);\n });\n }\n };\n\n const handleAddLayer = (event, _layer) => {\n const layer = _layer; // new layer object to add\n const { layers } = generic.properties;\n const sortedLayers = sortBy(layers, ['position', 'wf_position']);\n const idx = sortedLayers.findIndex((e) => e.key === state.selectedLayerKey);\n\n // re-set added layer attributes\n const selectedLayer = sortedLayers[idx];\n layer.position = selectedLayer.position;\n layer.wf_position = selectedLayer.wf_position + 1;\n layer.wf = false;\n layer.wf_uuid = null;\n delete layer.cond_fields; // remove cond_fields if any\n // layer is standard layer (from released)\n const cnt = sortedLayers.filter(\n (e) => e.key === layer.key || e.key.startsWith(`${layer.key}.`),\n ).length;\n if (cnt > 0) {\n const origKey = layer.key;\n layer.key = `${layer.key}.${cnt}`;\n layer.fields = reformCondFields(layer, origKey);\n }\n\n // update if needed - this new added layer is the layer after the selectedLayerKey\n const group = (metadata.groups || []).find((g) =>\n g.layers?.includes(state.selectedLayerKey),\n );\n if (group) {\n // update group's layers - insert after selectedLayerKey\n const grpIdx = metadata.groups.findIndex((g) => g.id === group.id);\n const grpLayers = metadata.groups[grpIdx].layers || [];\n const selectedIdx = grpLayers.indexOf(state.selectedLayerKey);\n if (selectedIdx !== -1) {\n grpLayers.splice(selectedIdx + 1, 0, layer.key);\n } else {\n grpLayers.push(layer.key);\n }\n metadata.groups[grpIdx].layers = grpLayers;\n generic.metadata = metadata;\n }\n\n // insert new layer\n sortedLayers.splice(idx + 1, 0, layer);\n // re-count wf_position\n sortedLayers\n .filter((e) => e.position === selectedLayer.position)\n .map((e, ix) => {\n const el = e;\n el.wf_position = ix;\n return el;\n });\n const ll = orgLayerObject(sortedLayers);\n generic.properties.layers = ll;\n dispatch({ showViewLayer: false, selectedLayerKey: layer.key }, () => {\n fnChange(generic);\n });\n };\n\n const handleInputChange = (event, field, layer, type = FieldTypes.F_TEXT) => {\n const { properties } = generic;\n let value = '';\n let propsChange = true;\n switch (type) {\n case 'drop-layer':\n layerDrop(field, layer); // src, tar\n propsChange = false;\n break;\n case 'layer-data-change':\n layerDataChange(event, field, layer);\n propsChange = false;\n break;\n case 'layer-remove':\n event.stopPropagation();\n layerRemove(field, layer);\n propsChange = false;\n break;\n case FieldTypes.F_SYS_REACTION: {\n const { target } = event;\n propsChange = false;\n layerReactionDrop(target, layer);\n break;\n }\n case 'layer-add-reaction':\n event.stopPropagation();\n propsChange = false;\n layerReaction(layer);\n break;\n case 'layer-modal':\n event.stopPropagation();\n propsChange = false;\n dispatch({ showViewLayer: true, selectedLayerKey: layer.key });\n break;\n case 'ana-modal':\n event.stopPropagation();\n propsChange = false;\n dispatch({ showAnaModal: true, selectedLayerKey: layer.key });\n break;\n case FieldTypes.F_WF_NEXT:\n propsChange = false;\n layerNext(event, layer);\n break;\n case FieldTypes.F_CHECKBOX:\n value = event.target.checked;\n break;\n case FieldTypes.F_FORMULA_FIELD:\n if (event.target) {\n ({ value } = event.target);\n } else {\n value = event;\n }\n break;\n case FieldTypes.F_UPLOAD: {\n const vals = uploadFiles(properties, event, field, layer);\n value = vals[0];\n if (vals[1].length > 0)\n generic.files = (generic.files || []).concat(vals[1]);\n if (vals.length > 2) {\n const fileIdx = findIndex(\n generic.files || [],\n (o) => o.uid === event.uid,\n );\n if (fileIdx >= 0 && generic.files && generic.files.length > 0) {\n generic.files.splice(fileIdx, 1);\n }\n }\n break;\n }\n case FieldTypes.F_SELECT:\n value = event ? event.value : null;\n break;\n case FieldTypes.F_SELECT_MULTI:\n value = storeOptions(event || []);\n break;\n case FieldTypes.F_DRAG_MOLECULE:\n case FieldTypes.F_DRAG_SAMPLE:\n case FieldTypes.F_DRAG_ELEMENT:\n case FieldTypes.F_DATETIME_RANGE:\n value = event;\n break;\n case FieldTypes.F_DATETIME:\n value = new Date(event).toLocaleString('en-GB').split(', ').join(' ');\n break;\n case FieldTypes.F_INTEGER:\n ({ value } = event.target);\n value = Math.trunc(value);\n break;\n default:\n ({ value } = event.target);\n }\n if (\n layer === '' &&\n ['name', 'search_name', 'search_short_label'].includes(field)\n ) {\n ({ value } = event.target);\n generic[field] = value;\n }\n if (isSearch && type.startsWith('drag_')) {\n ({ value } = event.target);\n }\n if (propsChange) {\n if (type === FieldTypes.F_DATETIME) {\n if (event) {\n properties.layers[`${layer}`].fields.find(\n (e) => e.field === field,\n ).value = value;\n generic.properties = properties;\n if (isSearch) generic.search_properties = properties;\n } else {\n delete properties.layers[`${layer}`].fields.find(\n (e) => e.field === field,\n ).value;\n }\n } else if (type === FieldTypes.F_SELECT_MULTI) {\n properties.layers[layer].fields.find(\n (e) => e.field === field,\n ).sub_fields = value;\n generic.properties = properties;\n if (isSearch) generic.search_properties = properties;\n } else if (type === FieldTypes.F_DATETIME_RANGE) {\n properties.layers[layer].fields.find(\n (e) => e.field === field,\n ).sub_fields = value;\n generic.properties = properties;\n if (isSearch) generic.search_properties = properties;\n } else if (\n layer === '' &&\n ['name', 'search_name', 'search_short_label'].includes(field)\n ) {\n // console.log(field);\n } else {\n properties.layers[`${layer}`].fields.find(\n (e) => e.field === field,\n ).value = value;\n if (\n type === FieldTypes.F_SYSTEM_DEFINED &&\n (!properties.layers[`${layer}`].fields.find((e) => e.field === field)\n .value_system ||\n properties.layers[`${layer}`].fields.find((e) => e.field === field)\n .value_system === '')\n ) {\n const opt = properties.layers[`${layer}`].fields.find(\n (e) => e.field === field,\n ).option_layers;\n properties.layers[`${layer}`].fields.find(\n (e) => e.field === field,\n ).value_system = genUnits(opt)[0].key;\n }\n generic.properties = properties;\n if (isSearch) generic.search_properties = properties;\n }\n generic.changed = true;\n fnChange(generic);\n }\n };\n\n const handleSubChange = (layer, obj, valueOnly = false) => {\n const { properties } = generic;\n if (!valueOnly) {\n const subFields =\n properties.layers[`${layer}`].fields.find(\n (m) => m.field === obj.f.field,\n ).sub_fields || [];\n const idxSub = subFields.findIndex((m) => m.id === obj.sub.id);\n subFields.splice(idxSub, 1, obj.sub);\n properties.layers[`${layer}`].fields.find(\n (e) => e.field === obj.f.field,\n ).sub_fields = subFields;\n }\n properties.layers[`${layer}`].fields.find(\n (e) => e.field === obj.f.field,\n ).sub_values = obj.f.sub_values || [];\n generic.properties = properties;\n generic.changed = true;\n fnChange(generic);\n };\n\n const handleUnitClick = (layer, obj) => {\n const { properties } = generic;\n const newVal = unitConversion(\n obj.option_layers,\n obj.value_system,\n obj.value,\n );\n properties.layers[`${layer}`].fields.find(\n (e) => e.field === obj.field,\n ).value_system = obj.value_system;\n properties.layers[`${layer}`].fields.find(\n (e) => e.field === obj.field,\n ).value = newVal;\n generic.properties = properties;\n generic.changed = true;\n fnChange(generic);\n };\n\n let ai =\n (container && container.children && container.children[0].children) || [];\n ai = ai.filter((x) => !x.is_new); // get ai is not new\n\n const paramsLayersLayout = {\n generic,\n // layers: generic.properties.layers,\n // options: generic.properties_release?.select_options || {},\n funcChange: handleInputChange,\n funcSubChange: handleSubChange,\n funcClick: handleUnitClick,\n // classStr: generic?.short_label,\n extLys: extLayers || [],\n id: genId,\n isPreview: isPreview || false,\n activeWF: isActiveWF || false,\n isSearch,\n fnNavi,\n isSpCall,\n hasAi: ai.length > 0,\n aiComp,\n expandAll,\n editMode,\n genericType: genericType,\n };\n\n const layersLayout = <LayersLayout {...paramsLayersLayout} />;\n\n const anaModal = (\n <GenAnaModal\n show={state.showAnaModal}\n generic={generic}\n layer={state.selectedLayerKey}\n fnHide={() => dispatch({ showAnaModal: !state.showAnaModal })}\n fnLink={handleLinkAi}\n />\n );\n\n return (\n <GenInterfaceProvider value={{ refSource }}>\n <ProgressFlowWrapper\n generic={generic}\n refElement={refSource?.element}\n />\n {genericType === Constants.GENERIC_TYPES.DATASET && (\n <GeneralDescriptionFields\n disabled={false}\n readOnly={false}\n />\n )}\n {genericType === Constants.GENERIC_TYPES.DATASET && (\n <ElementDetailsFields />\n )}\n {genericType === Constants.GENERIC_TYPES.DATASET && (\n <ResourceContextFields />\n )}\n {layersLayout}\n <LayerModal\n show={state.showViewLayer}\n selectedLayerKey={state.selectedLayerKey}\n generic={cloneDeep(generic) || {}}\n fnClose={() => dispatch({ showViewLayer: !state.showViewLayer })}\n fnAdd={handleAddLayer}\n />\n {anaModal}\n </GenInterfaceProvider>\n );\n};\n\nGenInterface.propTypes = {\n generic: PropTypes.object.isRequired,\n fnChange: PropTypes.func.isRequired,\n extLayers: PropTypes.array,\n genId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n isPreview: PropTypes.bool.isRequired,\n isActiveWF: PropTypes.bool.isRequired,\n isSearch: PropTypes.bool,\n fnNavi: PropTypes.func,\n isSpCall: PropTypes.bool,\n aiComp: PropTypes.any,\n expandAll: PropTypes.bool,\n editMode: PropTypes.bool,\n genericType: PropTypes.string, // from parent only for preview\n refSource: PropTypes.object,\n};\n\nGenInterface.defaultProps = {\n extLayers: [],\n isSearch: false,\n genId: 0,\n fnNavi: () => {},\n isSpCall: false,\n aiComp: null,\n expandAll: undefined,\n genericType: '',\n refSource: {\n element: {},\n datasetContainer: {},\n currentUser: {},\n fnRef: () => {},\n },\n};\n\nexport default GenInterface;\n","import React, { useEffect, useState } from 'react';\nimport cloneDeep from 'lodash/cloneDeep';\nimport GenInterface from '@components/details/GenInterface';\n\nconst LayerGridView = ({ _layer }) => {\n const { generic, ext } = _layer;\n const { name, label, description } = ext;\n const [layer, setLayer] = useState(generic);\n\n useEffect(() => {\n setLayer(generic);\n }, [generic]);\n\n const handleChanged = (el) => {\n if (el.changed) {\n setLayer(cloneDeep(el));\n }\n };\n\n return (\n <div\n style={{\n height: '600px',\n width: '100%',\n overflow: 'auto',\n padding: '0px 20px',\n maxHeight: '600px',\n }}\n >\n <div className=\"gu-mb-2\">\n <h4>\n <b>Standard Layer : </b> {name} {label && `(${label})`}\n </h4>\n <div style={{ display: 'flex', gap: '5px' }}>\n <div>\n <b>Description : </b>\n </div>\n <div style={{ whiteSpace: 'pre-wrap' }}>{description}</div>\n </div>\n </div>\n <GenInterface\n generic={layer || {}}\n fnChange={handleChanged}\n genId={0}\n isPreview\n isActiveWF={false}\n />\n </div>\n );\n};\n\nexport default LayerGridView;\n","import React, { useEffect, useState } from 'react';\nimport { Button, Modal } from 'react-bootstrap';\nimport LayersGrid from '@components/designer/template/LayerGrid';\nimport LayerGridView from '@components/designer/template/LayerGridView';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\n\nconst LayerGridBtn = ({ fnCreate, fnDelete }) => {\n const [showModal, setShowModal] = useState(false);\n const [viewLayer, setViewLayer] = useState(null);\n\n useEffect(() => {\n if (!showModal) {\n setViewLayer(null);\n }\n }, [showModal]);\n\n const handleShow = () => setShowModal(true);\n const handleClose = () => setShowModal(false);\n\n const handleSelectLayer = (params) => {\n fnCreate(params.data?.properties);\n setShowModal(false);\n };\n\n const handleDeleteLayer = (params) => {\n fnDelete(params.data);\n setShowModal(false);\n };\n\n const handleViewLayer = (params) => {\n const selectOptions = params.data.properties?.select_options;\n const generic = {\n properties: {\n layers: {\n [params.data.name]: {\n ...params.data.properties,\n },\n },\n ...(selectOptions && { select_options: selectOptions }),\n },\n properties_release: {\n layers: {\n [params.data.name]: {\n ...params.data.properties,\n },\n },\n ...(selectOptions && { select_options: selectOptions }),\n },\n };\n const ext = {\n description: params.data.description,\n label: params.data.label,\n name: params.data.name,\n };\n setViewLayer({ generic, ext });\n };\n\n const handleCloseView = () => {\n setViewLayer(null);\n };\n\n return (\n <>\n <LTooltip idf=\"sel_lyr2tpl\">\n <Button\n className=\"fw-medium\"\n size=\"sm\"\n variant=\"primary\"\n onClick={handleShow}\n >\n {FIcons.faGlobe}&nbsp;Standard Layers\n </Button>\n </LTooltip>\n <Modal\n centered\n show={showModal}\n onHide={handleClose}\n dialogClassName=\"gu_modal-68w\"\n >\n <Modal.Header closeButton>\n <Modal.Title>Standard Layer List</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n {viewLayer ? (\n <LayerGridView _layer={viewLayer} />\n ) : (\n <LayersGrid\n onLayerSelect={handleSelectLayer}\n onLayerDelete={handleDeleteLayer}\n onLayerView={handleViewLayer}\n />\n )}\n </Modal.Body>\n <Modal.Footer className=\"justify-content-start\">\n {viewLayer && (\n <LTooltip idf=\"return_to_list\">\n <Button className=\"gu-mr-1\" onClick={handleCloseView}>\n Back to list\n </Button>\n </LTooltip>\n )}\n <LTooltip idf=\"close\">\n <Button variant=\"primary\" onClick={handleClose}>\n Close\n </Button>\n </LTooltip>\n </Modal.Footer>\n </Modal>\n </>\n );\n};\n\nexport default LayerGridBtn;\n","import { useState, useEffect } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\nimport { FieldTypes } from 'generic-ui-core';\nimport { toBool } from '@utils/pureUtils';\n\nconst ALLOWED_FIELD_TYPES = ['checkbox', 'text', 'select'];\n\n/**\n * A hook for managing restriction form state and logic\n */\nfunction useRestrictionForm({\n entityKey,\n restriction,\n availableLayers,\n onUpdateRestriction,\n idSuffix = 'lc',\n filterCurrentLayer = false,\n}) {\n const [showRestrictionForm, setShowRestrictionForm] = useState(false);\n const [conditions, setConditions] = useState([]);\n const [selectedLayer, setSelectedLayer] = useState('');\n const [selectedField, setSelectedField] = useState('');\n const [fieldValue, setFieldValue] = useState('');\n const [availableFields, setAvailableFields] = useState([]);\n const [selectedOp, setSelectedOp] = useState(1);\n const [selectedSource, setSelectedSource] = useState('');\n\n // Load existing restrictions when restriction changes\n useEffect(() => {\n if (restriction && restriction.cond) {\n setConditions(restriction.cond);\n setSelectedOp(restriction.op ?? 1);\n }\n }, [restriction]);\n\n const updateAvailableFields = (layer) => {\n if (!layer || !layer.fields) {\n setAvailableFields([]);\n return;\n }\n\n const filteredFields = layer.fields.filter((field) =>\n ALLOWED_FIELD_TYPES.includes(field.type),\n );\n setAvailableFields(filteredFields);\n\n if (filteredFields.length > 0) {\n setSelectedField(filteredFields[0].field);\n } else {\n setSelectedField('');\n }\n };\n\n const handleRestrictionClick = () => {\n setShowRestrictionForm(!showRestrictionForm);\n if (!showRestrictionForm && availableLayers && availableLayers.length > 0) {\n // Filter out the current layer if needed\n const filteredLayers = filterCurrentLayer\n ? availableLayers.filter((l) => l.key !== entityKey)\n : availableLayers;\n\n if (filteredLayers.length > 0) {\n const firstLayer = filteredLayers[0];\n setSelectedLayer(firstLayer.key);\n updateAvailableFields(firstLayer);\n }\n }\n };\n\n const handleLayerChange = (e) => {\n const layerKeyValue = e.target.value;\n setSelectedLayer(layerKeyValue);\n const layer = availableLayers.find((l) => l.key === layerKeyValue);\n if (layer) {\n updateAvailableFields(layer);\n }\n setFieldValue('');\n };\n\n const handleFieldChange = (e) => {\n setSelectedField(e.target.value);\n setFieldValue('');\n };\n\n const handleSourceChange = (e) => {\n setSelectedSource(e.target.value);\n };\n\n const handleAddCondition = (source) => {\n let newCondition;\n\n if (source && typeof source === 'string') {\n newCondition = {\n id: `${uuidv4()}-${idSuffix}`,\n field: 'TYPE',\n layer: 'SRC-EL',\n value: source,\n };\n } else {\n if (!selectedLayer || !selectedField) {\n return;\n }\n\n const layer = availableLayers.find((l) => l.key === selectedLayer);\n const field = layer?.fields?.find((f) => f.field === selectedField);\n const isCheckbox = field?.type === FieldTypes.F_CHECKBOX;\n\n let conditionValue = fieldValue.trim();\n if (isCheckbox) {\n conditionValue = toBool(conditionValue);\n }\n newCondition = {\n id: `${uuidv4()}-${idSuffix}`,\n field: selectedField,\n layer: selectedLayer,\n value: conditionValue,\n };\n }\n\n const updatedConditions = [...conditions, newCondition];\n setConditions(updatedConditions);\n setFieldValue('');\n\n if (onUpdateRestriction) {\n onUpdateRestriction(entityKey, {\n op: selectedOp,\n cond: updatedConditions,\n });\n }\n };\n\n const handleRemoveCondition = (conditionId) => {\n const updatedConditions = conditions.filter((c) => c.id !== conditionId);\n setConditions(updatedConditions);\n\n if (onUpdateRestriction) {\n if (updatedConditions.length === 0) {\n onUpdateRestriction(entityKey, null);\n } else {\n onUpdateRestriction(entityKey, {\n op: selectedOp,\n cond: updatedConditions,\n });\n }\n }\n };\n\n const handleOpChange = (newOp) => {\n setSelectedOp(newOp);\n\n if (onUpdateRestriction && conditions.length > 0) {\n onUpdateRestriction(entityKey, {\n op: newOp,\n cond: conditions,\n });\n }\n };\n\n return {\n showRestrictionForm,\n setShowRestrictionForm,\n conditions,\n selectedLayer,\n selectedField,\n fieldValue,\n setFieldValue,\n availableFields,\n selectedOp,\n handleRestrictionClick,\n handleLayerChange,\n handleFieldChange,\n handleSourceChange,\n handleAddCondition,\n handleRemoveCondition,\n handleOpChange,\n selectedSource,\n setSelectedSource,\n };\n}\n\nexport default useRestrictionForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, ButtonGroup } from 'react-bootstrap';\nimport { condOperatorOptions } from 'generic-ui-core';\n\n/**\n * OperatorSelector - Shared component for restriction operator selection\n * Displays explanation text and buttons for Match One/All/None operators\n */\nfunction OperatorSelector({ selectedOp, onOpChange }) {\n return (\n <div className=\"d-flex align-items-center justify-content-between mb-3\">\n <small className=\"text-muted\">\n The visibility is controlled by configurable [Layer, Field, Value]\n criteria using <strong>Match One, Match All, or Match None</strong>{' '}\n rules.\n </small>\n <ButtonGroup size=\"sm\">\n {condOperatorOptions.map((option) => (\n <Button\n key={option.value}\n variant={\n selectedOp === option.value ? 'primary' : 'outline-primary'\n }\n onClick={() => onOpChange(option.value)}\n >\n {option.label}\n </Button>\n ))}\n </ButtonGroup>\n </div>\n );\n}\n\nOperatorSelector.propTypes = {\n selectedOp: PropTypes.number.isRequired,\n onOpChange: PropTypes.func.isRequired,\n};\n\nexport default OperatorSelector;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Card, Button, Form } from 'react-bootstrap';\nimport FIcons from '@components/icons/FIcons';\nimport { fieldLabelFor, layerLabelFor, getConditionDisplay } from '@utils/pureUtils';\nimport OperatorSelector from '@ui/groups/OperatorSelector';\nimport Constants from '@components/tools/Constants';\nimport { useDesignerContext } from '@components/designer/DesignerContext';\n\n/**\n * Shared component for rendering restriction form UI\n */\nfunction RestrictionFormCard({\n conditions,\n selectedLayer,\n selectedField,\n fieldValue,\n availableFields,\n selectedOp,\n availableLayers,\n selectOptions = {},\n filterCurrentLayer = false,\n currentEntityKey,\n onClose,\n onLayerChange,\n onFieldChange,\n onValueChange,\n onAddCondition,\n onRemoveCondition,\n onOpChange,\n selectedSource,\n onSourceChange,\n}) {\n const { klasses = [], genericType } = useDesignerContext();\n // Filter layers if needed\n const layersToShow = filterCurrentLayer\n ? availableLayers.filter((layer) => layer.key !== currentEntityKey)\n : availableLayers;\n\n // Get selected field details and options for select fields\n const selectedFieldObj = availableFields.find(\n (field) => field.field === selectedField,\n );\n const isSelectField = selectedFieldObj?.type === 'select';\n const isCheckboxField = selectedFieldObj?.type === 'checkbox';\n const selectFieldOptions =\n isSelectField && selectedFieldObj?.option_layers\n ? selectOptions[selectedFieldObj.option_layers]?.options || []\n : [];\n\n // Render value input based on field type\n const renderValueInput = () => {\n if (isSelectField) {\n return (\n <Form.Select\n size=\"sm\"\n value={fieldValue}\n onChange={onValueChange}\n style={{ flex: 1 }}\n >\n <option value=\"\">Select a value...</option>\n {selectFieldOptions.map((option) => (\n <option key={option.key} value={option.key}>\n {option.label}\n </option>\n ))}\n </Form.Select>\n );\n }\n\n if (isCheckboxField) {\n return (\n <Form.Select\n size=\"sm\"\n value={fieldValue}\n onChange={onValueChange}\n style={{ flex: 1 }}\n >\n <option value=\"false\">Unchecked (false)</option>\n <option value=\"true\">Checked (true)</option>\n </Form.Select>\n );\n }\n\n return (\n <Form.Control\n type=\"text\"\n size=\"sm\"\n placeholder=\"Enter expected value\"\n value={fieldValue}\n onChange={onValueChange}\n style={{ flex: 1 }}\n />\n );\n };\n\n // Get helper text based on field type\n const getHelperText = () => {\n if (isSelectField) return 'Select from predefined options';\n if (isCheckboxField) return 'Select the expected checkbox state';\n return 'Enter the expected value (case-sensitive)';\n };\n\n return (\n <Card className=\"mb-3 border border-info\">\n <Card.Header className=\"bg-info text-white d-flex justify-content-between align-items-center\">\n <small>Restriction Conditions</small>\n <Button variant=\"light\" size=\"xsm\" onClick={onClose}>\n Close\n </Button>\n </Card.Header>\n <Card.Body className=\"p-3\">\n <OperatorSelector selectedOp={selectedOp} onOpChange={onOpChange} />\n {conditions.length > 0 && (\n <div className=\"mb-3\">\n <small className=\"text-muted d-block mb-2\">\n Existing Conditions:\n </small>\n {conditions.map((cond) => {\n const { layerTitle, fieldTitle, valueTitle } =\n getConditionDisplay(cond, availableLayers, klasses);\n return (\n <div\n key={cond.id}\n className=\"d-flex align-items-center gap-2 mb-2 p-2 border rounded bg-white\"\n >\n <small className=\"flex-grow-1\">\n <strong>{layerTitle}</strong> → {fieldTitle} = &quot;\n {valueTitle}&quot;\n </small>\n <Button\n variant=\"danger\"\n size=\"xsm\"\n onClick={() => onRemoveCondition(cond.id)}\n title=\"Remove condition\"\n >\n {FIcons.faTrashCan}\n </Button>\n </div>\n );\n })}\n </div>\n )}\n\n <div className=\"border-top pt-3\">\n <small className=\"text-muted d-block mb-2\">Add New Condition:</small>\n <Form.Group className=\"mb-2\">\n <Form.Label className=\"small\">Select Layer (appearance order)</Form.Label>\n <Form.Select\n size=\"sm\"\n value={selectedLayer}\n onChange={onLayerChange}\n >\n {layersToShow &&\n layersToShow.map((layer) => (\n <option key={layer.key} value={layer.key}>\n {layer.label || layer.key} ({layer.key})\n </option>\n ))}\n </Form.Select>\n </Form.Group>\n\n <div className=\"row mb-2 align-items-start\">\n <div className=\"col-md-6\">\n <Form.Group>\n <Form.Label className=\"small\">Select Field</Form.Label>\n <Form.Select\n size=\"sm\"\n value={selectedField}\n onChange={onFieldChange}\n disabled={availableFields.length === 0}\n >\n {/* <option value=\"\">Select a field...</option> */}\n {availableFields.map((field) => (\n <option key={field.field} value={field.field}>\n {field.label || field.field} ({field.field}, type: {field.type})\n </option>\n ))}\n </Form.Select>\n <Form.Text muted>\n Eligible fields (checkbox, text, select)\n </Form.Text>\n </Form.Group>\n </div>\n <div className=\"col-md-6\">\n <Form.Group>\n <Form.Label className=\"small\">Enter Value</Form.Label>\n <div className=\"d-flex gap-2 align-items-start\">\n {renderValueInput()}\n <Button\n variant=\"success\"\n size=\"sm\"\n onClick={onAddCondition}\n disabled={\n !selectedLayer ||\n !selectedField ||\n availableFields.length === 0\n }\n style={{ flexShrink: 0 }}\n title=\"Add condition\"\n >\n {FIcons.faPlus}\n </Button>\n </div>\n <Form.Text muted>{getHelperText()}</Form.Text>\n </Form.Group>\n </div>\n </div>\n\n {genericType === Constants.GENERIC_TYPES.DATASET && (\n <div className=\"row align-items-start\">\n <div className=\"col-md-12\">\n <Form.Group className=\"border-top pt-3\">\n <Form.Label className=\"small\">Reference Source</Form.Label>\n <div className=\"d-flex gap-2 align-items-start\">\n <Form.Select\n size=\"sm\"\n value={selectedSource || ''}\n onChange={onSourceChange}\n disabled={klasses.length === 0}\n style={{ flex: 1 }}\n >\n <option value=\"\">Select a source...</option>\n {klasses.map((klass) => (\n <option key={klass.name} value={klass.name}>\n {klass.label || klass.name} ({klass.name})\n </option>\n ))}\n </Form.Select>\n <Button\n variant=\"success\"\n size=\"sm\"\n onClick={() => onAddCondition(selectedSource)}\n disabled={!selectedSource || klasses.length === 0}\n style={{ flexShrink: 0 }}\n title=\"Add condition\"\n >\n {FIcons.faPlus}\n </Button>\n </div>\n <Form.Text muted>Eligible reference sources</Form.Text>\n </Form.Group>\n </div>\n </div>\n )}\n </div>\n </Card.Body>\n </Card>\n );\n}\n\nRestrictionFormCard.propTypes = {\n conditions: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n field: PropTypes.string,\n layer: PropTypes.string,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n }),\n ).isRequired,\n selectedLayer: PropTypes.string.isRequired,\n selectedField: PropTypes.string.isRequired,\n fieldValue: PropTypes.string.isRequired,\n availableFields: PropTypes.arrayOf(\n PropTypes.shape({\n field: PropTypes.string,\n label: PropTypes.string,\n type: PropTypes.string,\n }),\n ).isRequired,\n selectedOp: PropTypes.number.isRequired,\n availableLayers: PropTypes.arrayOf(\n PropTypes.shape({\n key: PropTypes.string.isRequired,\n label: PropTypes.string,\n fields: PropTypes.arrayOf(PropTypes.object),\n }),\n ).isRequired,\n selectOptions: PropTypes.object,\n filterCurrentLayer: PropTypes.bool,\n currentEntityKey: PropTypes.string,\n onClose: PropTypes.func.isRequired,\n onLayerChange: PropTypes.func.isRequired,\n onFieldChange: PropTypes.func.isRequired,\n onValueChange: PropTypes.func.isRequired,\n onAddCondition: PropTypes.func.isRequired,\n onRemoveCondition: PropTypes.func.isRequired,\n onOpChange: PropTypes.func.isRequired,\n selectedSource: PropTypes.string,\n onSourceChange: PropTypes.func,\n};\n\nRestrictionFormCard.defaultProps = {\n filterCurrentLayer: false,\n currentEntityKey: null,\n selectOptions: {},\n};\n\nexport default RestrictionFormCard;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Card, Button, Form } from 'react-bootstrap';\nimport orderBy from 'lodash/orderBy';\nimport FIcons from '@components/icons/FIcons';\nimport LBadge from '@components/shared/LBadge';\nimport { bgColor } from '@components/tools/format-utils';\nimport useRestrictionForm from '@ui/groups/useRestrictionForm';\nimport RestrictionFormCard from '@ui/groups/RestrictionFormCard';\n\nconst ASSIGN_EXISTING = 'existing';\nconst ASSIGN_NEW = 'new';\n\n/**\n * SimpleLayerPanel - Simple display component for an individual ungrouped layer\n */\nfunction SimpleLayerPanel({\n layerKey,\n layerData,\n children,\n onAssignToGroup,\n existingGroups,\n onUpdateRestriction,\n restriction,\n availableLayers,\n selectOptions,\n}) {\n const { label, style } = layerData;\n const [showAssignForm, setShowAssignForm] = useState(false);\n const [groupAction, setGroupAction] = useState(ASSIGN_EXISTING); // ASSIGN_EXISTING or ASSIGN_NEW\n const [selectedGroupId, setSelectedGroupId] = useState('');\n const [newGroupLabel, setNewGroupLabel] = useState('');\n const {\n showRestrictionForm,\n setShowRestrictionForm,\n conditions,\n selectedLayer,\n selectedField,\n fieldValue,\n setFieldValue,\n availableFields,\n selectedOp,\n handleRestrictionClick,\n handleLayerChange,\n handleFieldChange,\n handleAddCondition,\n handleRemoveCondition,\n handleOpChange,\n selectedSource,\n handleSourceChange,\n } = useRestrictionForm({\n entityKey: layerKey,\n restriction,\n availableLayers,\n onUpdateRestriction,\n idSuffix: 'lc',\n filterCurrentLayer: true,\n });\n\n const handleAssignClick = () => {\n setShowAssignForm(!showAssignForm);\n if (!showAssignForm) {\n // Reset form when opening\n setGroupAction(ASSIGN_EXISTING);\n const sortedGroups = orderBy(\n existingGroups || [],\n [(g) => g.label.toLowerCase()],\n ['asc'],\n );\n setSelectedGroupId(sortedGroups.length > 0 ? sortedGroups[0].id : '');\n setNewGroupLabel('');\n }\n };\n\n const handleSubmit = () => {\n if (onAssignToGroup) {\n if (groupAction === ASSIGN_EXISTING) {\n if (selectedGroupId) {\n onAssignToGroup(layerKey, selectedGroupId, null);\n setShowAssignForm(false);\n }\n } else if (groupAction === ASSIGN_NEW) {\n if (newGroupLabel.trim()) {\n onAssignToGroup(layerKey, null, newGroupLabel.trim());\n setShowAssignForm(false);\n }\n }\n }\n };\n\n return (\n <Card className=\"mb-3 border\">\n <Card.Header\n className={`${bgColor()} d-flex justify-content-between align-items-center`}\n >\n <span className={style || 'panel_generic_heading'}>\n {label || layerKey}\n </span>\n <div className=\"d-flex gap-2\">\n {layerData.wf && (\n <LBadge variant=\"outline\" color=\"warning\" text=\"workflow\" />\n )}\n {onUpdateRestriction && (\n <span\n title={\n layerData.wf\n ? 'Restrictions cannot be set on workflow layers'\n : 'Manage restrictions'\n }\n style={layerData.wf ? { cursor: 'not-allowed' } : {}}\n >\n <Button\n variant=\"primary\"\n size=\"xsm\"\n onClick={handleRestrictionClick}\n disabled={layerData.wf}\n style={layerData.wf ? { pointerEvents: 'none' } : {}}\n >\n <span>{FIcons.faGears}</span> {conditions.length > 0 && `(${conditions.length})`}\n </Button>\n </span>\n )}\n {onAssignToGroup && (\n <span\n title={\n layerData.wf\n ? 'A workflow layer cannot be assigned to a group'\n : 'Assign this layer to a group'\n }\n style={layerData.wf ? { cursor: 'not-allowed' } : {}}\n >\n <Button\n variant={showAssignForm ? 'light' : 'primary'}\n size=\"xsm\"\n onClick={handleAssignClick}\n disabled={layerData.wf}\n style={layerData.wf ? { pointerEvents: 'none' } : {}}\n >\n {showAssignForm ? 'Close' : (\n <>\n {FIcons.faLayerGroup} Assign to a group\n </>\n )}\n </Button>\n </span>\n )}\n </div>\n </Card.Header>\n <Card.Body className=\"py-2 px-3\">\n {children}\n {onUpdateRestriction && showRestrictionForm && !layerData.wf && (\n <RestrictionFormCard\n conditions={conditions}\n selectedLayer={selectedLayer}\n selectedField={selectedField}\n fieldValue={fieldValue}\n availableFields={availableFields}\n selectedOp={selectedOp}\n availableLayers={availableLayers}\n selectOptions={selectOptions}\n filterCurrentLayer\n currentEntityKey={layerKey}\n onClose={() => setShowRestrictionForm(false)}\n onLayerChange={handleLayerChange}\n onFieldChange={handleFieldChange}\n onValueChange={(e) => setFieldValue(e.target.value)}\n onAddCondition={handleAddCondition}\n onRemoveCondition={handleRemoveCondition}\n onOpChange={handleOpChange}\n selectedSource={selectedSource}\n onSourceChange={handleSourceChange}\n />\n )}\n {onAssignToGroup && showAssignForm && (\n <div className=\"mt-3 p-3 border rounded bg-light\">\n <div className=\"row align-items-start\">\n <div className=\"col-md-5\">\n <Form.Group>\n <Form.Check\n type=\"radio\"\n id={`${layerKey}-new`}\n label=\"Create new group\"\n checked={groupAction === ASSIGN_NEW}\n onChange={() => setGroupAction(ASSIGN_NEW)}\n />\n {groupAction === ASSIGN_NEW && (\n <Form.Control\n type=\"text\"\n size=\"sm\"\n placeholder=\"Enter group name\"\n className=\"mt-2\"\n value={newGroupLabel}\n onChange={(e) => setNewGroupLabel(e.target.value)}\n />\n )}\n </Form.Group>\n </div>\n <div className=\"col-md-5\">\n <Form.Group>\n <Form.Check\n type=\"radio\"\n id={`${layerKey}-existing`}\n label=\"Add to existing group\"\n checked={groupAction === ASSIGN_EXISTING}\n onChange={() => setGroupAction(ASSIGN_EXISTING)}\n />\n {groupAction === ASSIGN_EXISTING &&\n existingGroups &&\n existingGroups.length > 0 && (\n <Form.Select\n size=\"sm\"\n className=\"mt-2\"\n value={selectedGroupId}\n onChange={(e) => setSelectedGroupId(e.target.value)}\n >\n {orderBy(\n existingGroups,\n [(g) => g.label.toLowerCase()],\n ['asc'],\n ).map((group) => (\n <option key={group.id} value={group.id}>\n {group.label}\n </option>\n ))}\n </Form.Select>\n )}\n {groupAction === ASSIGN_EXISTING &&\n (!existingGroups || existingGroups.length === 0) && (\n <div className=\"text-muted small mt-2\">\n No existing groups available\n </div>\n )}\n </Form.Group>\n </div>\n <div className=\"col-md-2 text-end\">\n <Button\n variant=\"primary\"\n size=\"xsm\"\n onClick={handleSubmit}\n disabled={\n (groupAction === ASSIGN_EXISTING && !selectedGroupId) ||\n (groupAction === ASSIGN_NEW && !newGroupLabel.trim())\n }\n >\n Assign\n </Button>\n </div>\n </div>\n </div>\n )}\n </Card.Body>\n </Card>\n );\n}\n\nSimpleLayerPanel.propTypes = {\n layerKey: PropTypes.string.isRequired,\n layerData: PropTypes.shape({\n label: PropTypes.string,\n color: PropTypes.string,\n style: PropTypes.string,\n wf: PropTypes.bool,\n }).isRequired,\n children: PropTypes.node.isRequired,\n onAssignToGroup: PropTypes.func.isRequired,\n existingGroups: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n }),\n ),\n onUpdateRestriction: PropTypes.func,\n restriction: PropTypes.shape({\n op: PropTypes.number,\n cond: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n field: PropTypes.string,\n layer: PropTypes.string,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n }),\n ),\n }),\n availableLayers: PropTypes.arrayOf(\n PropTypes.shape({\n key: PropTypes.string.isRequired,\n label: PropTypes.string,\n fields: PropTypes.arrayOf(PropTypes.object),\n }),\n ),\n selectOptions: PropTypes.object,\n};\n\nSimpleLayerPanel.defaultProps = {\n existingGroups: [],\n onUpdateRestriction: null,\n restriction: null,\n availableLayers: [],\n selectOptions: {},\n};\n\nexport default SimpleLayerPanel;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Card, Button } from 'react-bootstrap';\nimport FIcons from '@components/icons/FIcons';\nimport { bgColor } from '@components/tools/format-utils';\nimport useRestrictionForm from '@ui/groups/useRestrictionForm';\nimport RestrictionFormCard from '@ui/groups/RestrictionFormCard';\n\n/**\n * SimpleLayerBlock - Simple display component for a layer within a group\n */\nfunction SimpleLayerBlock({\n layerKey,\n layerData,\n children,\n onRemoveFromGroup,\n groupId,\n onUpdateRestriction,\n restriction,\n availableLayers,\n selectOptions,\n}) {\n const { label, color, style } = layerData;\n const {\n showRestrictionForm,\n setShowRestrictionForm,\n conditions,\n selectedLayer,\n selectedField,\n fieldValue,\n setFieldValue,\n availableFields,\n selectedOp,\n handleRestrictionClick,\n handleLayerChange,\n handleFieldChange,\n handleAddCondition,\n handleRemoveCondition,\n handleOpChange,\n } = useRestrictionForm({\n entityKey: layerKey,\n restriction,\n availableLayers,\n onUpdateRestriction,\n idSuffix: 'lc',\n filterCurrentLayer: true,\n });\n\n const handleRemove = () => {\n if (onRemoveFromGroup && groupId) {\n onRemoveFromGroup(groupId, layerKey);\n }\n };\n\n return (\n <Card className=\"mb-2 border border-secondary\">\n <Card.Header\n className={`fs-6 ${bgColor()} d-flex justify-content-between align-items-center`}\n >\n <span className={style || 'panel_generic_subheading'}>\n {label || layerKey}\n </span>\n <div className=\"d-flex gap-2\">\n {onUpdateRestriction && (\n <span\n title={\n layerData.wf\n ? 'Restrictions cannot be set on workflow layers'\n : 'Manage restrictions'\n }\n style={layerData.wf ? { cursor: 'not-allowed' } : {}}\n >\n <Button\n variant=\"primary\"\n size=\"xsm\"\n onClick={handleRestrictionClick}\n disabled={layerData.wf}\n style={layerData.wf ? { pointerEvents: 'none' } : {}}\n >\n <span>{FIcons.faGears}</span> {conditions.length > 0 && `(${conditions.length})`}\n </Button>\n </span>\n )}\n {onRemoveFromGroup && (\n <Button\n variant=\"danger\"\n size=\"xsm\"\n onClick={handleRemove}\n title=\"Remove from group\"\n >\n {FIcons.faTrashCan}\n </Button>\n )}\n </div>\n </Card.Header>\n <Card.Body className=\"py-2 px-3\">\n {onUpdateRestriction && showRestrictionForm && !layerData.wf && (\n <RestrictionFormCard\n conditions={conditions}\n selectedLayer={selectedLayer}\n selectedField={selectedField}\n fieldValue={fieldValue}\n availableFields={availableFields}\n selectedOp={selectedOp}\n availableLayers={availableLayers}\n selectOptions={selectOptions}\n filterCurrentLayer\n currentEntityKey={layerKey}\n onClose={() => setShowRestrictionForm(false)}\n onLayerChange={handleLayerChange}\n onFieldChange={handleFieldChange}\n onValueChange={(e) => setFieldValue(e.target.value)}\n onAddCondition={handleAddCondition}\n onRemoveCondition={handleRemoveCondition}\n onOpChange={handleOpChange}\n />\n )}\n {children}\n </Card.Body>\n </Card>\n );\n}\n\nSimpleLayerBlock.propTypes = {\n layerKey: PropTypes.string.isRequired,\n layerData: PropTypes.shape({\n label: PropTypes.string,\n color: PropTypes.string,\n style: PropTypes.string,\n wf: PropTypes.bool,\n }).isRequired,\n children: PropTypes.node.isRequired,\n onRemoveFromGroup: PropTypes.func,\n groupId: PropTypes.string,\n onUpdateRestriction: PropTypes.func,\n restriction: PropTypes.shape({\n op: PropTypes.number,\n cond: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n field: PropTypes.string,\n layer: PropTypes.string,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n }),\n ),\n }),\n availableLayers: PropTypes.arrayOf(\n PropTypes.shape({\n key: PropTypes.string.isRequired,\n label: PropTypes.string,\n fields: PropTypes.arrayOf(PropTypes.object),\n }),\n ),\n selectOptions: PropTypes.object,\n};\n\nSimpleLayerBlock.defaultProps = {\n onRemoveFromGroup: null,\n groupId: null,\n onUpdateRestriction: null,\n restriction: null,\n availableLayers: [],\n selectOptions: {},\n};\n\nexport default SimpleLayerBlock;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Card, Button } from 'react-bootstrap';\nimport FIcons from '@components/icons/FIcons';\nimport useRestrictionForm from '@ui/groups/useRestrictionForm';\nimport RestrictionFormCard from '@ui/groups/RestrictionFormCard';\nimport SimpleLayerBlock from '@ui/groups/SimpleLayerBlock';\n\n/**\n * SimpleGroupPanel - Simple display component for a group of layers\n */\nfunction SimpleGroupPanel({\n groupId,\n groupLabel,\n groupPosition,\n layers,\n renderLayer,\n onRemove,\n onRemoveLayerFromGroup,\n onUpdateRestriction,\n restriction,\n availableLayers,\n onUpdateLayerRestriction,\n groupLayers,\n selectOptions,\n}) {\n const {\n showRestrictionForm,\n setShowRestrictionForm,\n conditions,\n selectedLayer,\n selectedField,\n fieldValue,\n setFieldValue,\n availableFields,\n selectedOp,\n handleRestrictionClick,\n handleLayerChange,\n handleFieldChange,\n handleAddCondition,\n handleRemoveCondition,\n handleOpChange,\n selectedSource,\n handleSourceChange,\n } = useRestrictionForm({\n entityKey: groupId,\n restriction,\n availableLayers,\n onUpdateRestriction,\n idSuffix: 'gc',\n filterCurrentLayer: false,\n });\n\n const handleRemoveGroup = () => {\n if (onRemove) {\n onRemove(groupId);\n }\n };\n\n return (\n <Card className=\"mb-3 border border-primary border-2\">\n <Card.Header className=\"d-flex justify-content-between align-items-center\">\n <span className=\"panel_generic_heading\">\n <span>{FIcons.faLayerGroup}</span>\n {groupLabel || groupId}\n {/* {groupPosition !== undefined && (\n <span className=\"text-muted small ms-2 fw-normal\">\n Position: {groupPosition}\n </span>\n )} */}\n </span>\n <div className=\"d-flex gap-2\">\n {onUpdateRestriction && (\n <Button\n variant=\"primary\"\n size=\"xsm\"\n onClick={handleRestrictionClick}\n title=\"Manage restrictions\"\n >\n <span>{FIcons.faGears}</span> {conditions.length > 0 && `(${conditions.length})`}\n </Button>\n )}\n {onRemove && (\n <Button\n variant=\"danger\"\n size=\"xsm\"\n onClick={handleRemoveGroup}\n title=\"Remove this group\"\n >\n {FIcons.faTrashCan}\n </Button>\n )}\n </div>\n </Card.Header>\n <Card.Body className=\"py-3 px-2 bg-light\">\n {showRestrictionForm && (\n <RestrictionFormCard\n conditions={conditions}\n selectedLayer={selectedLayer}\n selectedField={selectedField}\n fieldValue={fieldValue}\n availableFields={availableFields}\n selectedOp={selectedOp}\n availableLayers={availableLayers}\n selectOptions={selectOptions}\n filterCurrentLayer={false}\n currentEntityKey={groupId}\n onClose={() => setShowRestrictionForm(false)}\n onLayerChange={handleLayerChange}\n onFieldChange={handleFieldChange}\n onValueChange={(e) => setFieldValue(e.target.value)}\n onAddCondition={handleAddCondition}\n onRemoveCondition={handleRemoveCondition}\n onOpChange={handleOpChange}\n selectedSource={selectedSource}\n onSourceChange={handleSourceChange}\n />\n )}\n\n {layers &&\n layers.map((layer) => (\n <SimpleLayerBlock\n key={layer.key}\n layerKey={layer.key}\n layerData={layer.data}\n onRemoveFromGroup={onRemoveLayerFromGroup}\n groupId={groupId}\n onUpdateRestriction={onUpdateLayerRestriction}\n restriction={\n layer.data.cond_fields\n ? {\n op: layer.data.cond_operator ?? 1,\n cond: layer.data.cond_fields,\n }\n : null\n }\n availableLayers={groupLayers}\n selectOptions={selectOptions}\n >\n {renderLayer ? renderLayer(layer) : null}\n </SimpleLayerBlock>\n ))}\n </Card.Body>\n </Card>\n );\n}\n\nSimpleGroupPanel.propTypes = {\n groupId: PropTypes.string.isRequired,\n groupLabel: PropTypes.string.isRequired,\n groupPosition: PropTypes.number,\n layers: PropTypes.arrayOf(\n PropTypes.shape({\n key: PropTypes.string.isRequired,\n position: PropTypes.number,\n data: PropTypes.shape({}).isRequired,\n }),\n ).isRequired,\n renderLayer: PropTypes.func.isRequired,\n onRemove: PropTypes.func,\n onRemoveLayerFromGroup: PropTypes.func,\n onUpdateRestriction: PropTypes.func,\n restriction: PropTypes.shape({\n op: PropTypes.number,\n cond: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n field: PropTypes.string,\n layer: PropTypes.string,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n }),\n ),\n }),\n availableLayers: PropTypes.arrayOf(\n PropTypes.shape({\n key: PropTypes.string.isRequired,\n label: PropTypes.string,\n fields: PropTypes.arrayOf(PropTypes.object),\n }),\n ),\n onUpdateLayerRestriction: PropTypes.func,\n groupLayers: PropTypes.arrayOf(\n PropTypes.shape({\n key: PropTypes.string.isRequired,\n label: PropTypes.string,\n fields: PropTypes.arrayOf(PropTypes.object),\n }),\n ),\n selectOptions: PropTypes.object,\n};\n\nSimpleGroupPanel.defaultProps = {\n groupPosition: null,\n onRemove: null,\n onRemoveLayerFromGroup: null,\n onUpdateRestriction: null,\n restriction: null,\n availableLayers: [],\n onUpdateLayerRestriction: null,\n groupLayers: [],\n selectOptions: {},\n};\n\nexport default SimpleGroupPanel;\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Container } from 'react-bootstrap';\nimport { v4 as uuidv4 } from 'uuid';\nimport cloneDeep from 'lodash/cloneDeep';\nimport {\n organizeLayersForDisplay,\n removeGroup,\n addGroup,\n addLayerToGroup,\n removeLayerFromGroup,\n} from '@utils/template/group-handler';\nimport { reorderPositions } from '@utils/template/sorting-handler';\nimport {\n SimpleGroupPanel,\n SimpleLayerPanel,\n} from '@ui/groups/SimpleLayerDisplay';\n\n/**\n * SimpleGroupLayer - Simple display of layers with grouping\n */\nfunction SimpleGroupLayer({ klass, klassMetadata, onMetadataChange }) {\n // Local state to manage groups\n const [currentGroups, setCurrentGroups] = useState(\n klassMetadata?.groups || [],\n );\n const [currentRestrictions, setCurrentRestrictions] = useState(\n klassMetadata?.restrict || {},\n );\n\n // Update local state when klassMetadata changes\n useEffect(() => {\n setCurrentGroups(klassMetadata?.groups || []);\n setCurrentRestrictions(klassMetadata?.restrict || {});\n }, [klassMetadata]);\n\n /**\n * Sanitize restrictions when a layer is affected by grouping changes\n * Removes:\n * 1. The layer's own restrictions\n * 2. Any restrictions that reference this layer\n */\n const sanitizeRestrictionsForLayers = (layerKeys, restrictions) => {\n const updatedRestrictions = { ...restrictions };\n const layerKeysSet = new Set(layerKeys);\n\n // Remove restrictions that reference any of the affected layers\n Object.keys(updatedRestrictions).forEach((restrictionKey) => {\n const restriction = updatedRestrictions[restrictionKey];\n if (restriction && restriction.cond) {\n // Filter out conditions that reference any of the affected layers\n const filteredConditions = restriction.cond.filter(\n (cond) => !layerKeysSet.has(cond.layer),\n );\n\n if (filteredConditions.length === 0) {\n // If no conditions remain, remove the entire restriction\n delete updatedRestrictions[restrictionKey];\n } else if (filteredConditions.length !== restriction.cond.length) {\n // If some conditions were removed, update the restriction\n updatedRestrictions[restrictionKey] = {\n ...restriction,\n cond: filteredConditions,\n };\n }\n }\n });\n\n return updatedRestrictions;\n };\n\n /**\n * Helper function to reorder positions and update state\n * Handles the common pattern of reordering positions and notifying parent\n */\n const applyReorderingAndNotify = (\n updatedKlass,\n updatedGroups,\n updatedRestrictions,\n ) => {\n // Reorder positions\n const reordered = reorderPositions(updatedKlass.layers, {\n groups: updatedGroups,\n restrict: updatedRestrictions,\n });\n\n // Create klass with reordered layers, then deep clone for immutability\n const klassWithReorderedLayers = cloneDeep({\n ...updatedKlass,\n layers: reordered.layers,\n });\n\n // Update local state\n setCurrentGroups(reordered.metadata.groups || []);\n setCurrentRestrictions(reordered.metadata.restrict || {});\n\n // Notify parent component about the change if callback provided\n if (onMetadataChange) {\n onMetadataChange({\n groups: reordered.metadata.groups || [],\n restrict: reordered.metadata.restrict || {},\n klass: klassWithReorderedLayers,\n });\n }\n };\n\n /**\n * Handle group removal\n */\n const handleRemoveGroup = (groupId) => {\n // Create a copy to modify\n const updatedGroups = [...currentGroups];\n\n // Find the group to get its layers before removal\n const groupToRemove = updatedGroups.find((g) => g.id === groupId);\n const layersInGroup = groupToRemove ? groupToRemove.layers : [];\n\n const result = removeGroup(updatedGroups, groupId);\n\n if (result.success) {\n // Remove the restriction for this group if it exists\n let updatedRestrictions = { ...currentRestrictions };\n delete updatedRestrictions[groupId];\n\n // Sanitize restrictions for all layers that were in this group\n updatedRestrictions = sanitizeRestrictionsForLayers(\n layersInGroup,\n updatedRestrictions,\n );\n\n // IMPORTANT: Remove each layer's own restriction from klass\n const updatedKlass = { ...klass };\n if (updatedKlass.layers) {\n layersInGroup.forEach((layerKey) => {\n if (updatedKlass.layers[layerKey]) {\n delete updatedKlass.layers[layerKey].cond_fields;\n delete updatedKlass.layers[layerKey].cond_operator;\n }\n });\n }\n\n // Apply reordering and notify parent\n applyReorderingAndNotify(\n updatedKlass,\n updatedGroups,\n updatedRestrictions,\n );\n }\n };\n\n /**\n * Handle layer assignment to group\n */\n const handleAssignToGroup = (layerKey, existingGroupId, newGroupLabel) => {\n const updatedGroups = [...currentGroups];\n let result;\n\n if (existingGroupId) {\n // Add to existing group\n result = addLayerToGroup(\n updatedGroups,\n existingGroupId,\n layerKey,\n klass?.layers,\n );\n } else if (newGroupLabel) {\n // Check if a group with this label already exists\n const existingGroup = updatedGroups.find(\n (g) => g.label.toLowerCase() === newGroupLabel.toLowerCase(),\n );\n\n if (existingGroup) {\n // Group with this name already exists, add layer to it instead\n result = addLayerToGroup(\n updatedGroups,\n existingGroup.id,\n layerKey,\n klass?.layers,\n );\n } else {\n // Create new group with this layer\n // Generate a unique ID for the new group\n const newGroupId = `${uuidv4()}-g`;\n\n // Get the layer's position to use as the group position\n const layerPosition = klass?.layers?.[layerKey]?.position || 0;\n\n const newGroup = {\n id: newGroupId,\n label: newGroupLabel,\n layers: [layerKey],\n position: layerPosition, // Use layer's position for the new group\n };\n\n result = addGroup(updatedGroups, newGroup, klass?.layers);\n }\n }\n\n if (result && result.success) {\n // Sanitize restrictions for the assigned layer\n const updatedRestrictions = sanitizeRestrictionsForLayers(\n [layerKey],\n currentRestrictions,\n );\n\n // IMPORTANT: Remove the layer's own restriction from klass AND\n // clean up any other layers' restrictions that reference this layer\n const updatedKlass = cloneDeep(klass);\n if (updatedKlass.layers) {\n // Remove the assigned layer's own restrictions\n if (updatedKlass.layers[layerKey]) {\n delete updatedKlass.layers[layerKey].cond_fields;\n delete updatedKlass.layers[layerKey].cond_operator;\n }\n\n // Clean up other layers' restrictions that reference this layer\n Object.keys(updatedKlass.layers).forEach((otherLayerKey) => {\n const layer = updatedKlass.layers[otherLayerKey];\n if (layer.cond_fields && Array.isArray(layer.cond_fields)) {\n const filteredConditions = layer.cond_fields.filter(\n (cond) => cond.layer !== layerKey,\n );\n\n if (filteredConditions.length === 0) {\n // Remove the entire restriction if no conditions remain\n delete layer.cond_fields;\n delete layer.cond_operator;\n } else if (filteredConditions.length !== layer.cond_fields.length) {\n // Update with filtered conditions\n layer.cond_fields = filteredConditions;\n }\n }\n });\n }\n\n // Apply reordering and notify parent\n applyReorderingAndNotify(\n updatedKlass,\n updatedGroups,\n updatedRestrictions,\n );\n } else if (result && result.error) {\n // Handle error (you can add a toast notification here if needed)\n console.error('Error assigning to group:', result.error);\n }\n };\n\n /**\n * Handle removing a layer from a group\n */\n const handleRemoveLayerFromGroup = (groupId, layerKey) => {\n const updatedGroups = [...currentGroups];\n const result = removeLayerFromGroup(updatedGroups, groupId, layerKey);\n\n if (result && result.success) {\n // If the group is now empty, optionally remove the group\n if (result.isEmpty) {\n removeGroup(updatedGroups, groupId);\n }\n\n // Sanitize restrictions for the removed layer\n const updatedRestrictions = sanitizeRestrictionsForLayers(\n [layerKey],\n currentRestrictions,\n );\n\n // IMPORTANT: Remove the layer's own restriction from klass AND\n // clean up any other layers' restrictions that reference this layer\n const updatedKlass = cloneDeep(klass);\n if (updatedKlass.layers) {\n // Remove the removed layer's own restrictions\n if (updatedKlass.layers[layerKey]) {\n delete updatedKlass.layers[layerKey].cond_fields;\n delete updatedKlass.layers[layerKey].cond_operator;\n }\n\n // Clean up other layers' restrictions that reference this layer\n Object.keys(updatedKlass.layers).forEach((otherLayerKey) => {\n const layer = updatedKlass.layers[otherLayerKey];\n if (layer.cond_fields && Array.isArray(layer.cond_fields)) {\n const filteredConditions = layer.cond_fields.filter(\n (cond) => cond.layer !== layerKey,\n );\n\n if (filteredConditions.length === 0) {\n // Remove the entire restriction if no conditions remain\n delete layer.cond_fields;\n delete layer.cond_operator;\n } else if (filteredConditions.length !== layer.cond_fields.length) {\n // Update with filtered conditions\n layer.cond_fields = filteredConditions;\n }\n }\n });\n }\n\n // Apply reordering and notify parent\n applyReorderingAndNotify(\n updatedKlass,\n updatedGroups,\n updatedRestrictions,\n );\n } else if (result && result.error) {\n // Handle error\n console.error('Error removing layer from group:', result.error);\n }\n };\n\n /**\n * Handle updating restrictions for a group\n */\n const handleUpdateRestriction = (groupId, restriction) => {\n const updatedRestrictions = { ...currentRestrictions };\n\n if (\n restriction === null ||\n !restriction.cond ||\n restriction.cond.length === 0\n ) {\n // Remove restriction\n delete updatedRestrictions[groupId];\n } else {\n // Add or update restriction\n updatedRestrictions[groupId] = restriction;\n }\n\n setCurrentRestrictions(updatedRestrictions);\n\n // Notify parent component about the change if callback provided\n if (onMetadataChange) {\n onMetadataChange({\n groups: currentGroups,\n restrict: updatedRestrictions,\n });\n }\n };\n\n /**\n * Handle updating restrictions for a layer\n */\n const handleUpdateLayerRestriction = (layerKey, restriction) => {\n // Notify parent to update the klass object directly\n if (onMetadataChange) {\n // Deep copy klass to avoid mutation\n const updatedKlass = cloneDeep(klass);\n if (!updatedKlass.layers) {\n updatedKlass.layers = {};\n }\n if (!updatedKlass.layers[layerKey]) {\n return; // Layer doesn't exist\n }\n\n if (\n restriction === null ||\n !restriction.cond ||\n restriction.cond.length === 0\n ) {\n // Remove restriction\n delete updatedKlass.layers[layerKey].cond_fields;\n delete updatedKlass.layers[layerKey].cond_operator;\n } else {\n // Add or update restriction\n updatedKlass.layers[layerKey].cond_fields = restriction.cond;\n updatedKlass.layers[layerKey].cond_operator = restriction.op;\n }\n\n onMetadataChange({\n groups: currentGroups,\n restrict: currentRestrictions,\n klass: updatedKlass,\n });\n }\n };\n\n /**\n * Simple render function for layer content\n * Only displays basic layer information\n */\n const renderLayerContent = (layer) => {\n const { data } = layer;\n const { cols } = data;\n // TEMP.\n return <span />;\n // return (\n // <div className=\"text-muted small\">\n // <div>\n // Columns: {cols || 'N/A'} | Position: {layer.position}\n // </div>\n // </div>\n // );\n };\n\n // Get organized display structure using current groups\n const displayItems = organizeLayersForDisplay(\n klass?.layers || {},\n currentGroups,\n );\n\n // Use organizeLayersForDisplay to respect group structure and preserve array order\n const availableLayers = [];\n displayItems.forEach((item) => {\n if (item.type === 'group') {\n item.layers.forEach((layerItem) => {\n availableLayers.push({\n key: layerItem.key,\n label: layerItem.data.label,\n fields: layerItem.data.fields || [],\n });\n });\n } else {\n availableLayers.push({\n key: item.key,\n label: item.data.label,\n fields: item.data.fields || [],\n });\n }\n });\n\n // Get list of all grouped layer keys\n const groupedLayerKeys = new Set();\n currentGroups.forEach((group) => {\n if (group.layers) {\n group.layers.forEach((layerKey) => groupedLayerKeys.add(layerKey));\n }\n });\n\n // Get ungrouped layers for restriction selection\n const ungroupedLayers = availableLayers.filter(\n (layer) => !groupedLayerKeys.has(layer.key),\n );\n\n return (\n <Container fluid className=\"p-3\">\n {displayItems.length === 0 && (\n <div className=\"text-center text-muted py-5\">\n <p>No layers available</p>\n </div>\n )}\n\n {displayItems.map((item) => {\n if (item.type === 'group') {\n // Get layers in this group for restriction selection\n const groupLayers = item.layers.map((layer) => ({\n key: layer.key,\n label: layer.data.label || layer.key,\n fields: layer.data.fields || [],\n }));\n\n // Render grouped layers\n return (\n <SimpleGroupPanel\n key={item.id}\n groupId={item.id}\n groupLabel={item.label}\n groupPosition={item.position}\n layers={item.layers}\n renderLayer={renderLayerContent}\n onRemove={handleRemoveGroup}\n onRemoveLayerFromGroup={handleRemoveLayerFromGroup}\n onUpdateRestriction={handleUpdateRestriction}\n restriction={currentRestrictions[item.id]}\n availableLayers={ungroupedLayers}\n onUpdateLayerRestriction={handleUpdateLayerRestriction}\n groupLayers={groupLayers}\n selectOptions={klass?.select_options || {}}\n />\n );\n }\n\n // Render individual ungrouped layer\n return (\n <SimpleLayerPanel\n key={item.key}\n layerKey={item.key}\n layerData={item.data}\n onAssignToGroup={handleAssignToGroup}\n existingGroups={currentGroups}\n onUpdateRestriction={handleUpdateLayerRestriction}\n restriction={\n item.data.cond_fields\n ? {\n op: item.data.cond_operator ?? 1,\n cond: item.data.cond_fields,\n }\n : null\n }\n availableLayers={ungroupedLayers}\n selectOptions={klass?.select_options || {}}\n >\n {renderLayerContent(item)}\n </SimpleLayerPanel>\n );\n })}\n </Container>\n );\n}\n\nSimpleGroupLayer.propTypes = {\n klass: PropTypes.shape({\n layers: PropTypes.objectOf(PropTypes.object),\n }).isRequired,\n klassMetadata: PropTypes.shape({\n groups: PropTypes.arrayOf(PropTypes.object),\n restrict: PropTypes.objectOf(PropTypes.object),\n }),\n onMetadataChange: PropTypes.func,\n};\n\nSimpleGroupLayer.defaultProps = {\n klassMetadata: { groups: [], restrict: {} },\n onMetadataChange: null,\n};\n\nexport default SimpleGroupLayer;\n","import React, { useState } from 'react';\nimport { Button, Alert } from 'react-bootstrap';\nimport FIcons from '@components/icons/FIcons';\n\n/**\n * A collapsible notice button that displays important warnings\n * about layer grouping and restriction behavior\n */\nfunction NoticeBtn() {\n const [showNotice, setShowNotice] = useState(true);\n\n const toggleNotice = () => {\n setShowNotice(!showNotice);\n };\n\n return (\n <div className=\"d-flex flex-column align-items-start w-100\">\n <Button\n variant=\"danger\"\n size=\"xsm\"\n onClick={toggleNotice}\n className=\"mb-0\"\n >\n <span className=\"me-2\">{FIcons.faExclamationCircle}</span>\n Important Note\n <span className={`fa fa-chevron-${showNotice ? 'up' : 'down'} ms-2`} />\n </Button>\n {showNotice && (\n <Alert\n variant=\"danger\"\n className=\"mt-2 mb-0 w-100\"\n onClose={() => setShowNotice(false)}\n dismissible\n >\n <div className=\"small\">\n <p className=\"mb-2\">\n <span className=\"me-2\">{FIcons.faExclamationCircle}</span>\n <strong>Important — Layer Grouping Effects</strong>\n </p>\n <p className=\"mb-0 text-muted\">\n Assigning or removing a layer from a group automatically removes\n its restrictions and any restrictions that reference it, ensuring\n consistent restriction logic.\n </p>\n </div>\n </Alert>\n )}\n </div>\n );\n}\n\nexport default NoticeBtn;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal } from 'react-bootstrap';\nimport SimpleGroupLayer from '@/ui/groups/SimpleGroupLayer';\nimport NoticeBtn from '@ui/groups/NoticeBtn';\n\nfunction GroupModal({ generic, onSave, showProps }) {\n const { show, setShow } = showProps;\n const [updatedMetadata, setUpdatedMetadata] = useState(null);\n const [workingKlass, setWorkingKlass] = useState(null);\n const [workingMetadata, setWorkingMetadata] = useState(null);\n\n // Initialize working copies when modal opens\n React.useEffect(() => {\n if (show) {\n // Deep clone to avoid mutating original data\n setWorkingKlass(\n JSON.parse(JSON.stringify(generic?.properties_template || {})),\n );\n setWorkingMetadata(\n JSON.parse(\n JSON.stringify(generic?.metadata || { groups: [], restrict: {} }),\n ),\n );\n setUpdatedMetadata(null);\n }\n }, [show, generic]);\n\n if (!show) return null;\n\n const handleMetadataChange = (newMetadata) => {\n setUpdatedMetadata(newMetadata);\n // Update working copies\n if (newMetadata.klass) {\n setWorkingKlass(newMetadata.klass);\n }\n if (\n newMetadata.groups !== undefined ||\n newMetadata.restrict !== undefined\n ) {\n setWorkingMetadata({\n groups: newMetadata.groups,\n restrict: newMetadata.restrict,\n });\n }\n };\n\n const handleSave = () => {\n // Pass the complete working state, not just the last update\n onSave({\n groups: workingMetadata.groups,\n restrict: workingMetadata.restrict,\n klass: workingKlass,\n });\n setShow(false);\n };\n\n const handleCancel = () => {\n setUpdatedMetadata(null);\n setWorkingKlass(null);\n setWorkingMetadata(null);\n setShow(false);\n };\n\n // Don't render content until working copies are ready\n if (!workingKlass || !workingMetadata) {\n return null;\n }\n\n return (\n <Modal\n centered\n show={show}\n onHide={() => setShow(false)}\n size=\"xl\"\n backdrop=\"static\"\n scrollable\n style={{ maxWidth: '90%', margin: '0 auto' }}\n dialogClassName=\"h-auto\"\n >\n <Modal.Header closeButton>\n <Modal.Title>Group Layers and Set Conditions</Modal.Title>\n </Modal.Header>\n <Modal.Body\n className=\"d-flex flex-column p-3\"\n style={{ overflowY: 'auto', maxHeight: '70vh' }}\n >\n <div>\n <NoticeBtn />\n </div>\n <SimpleGroupLayer\n klass={workingKlass}\n klassMetadata={workingMetadata}\n onMetadataChange={handleMetadataChange}\n />\n </Modal.Body>\n <Modal.Footer className=\"justify-content-start\">\n <Button variant=\"secondary\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n variant=\"success\"\n onClick={handleSave}\n disabled={!updatedMetadata}\n >\n Save\n </Button>\n </Modal.Footer>\n </Modal>\n );\n}\n\nGroupModal.propTypes = {\n generic: PropTypes.object.isRequired,\n onSave: PropTypes.func.isRequired,\n showProps: PropTypes.shape({\n show: PropTypes.bool.isRequired,\n setShow: PropTypes.func.isRequired,\n }).isRequired,\n};\n\nexport default GroupModal;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport cloneDeep from 'lodash/cloneDeep';\nimport GroupModal from '@components/actions/GroupModal';\nimport Constants from '@components/tools/Constants';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\nimport Response from '@utils/response';\nimport { notifySuccess } from '@utils/template/designer-message';\n\nfunction GroupButton({ generic = {}, genericType, fnSave = () => {} }) {\n const [show, setShow] = useState(false);\n\n if (generic?.is_new) return null;\n if (Object.keys(generic.properties_template).length === 0) return null;\n\n const handleSave = (updatedMetadata) => {\n const groups = updatedMetadata.groups || [];\n const updates = cloneDeep(generic);\n\n // Update properties_template if klass was modified\n if (updatedMetadata.klass) {\n updates.properties_template = updatedMetadata.klass;\n }\n\n // If there are no groups, clear data\n if (groups.length === 0) {\n updates.metadata = {};\n updates.changed = true;\n fnSave(new Response(notifySuccess(), updates));\n return;\n }\n\n // Clean process: remove restrictions for non-existent groups\n const validGroupIds = new Set(groups.map((group) => group.id));\n const cleanedRestrictions = {};\n\n Object.keys(updatedMetadata.restrict || {}).forEach((groupId) => {\n if (validGroupIds.has(groupId)) {\n cleanedRestrictions[groupId] = updatedMetadata.restrict[groupId];\n }\n });\n\n // Save changes\n updates.metadata = {\n groups,\n restrict: cleanedRestrictions,\n };\n\n updates.changed = true;\n fnSave(new Response(notifySuccess(), updates));\n };\n\n return (\n <>\n <LTooltip idf=\"group_layer\">\n <Button\n className=\"fw-medium\"\n size=\"sm\"\n variant=\"primary\"\n onClick={() => setShow(true)}\n >\n {FIcons.faLayerGroup} Group & {FIcons.faGears} Restrictions\n </Button>\n </LTooltip>\n <GroupModal\n generic={generic}\n genericType={genericType}\n showProps={{ show, setShow }}\n onSave={handleSave}\n />\n </>\n );\n}\n\nGroupButton.propTypes = {\n generic: PropTypes.object,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n fnSave: PropTypes.func,\n};\nGroupButton.defaultProps = {\n generic: {},\n fnSave: () => {},\n};\nexport default GroupButton;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form } from 'react-bootstrap';\n\nconst GridSelect = (props) => {\n const { all, onChange, node, dVal } = props;\n return (\n <Form.Group>\n <Form.Control\n as=\"select\"\n placeholder=\"select...\"\n onChange={(e) => onChange(e, node)}\n defaultValue={dVal}\n id={`${node.data.id}__${dVal}`}\n >\n {all.map((e) => (\n <option key={e.key} value={e.val}>\n {e.lab}\n </option>\n ))}\n </Form.Control>\n </Form.Group>\n );\n};\n\nGridSelect.propTypes = {\n all: PropTypes.arrayOf(\n PropTypes.shape({\n key: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n val: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n lab: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n })\n ).isRequired,\n onChange: PropTypes.func.isRequired,\n node: PropTypes.object.isRequired,\n dVal: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n};\n\nexport default GridSelect;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport GridSelect from '@components/elements/GridSelect';\n\nconst SystemSelect = (props) => {\n const { unitConfig, selDefined, node } = props;\n const all = unitConfig.map(e => ({ key: e.value, val: e.value, lab: e.label }));\n const dVal = node.data.option_layers;\n return <GridSelect all={all} onChange={selDefined} node={node} dVal={dVal} />;\n};\n\nSystemSelect.propTypes = {\n unitConfig: PropTypes.arrayOf(PropTypes.object).isRequired,\n selDefined: PropTypes.func.isRequired,\n node: PropTypes.object.isRequired,\n};\n\nexport default SystemSelect;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form } from 'react-bootstrap';\n\nconst AttrChk = (props) => {\n const { chkAttr, node, attrOpts } = props;\n return (\n <>\n {attrOpts.map((e) => (\n <Form.Check\n key={e.value}\n inline\n checked={node.data.value.includes(e.value)}\n onChange={() =>\n chkAttr(e.value, !node.data.value.includes(e.value), node)\n }\n type=\"checkbox\"\n label={e.label}\n className=\"generic_attr_chks\"\n />\n ))}\n </>\n );\n};\n\nAttrChk.propTypes = {\n chkAttr: PropTypes.func.isRequired,\n node: PropTypes.object.isRequired,\n attrOpts: PropTypes.array.isRequired,\n};\n\nexport default AttrChk;\n","import React from 'react';\nimport { FieldTypes } from 'generic-ui-core';\nimport SystemSelect from '@components/elements/SystemSelect';\nimport { molOptions, samOptions } from '@components/tools/utils';\nimport AttrChk from '@components/elements/AttrChk';\n\nconst DefinedRenderer = props => {\n const { unitConfig, node, selDefined, chkAttr, selectOptions } = props;\n if (node.data.type === FieldTypes.F_SELECT) {\n if (selectOptions.length > 0) {\n return (\n <SystemSelect\n unitConfig={selectOptions}\n selDefined={selDefined}\n node={node}\n />\n );\n }\n return null;\n }\n if (node.data.type === FieldTypes.F_SYSTEM_DEFINED)\n return (\n <SystemSelect\n unitConfig={unitConfig}\n selDefined={selDefined}\n node={node}\n />\n );\n if (node.data.type === FieldTypes.F_DRAG_MOLECULE)\n return <AttrChk chkAttr={chkAttr} node={node} attrOpts={molOptions} />;\n if (node.data.type === FieldTypes.F_DRAG_SAMPLE)\n return <AttrChk chkAttr={chkAttr} node={node} attrOpts={samOptions} />;\n return node.data.value || null;\n};\n\nexport default DefinedRenderer;\n","/* eslint-disable react/forbid-prop-types */\nimport { AgGridReact } from 'ag-grid-react';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldTypes } from 'generic-ui-core';\nimport GenericSubField from '@components/models/GenericSubField';\nimport { AddRowBtn, DelRowBtn } from '@components/table/GridBtn';\nimport DefinedRenderer from '@components/elements/DefinedRenderer';\nimport Constants from '@components/tools/Constants';\n\nconst TypeSelect = ({ selType, node }) => (\n <Form.Group size=\"sm\" style={{ marginRight: '-10px', marginLeft: '-10px' }}>\n <Form.Control\n as=\"select\"\n placeholder=\"select the type\"\n onChange={(e) => selType(e, node)}\n defaultValue={node.data.type}\n >\n <option value=\"label\">label</option>\n <option value=\"number\">number</option>\n <option value=\"text\">text</option>\n <option value=\"system-defined\">System-Defined</option>\n </Form.Control>\n </Form.Group>\n);\n\nTypeSelect.propTypes = {\n selType: PropTypes.func.isRequired,\n node: PropTypes.object.isRequired,\n};\n\nexport default class GroupFields extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n unitConfig: props.unitsFields.map((e) => ({\n value: e.field,\n name: e.label,\n label: e.label,\n })),\n };\n this.autoSizeAll = this.autoSizeAll.bind(this);\n this.onGridReady = this.onGridReady.bind(this);\n this.delRow = this.delRow.bind(this);\n this.addRow = this.addRow.bind(this);\n this.selType = this.selType.bind(this);\n this.selDefined = this.selDefined.bind(this);\n this.refresh = this.refresh.bind(this);\n this.onCellValueChanged = this.onCellValueChanged.bind(this);\n this.columnDefs = [\n {\n rowDrag: true,\n headerName: 'Id',\n field: 'id',\n editable: false,\n minWidth: 100,\n width: 100,\n },\n {\n headerName: 'Data Type',\n field: 'type',\n editable: false,\n minWidth: 150,\n width: 150,\n cellRenderer: TypeSelect,\n cellRendererParams: { selType: this.selType },\n },\n {\n headerName: 'Default Value',\n field: 'value',\n editable: (e) => {\n if (e.data.type === FieldTypes.F_SYSTEM_DEFINED) return false;\n return true;\n },\n minWidth: 250,\n cellRenderer: DefinedRenderer,\n cellRendererParams: {\n unitConfig: this.state.unitConfig,\n selDefined: this.selDefined,\n },\n onCellValueChanged: this.onCellValueChanged,\n },\n {\n headerName: 'Option Layers(hidden)',\n field: 'option_layers',\n width: 10,\n hide: true,\n },\n {\n headerName: 'Value System(hidden)',\n field: 'value_system',\n width: 10,\n hide: true,\n },\n {\n headerName: '',\n colId: 'actions',\n headerComponent: AddRowBtn,\n headerComponentParams: { addRow: this.addRow },\n cellRenderer: DelRowBtn,\n cellRendererParams: { delRow: this.delRow },\n editable: false,\n filter: false,\n minWidth: 60,\n width: 60,\n suppressSizeToFit: true,\n pinned: 'left',\n },\n ];\n this.savedColumnState = null;\n }\n\n componentDidUpdate() {\n this.autoSizeAll();\n }\n\n // Helper method to safely get and save column state\n saveColumnState() {\n if (this.gridColumnApi && typeof this.gridColumnApi.getColumnState === 'function') {\n try {\n this.savedColumnState = this.gridColumnApi.getColumnState();\n return true;\n } catch (error) {\n console.warn('Failed to save column state:', error);\n }\n }\n return false;\n }\n\n // Helper method to safely restore column state\n restoreColumnState() {\n if (this.gridColumnApi && this.savedColumnState) {\n try {\n this.gridColumnApi.applyColumnState({ state: this.savedColumnState });\n return true;\n } catch (error) {\n console.warn('Failed to restore column state:', error);\n }\n }\n return false;\n }\n\n onGridReady(e) {\n this.gridApi = e.api;\n this.gridColumnApi = e.columnApi;\n this.autoSizeAll();\n }\n\n onCellValueChanged(params) {\n const { oldValue, newValue } = params;\n if (oldValue === newValue) return;\n this.saveColumnState();\n this.refresh();\n }\n\n autoSizeAll() {\n const { panelIsExpanded } = this.props;\n if (!panelIsExpanded) return;\n if (!this.gridApi) return;\n setTimeout(() => {\n this.gridApi.sizeColumnsToFit();\n }, 10);\n }\n\n delRow() {\n this.saveColumnState();\n const selectedData = this.gridApi.getSelectedRows();\n this.gridApi.applyTransaction({ remove: selectedData });\n this.refresh();\n }\n\n addRow() {\n this.saveColumnState();\n const newSub = new GenericSubField({ type: FieldTypes.F_TEXT, value: '' });\n const idx = this.gridApi.getDisplayedRowCount();\n this.gridApi.applyTransaction({ add: [newSub], addIndex: idx });\n this.refresh();\n }\n\n selType(e, node) {\n const { data } = node;\n if (e.target.value === data.type) {\n return;\n }\n this.saveColumnState();\n data.type = e.target.value;\n data.value = '';\n const { unitConfig } = this.state;\n if (data.type === FieldTypes.F_SYSTEM_DEFINED) {\n data.option_layers = (unitConfig || [])[0].value;\n data.value_system = ((\n this.props.unitsFields.find((u) => u.field === data.option_layers) || {}\n ).units || [])[0].key;\n } else {\n delete data.option_layers;\n delete data.value_system;\n }\n const { updSub, layerKey, field } = this.props;\n const rows = [];\n this.gridApi.forEachNode((nd) => {\n rows.push(nd.data);\n });\n field.sub_fields = rows;\n this.gridApi.setGridOption('rowData', rows);\n updSub(layerKey, field, () => {\n this.restoreColumnState();\n });\n }\n\n selDefined(e, node) {\n const { data } = node;\n if (e.target.value === data.option_layers) {\n return;\n }\n data.option_layers = e.target.value;\n data.value_system = ((\n this.props.unitsFields.find((u) => u.field === data.option_layers) || {}\n ).units || [])[0].key;\n this.saveColumnState();\n this.refresh();\n }\n\n refresh() {\n const { updSub, layerKey, field } = this.props;\n const rows = [];\n this.gridApi.forEachNode((nd) => {\n rows.push(nd.data);\n });\n field.sub_fields = rows;\n updSub(layerKey, field, () => {\n if (rows.length > 0) {\n this.restoreColumnState();\n }\n });\n }\n\n render() {\n const { field } = this.props;\n const sub = field.sub_fields || [];\n return (\n <div>\n <div\n className={Constants.GRID_THEME.QUARTZ.VALUE}\n style={{ width: '100%', height: '100%' }}\n >\n <AgGridReact\n enableColResize\n columnDefs={this.columnDefs}\n rowSelection={{\n mode: 'singleRow',\n checkboxes: false,\n enableClickSelection: true,\n }}\n onGridReady={this.onGridReady}\n rowData={sub}\n singleClickEdit\n stopEditingWhenCellsLoseFocus\n domLayout=\"autoHeight\"\n rowDragManaged\n onRowDragEnd={this.refresh}\n />\n </div>\n </div>\n );\n }\n}\n\nGroupFields.propTypes = {\n layerKey: PropTypes.string.isRequired,\n field: PropTypes.object.isRequired,\n updSub: PropTypes.func.isRequired,\n unitsFields: PropTypes.arrayOf(PropTypes.object).isRequired,\n panelIsExpanded: PropTypes.bool.isRequired,\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport GridSelect from '@components/elements/GridSelect';\n\nconst LayerSelect = (props) => {\n const { allLayers, selLayer, node } = props;\n const all = allLayers.map(e => ({ key: e.key, val: e.key, lab: e.key }));\n const dVal = node.data.layer;\n return <GridSelect all={all} onChange={selLayer} node={node} dVal={dVal} />;\n};\n\nLayerSelect.propTypes = {\n allLayers: PropTypes.arrayOf(PropTypes.object).isRequired,\n selLayer: PropTypes.func.isRequired,\n node: PropTypes.object.isRequired,\n};\n\nexport default LayerSelect;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { FieldTypes } from 'generic-ui-core';\nimport Constants from '@components/tools/Constants';\nimport GridSelect from '@components/elements/GridSelect';\n\nconst FieldSelect = (props) => {\n const { allLayers, selField, types, node, tableText } = props;\n const allFileds = ((allLayers.find(e => e.key === node.data.layer) || {}).fields || []).filter(e => (types || [FieldTypes.F_TEXT]).includes(e.type));\n const all = allFileds.map(e => ({ key: e.field, val: e.field, lab: e.field }));\n\n if (tableText && tableText === true) {\n const tableFileds = ((allLayers.find(e => e.key === node.data.layer) || {}).fields || []).filter(e => e.type === FieldTypes.F_TABLE);\n tableFileds.forEach((tbl) => {\n ((tbl.sub_fields || []).filter(e => e.type === FieldTypes.F_TEXT) || []).forEach((sf) => {\n const tfl = { key: `${tbl.field}${sf.id}`, val: `${tbl.field}[${Constants.SEPARATOR_TAG}]${sf.id}`, lab: `${tbl.field}.${sf.col_name}` };\n all.push(tfl);\n });\n });\n }\n const dVal = node.data.field;\n return <GridSelect all={all} onChange={selField} node={node} dVal={dVal} />;\n};\n\nFieldSelect.propTypes = {\n allLayers: PropTypes.arrayOf(PropTypes.object).isRequired,\n types: PropTypes.arrayOf(String).isRequired,\n tableText: PropTypes.bool,\n selField: PropTypes.func.isRequired,\n node: PropTypes.object.isRequired,\n};\n\nFieldSelect.defaultProps = { tableText: false };\n\nexport default FieldSelect;\n","/* eslint-disable react/forbid-prop-types */\nimport { AgGridReact } from 'ag-grid-react';\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport { FieldTypes } from 'generic-ui-core';\nimport GenericSubField from '@components/models/GenericSubField';\nimport { AddRowBtn, DelRowBtn } from '@components/table/GridBtn';\nimport LayerSelect from '@components/elements/LayerSelect';\nimport FieldSelect from '@components/elements/FieldSelect';\nimport Constants from '@components/tools/Constants';\n\nexport default class TextFormula extends React.Component {\n constructor(props) {\n super(props);\n this.autoSizeAll = this.autoSizeAll.bind(this);\n this.onGridReady = this.onGridReady.bind(this);\n this.delRow = this.delRow.bind(this);\n this.addRow = this.addRow.bind(this);\n this.selLayer = this.selLayer.bind(this);\n this.selField = this.selField.bind(this);\n this.refresh = this.refresh.bind(this);\n this.onCellValueChanged = this.onCellValueChanged.bind(this);\n this.savedColumnState = null;\n }\n\n componentDidUpdate(prevProps) {\n const { field, allLayers } = this.props;\n const sub = field.text_sub_fields || [];\n if (allLayers !== prevProps.allLayers && this.gridApi) {\n const columnDefs = this.gridApi.getColumnDefs();\n columnDefs.find(c => c.field === 'layer').cellRendererParams.allLayers =\n allLayers;\n columnDefs.find(c => c.field === 'field').cellRendererParams.allLayers =\n allLayers;\n this.gridApi.setGridOption('columnDefs', columnDefs);\n this.gridApi.setGridOption('rowData', sub);\n }\n // this.gridApi && this.gridApi.setRowData(sub);\n }\n\n // Helper method to safely get and save column state\n saveColumnState() {\n if (this.gridColumnApi && typeof this.gridColumnApi.getColumnState === 'function') {\n try {\n this.savedColumnState = this.gridColumnApi.getColumnState();\n return true;\n } catch (error) {\n console.warn('Failed to save column state:', error);\n }\n }\n return false;\n }\n\n // Helper method to safely restore column state\n restoreColumnState() {\n if (this.gridColumnApi && this.savedColumnState) {\n try {\n this.gridColumnApi.applyColumnState({ state: this.savedColumnState });\n return true;\n } catch (error) {\n console.warn('Failed to restore column state:', error);\n }\n }\n return false;\n }\n\n onGridReady(e) {\n const { allLayers } = this.props;\n this.gridApi = e.api;\n this.gridColumnApi = e.columnApi;\n const columnDefs = [\n {\n rowDrag: true,\n resizable: true,\n headerName: 'Id',\n field: 'id',\n editable: false,\n minWidth: 100,\n width: 100,\n },\n {\n headerName: 'Layer',\n field: 'layer',\n editable: false,\n minWidth: 150,\n width: 150,\n cellRenderer: LayerSelect,\n cellRendererParams: {\n allLayers,\n selLayer: this.selLayer,\n },\n },\n {\n headerName: 'Field (type: text)',\n field: 'field',\n editable: false,\n minWidth: 250,\n cellRenderer: FieldSelect,\n cellRendererParams: {\n allLayers,\n selField: this.selField,\n types: [FieldTypes.F_TEXT],\n tableText: true,\n },\n },\n {\n headerName: 'Separator',\n field: 'separator',\n editable: true,\n minWidth: 80,\n width: 80,\n onCellValueChanged: this.onCellValueChanged,\n },\n {\n headerName: '',\n colId: 'actions',\n headerComponent: AddRowBtn,\n headerComponentParams: { addRow: this.addRow },\n cellRenderer: DelRowBtn,\n cellRendererParams: { delRow: this.delRow },\n editable: false,\n filter: false,\n minWidth: 60,\n width: 60,\n suppressSizeToFit: true,\n pinned: 'left',\n },\n ];\n this.gridApi.setGridOption('columnDefs', columnDefs);\n this.autoSizeAll();\n }\n\n onCellValueChanged(params) {\n const { oldValue, newValue } = params;\n if (oldValue === newValue) return;\n this.saveColumnState();\n this.refresh();\n }\n\n delRow() {\n this.saveColumnState();\n const selectedData = this.gridApi.getSelectedRows();\n this.gridApi.applyTransaction({ remove: selectedData });\n this.refresh();\n }\n\n addRow() {\n this.saveColumnState();\n const { allLayers } = this.props;\n const lys = allLayers.filter(\n e => (e.fields || []).filter(f => f.type === FieldTypes.F_TEXT).length > 0\n );\n const ly = (lys.length > 0 && lys[0].key) || '';\n const fd =\n ly === ''\n ? ''\n : ((allLayers.find(e => e.key === ly) || {}).fields || []).filter(\n e => e.type === FieldTypes.F_TEXT\n )[0].field;\n const newSub = new GenericSubField({\n layer: ly,\n field: fd,\n separator: '.',\n });\n const idx = this.gridApi.getDisplayedRowCount();\n this.gridApi.applyTransaction({ add: [newSub], addIndex: idx });\n this.refresh();\n }\n\n selLayer(e, node) {\n const { data } = node;\n if (e.target.value === data.layer) {\n return;\n }\n this.saveColumnState();\n data.layer = e.target.value;\n const { allLayers } = this.props;\n const ly = data.layer;\n const fdf =\n ((allLayers.find(l => l.key === ly) || {}).fields || []).filter(\n l => l.type === FieldTypes.F_TEXT\n ) || [];\n const fd = (fdf.length > 0 && fdf[0].field) || '';\n data.field = fd;\n const { updSub, layerKey, field } = this.props;\n const rows = [];\n this.gridApi.forEachNode(nd => {\n rows.push(nd.data);\n });\n field.text_sub_fields = rows;\n this.gridApi.setGridOption('rowData', rows);\n updSub(layerKey, field, () => {\n this.restoreColumnState();\n });\n }\n\n selField(e, node) {\n const { data } = node;\n if (e.target.value === data.field) {\n return;\n }\n this.saveColumnState();\n data.field = e.target.value;\n this.refresh();\n }\n\n refresh() {\n const { updSub, layerKey, field } = this.props;\n const rows = [];\n this.gridApi.forEachNode(nd => {\n rows.push(nd.data);\n });\n field.text_sub_fields = rows;\n updSub(layerKey, field, () => {\n if (rows.length > 0) {\n this.restoreColumnState();\n }\n });\n }\n\n autoSizeAll() {\n const { panelIsExpanded } = this.props;\n if (!panelIsExpanded) return;\n if (!this.gridApi) return;\n setTimeout(() => {\n this.gridApi.sizeColumnsToFit();\n }, 10);\n }\n\n render() {\n const { field } = this.props;\n const sub = field.text_sub_fields || [];\n return (\n <div>\n <div\n style={{ width: '100%', height: '100%' }}\n className={Constants.GRID_THEME.QUARTZ.VALUE}\n >\n <AgGridReact\n enableColResize\n defaultColDef={{ suppressMovable: true }}\n rowSelection={{\n mode: 'singleRow',\n checkboxes: false,\n enableClickSelection: true,\n }}\n onGridReady={this.onGridReady}\n rowData={sub}\n singleClickEdit\n stopEditingWhenCellsLoseFocus\n domLayout=\"autoHeight\"\n rowDragManaged\n onRowDragEnd={this.refresh}\n />\n </div>\n </div>\n );\n }\n}\n\nTextFormula.propTypes = {\n layerKey: PropTypes.string.isRequired,\n field: PropTypes.object.isRequired,\n updSub: PropTypes.func.isRequired,\n allLayers: PropTypes.arrayOf(PropTypes.object),\n panelIsExpanded: PropTypes.bool.isRequired,\n};\n\nTextFormula.defaultProps = { allLayers: [] };\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport GridSelect from '@components/elements/GridSelect';\n\nconst TypeSelect = (props) => {\n const { all, selType, node } = props;\n const dVal = node.data.type;\n return <GridSelect all={all} onChange={selType} node={node} dVal={dVal} />;\n};\n\nTypeSelect.propTypes = {\n all: PropTypes.arrayOf(PropTypes.object).isRequired,\n selType: PropTypes.func.isRequired,\n node: PropTypes.object.isRequired\n};\n\nexport default TypeSelect;\n","/**\n * Shared grid configurations for AgGrid components\n */\nexport const labRowSelection = {\n mode: 'singleRow',\n checkboxes: false,\n enableClickSelection: true,\n headerCheckbox: false,\n};\n\nexport const labDefaultColDef = {\n suppressMovable: true,\n resizable: true,\n sortable: false,\n filter: false,\n};\n\nexport const labAutoSizeStrategy = {\n type: 'fitGridWidth',\n defaultMinWidth: 120,\n columnLimits: [\n {\n colId: 'id',\n minWidth: 60,\n },\n ],\n};","import React, {\n useRef,\n useCallback,\n useMemo,\n useState,\n useEffect,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport { AgGridReact } from 'ag-grid-react';\nimport cloneDeep from 'lodash/cloneDeep';\nimport sortBy from 'lodash/sortBy';\nimport { FieldTypes } from 'generic-ui-core';\nimport GenericSubField from '@components/models/GenericSubField';\nimport { AddRowBtn, DelRowBtn } from '@components/table/GridBtn';\nimport { defaultVSystem, isObject } from '@components/tools/utils';\nimport TypeSelect from '@components/elements/TypeSelect';\nimport DefinedRenderer from '@components/elements/DefinedRenderer';\nimport Constants from '@components/tools/Constants';\nimport findTypeLabel from '@components/tools/field-utils';\nimport { labRowSelection, labDefaultColDef } from '@utils/table/grid-config';\n\nconst TP_BASE = [\n FieldTypes.F_DRAG_MOLECULE,\n FieldTypes.F_SELECT,\n FieldTypes.F_SYSTEM_DEFINED,\n FieldTypes.F_TEXT,\n];\nconst TP_ELEMENT = sortBy(TP_BASE.concat([FieldTypes.F_DRAG_SAMPLE]));\nconst TP_LOCKED = [\n FieldTypes.F_DRAG_MOLECULE,\n FieldTypes.F_DRAG_SAMPLE,\n FieldTypes.F_SELECT,\n FieldTypes.F_SYSTEM_DEFINED,\n];\n\nconst FieldTable = (props) => {\n const { field, genericType, layerKey, selectOptions, unitsFields, updSub } =\n props;\n\n const gridRef = useRef(null);\n\n const [columnDefs, setColumnDefs] = useState([]);\n const [columnsReady, setColumnsReady] = useState(false);\n const [gridReady, setGridReady] = useState(false);\n const [rowData, setRowData] = useState([]);\n const [types] = useState(() => {\n return TP_ELEMENT.map((e) => ({ key: e, val: e, lab: findTypeLabel(e) }));\n });\n const [unitConfig] = useState(\n unitsFields.map((e) => ({\n value: e.field,\n name: e.label,\n label: e.label,\n })),\n );\n\n const defaultColDef = useMemo(() => labDefaultColDef, []);\n\n const onGridReady = useCallback(() => {\n setGridReady(true);\n }, []);\n\n const collectGridData = useCallback(() => {\n const rows = [];\n if (gridRef.current?.api) {\n gridRef.current.api.forEachNode((nd) => {\n rows.push({ ...nd.data });\n });\n }\n return rows;\n }, []);\n\n const update = useCallback(\n (value) => {\n const newField = cloneDeep(field);\n if (!value || value.length === 0) {\n newField.sub_fields = [];\n delete newField.sub_values;\n updSub(layerKey, newField);\n return;\n }\n\n newField.sub_fields = value;\n\n if (!newField.sub_values?.length) {\n updSub(layerKey, newField);\n return;\n }\n\n // Create a Set of valid field IDs for efficient lookup\n const validFieldIds = new Set(value.map((sf) => sf.id).filter(Boolean));\n\n // Clean up sub_values: remove entries that don't have corresponding sub_fields\n newField.sub_values = newField.sub_values.map((sv) => {\n const cleanedSv = {};\n // Preserve id if it exists in the current data\n if (sv.id) {\n cleanedSv.id = sv.id;\n } else {\n // Generate new ID if missing\n cleanedSv.id = GenericSubField.buildID();\n }\n Object.keys(sv).forEach((key) => {\n if (key === 'id') return;\n if (validFieldIds.has(key)) {\n cleanedSv[key] = sv[key];\n }\n });\n return cleanedSv;\n });\n\n // Prepare a template for new sub_value entries\n let newSv = new GenericSubField();\n value.map((e) => {\n if (e.type === FieldTypes.F_TEXT)\n return Object.assign(newSv, { [e.id]: '' });\n if (e.type === FieldTypes.F_SYSTEM_DEFINED) {\n const systemUnit = defaultVSystem(e.option_layers);\n return Object.assign(newSv, {\n [e.id]: { value_system: systemUnit?.key ?? '', value: '' },\n });\n }\n if (e.type === FieldTypes.F_SELECT) {\n const so = selectOptions?.[e.option_layers];\n return Object.assign(newSv, {\n [e.id]: { value: so?.options?.[0]?.key ?? '' },\n });\n }\n if (e.type.startsWith(FieldTypes.F_DRAG)) {\n return Object.assign(newSv, { [e.id]: {} });\n }\n return Object.assign(newSv, {\n [e.id]: { value: '', value_system: e.value_system },\n });\n });\n\n value.forEach((sf) => {\n if (!sf.id || !sf.type) return;\n\n // Add missing field if not present\n for (const row of newField.sub_values) {\n if (!row.hasOwnProperty(sf.id)) {\n row[sf.id] = { ...newSv[sf.id] };\n }\n }\n\n // Update sub_value entries\n newField.sub_values.forEach((sv) => {\n if (!(sf.id in sv)) return;\n\n // Handle F_DRAG types\n if (sf.type.startsWith(FieldTypes.F_DRAG)) {\n if (!isObject(sv[sf.id])) {\n sv[sf.id] = {};\n }\n sv[sf.id].value = {};\n delete sv[sf.id].value_system;\n }\n\n // Handle F_TEXT\n else if (sf.type === FieldTypes.F_TEXT) {\n sv[sf.id] = '';\n delete sv[sf.id].value_system;\n }\n\n // Handle F_SYSTEM_DEFINED\n else if (sf.type === FieldTypes.F_SYSTEM_DEFINED) {\n const systemUnit = defaultVSystem(sf.option_layers);\n if (!isObject(sv[sf.id])) {\n sv[sf.id] = { value: '', value_system: '' };\n }\n if (sv[sf.id].value == null) {\n sv[sf.id].value = '';\n }\n sv[sf.id].value_system = systemUnit?.key ?? '';\n }\n\n // Handle F_SELECT\n else if (sf.type === FieldTypes.F_SELECT) {\n if (!isObject(sv[sf.id])) {\n sv[sf.id] = {};\n }\n const so = selectOptions?.[sf.option_layers];\n sv[sf.id].value = so?.options?.[0]?.key ?? '';\n delete sv[sf.id].value_system;\n }\n });\n });\n updSub(layerKey, newField);\n },\n [field, layerKey, updSub, selectOptions],\n );\n\n const addRow = useCallback(() => {\n try {\n const newSub = new GenericSubField({\n col_name: '',\n type: FieldTypes.F_TEXT,\n value: '',\n });\n const idx = gridRef.current.api.getDisplayedRowCount();\n const res = gridRef.current.api.applyTransaction({\n add: [newSub],\n addIndex: idx,\n });\n if (res && res.add) {\n const rows = collectGridData();\n update(rows);\n }\n } catch (e) {\n console.error('Error adding row:', e);\n }\n }, [collectGridData, update]);\n\n const delRow = useCallback(() => {\n try {\n const selectedData = gridRef.current.api.getSelectedRows();\n const res = gridRef.current.api.applyTransaction({\n remove: selectedData,\n });\n if (res && res.remove) {\n const rows = collectGridData();\n update(rows);\n }\n } catch (e) {\n console.error('Error deleting row:', e);\n }\n }, [collectGridData, update]);\n\n const onCellValueChanged = useCallback(\n (params) => {\n const { oldValue, newValue } = params;\n if (oldValue === newValue) return;\n params.node.setDataValue(params.column.colId, newValue);\n const rows = collectGridData();\n update(rows);\n },\n [collectGridData, update],\n );\n\n const selType = useCallback(\n (e, node) => {\n const { data } = node;\n if (e.target.value === data.type) {\n return;\n }\n data.type = e.target.value;\n data.value = '';\n if (data.type === FieldTypes.F_SELECT) {\n data.option_layers = selectOptions[0]?.value;\n delete data.value_system;\n } else if (data.type === FieldTypes.F_SYSTEM_DEFINED) {\n data.option_layers = (unitConfig || [])[0].value;\n data.value_system = ((\n unitsFields.find((u) => u.field === data.option_layers) || {}\n ).units || [])[0].key;\n } else {\n delete data.option_layers;\n delete data.value_system;\n }\n const rows = collectGridData();\n update(rows);\n },\n [selectOptions, unitConfig, unitsFields, collectGridData, update],\n );\n\n const selDefined = useCallback(\n (e, node) => {\n const { data } = node;\n if (e.target.value === data.option_layers) {\n return;\n }\n data.option_layers = e.target.value;\n if (node.data.type === FieldTypes.F_SYSTEM_DEFINED) {\n data.value_system = ((\n unitsFields.find((u) => u.field === data.option_layers) || {}\n ).units || [])[0].key;\n }\n const rows = collectGridData();\n update(rows);\n },\n [unitsFields, collectGridData, update],\n );\n\n const chkAttr = useCallback(\n (val, chk, node) => {\n const { data } = node;\n const search = new RegExp(`${val};`, 'gi');\n if (chk) {\n data.value = data.value.concat(`${val};`);\n } else {\n data.value = data.value?.replace(search, '');\n }\n const rows = collectGridData();\n update(rows);\n },\n [collectGridData, update],\n );\n\n const buildColumnDefs = useCallback(() => {\n const colDefs = [\n {\n rowDrag: true,\n headerName: 'Id',\n field: 'id',\n editable: false,\n minWidth: 100,\n width: 100,\n },\n {\n headerName: 'Column Heading',\n field: 'col_name',\n editable: true,\n minWidth: 150,\n width: 150,\n onCellValueChanged,\n },\n {\n headerName: 'Column Type',\n field: 'type',\n editable: false,\n minWidth: 150,\n width: 150,\n cellRenderer: TypeSelect,\n cellRendererParams: {\n all: types,\n selType,\n },\n },\n {\n headerName: 'Default Value',\n field: 'value',\n editable: (e) => {\n return !TP_LOCKED.includes(e.data.type);\n },\n minWidth: 350,\n cellRenderer: DefinedRenderer,\n cellRendererParams: {\n unitConfig,\n selDefined,\n chkAttr,\n selectOptions,\n },\n onCellValueChanged,\n },\n {\n headerName: 'Option Layers(hidden)',\n field: 'option_layers',\n width: 10,\n hide: true,\n },\n {\n headerName: 'Value System(hidden)',\n field: 'value_system',\n width: 10,\n hide: true,\n },\n {\n headerName: '',\n colId: 'actions',\n headerComponent: AddRowBtn,\n headerComponentParams: { addRow },\n cellRenderer: DelRowBtn,\n cellRendererParams: { delRow },\n editable: false,\n filter: false,\n minWidth: 60,\n width: 60,\n suppressSizeToFit: true,\n pinned: 'left',\n },\n ];\n\n return colDefs;\n }, [unitConfig, selDefined, chkAttr, selectOptions, types, selType]);\n\n const onRowDragEnd = useCallback(() => {\n try {\n const rows = collectGridData();\n update(rows);\n } catch (error) {\n console.error('Error handling row drag:', error);\n }\n }, [collectGridData, update]);\n\n useEffect(() => {\n if (!gridReady) return;\n if (columnsReady) return;\n\n const columnState = gridRef.current.api.getColumnState();\n setColumnDefs(buildColumnDefs());\n\n setTimeout(() => {\n gridRef.current.api.applyColumnState({\n state: columnState,\n applyOrder: true,\n });\n setColumnsReady(true);\n }, 0);\n }, [gridReady, columnsReady, buildColumnDefs]);\n\n useEffect(() => {\n if (columnsReady) {\n setRowData(field.sub_fields || []);\n }\n }, [columnsReady, field.sub_fields]);\n\n useEffect(() => {\n if (gridRef.current?.api) {\n const valueColumn = columnDefs.find((col) => col.field === 'value');\n if (!valueColumn) return;\n\n const currentOptions = valueColumn.cellRendererParams.selectOptions;\n const optionsChanged =\n !currentOptions ||\n currentOptions.length !== selectOptions.length ||\n JSON.stringify(currentOptions) !== JSON.stringify(selectOptions);\n if (!optionsChanged) return;\n valueColumn.cellRendererParams.selectOptions = selectOptions;\n gridRef.current.api.setGridOption('columnDefs', columnDefs);\n }\n }, [selectOptions, columnDefs]);\n\n return (\n <div>\n <div\n style={{ width: '100%', height: '100%' }}\n className={Constants.GRID_THEME.QUARTZ.VALUE}\n >\n <AgGridReact\n columnDefs={columnDefs}\n defaultColDef={defaultColDef}\n domLayout=\"autoHeight\"\n enableColResize\n onGridReady={onGridReady}\n onRowDragEnd={onRowDragEnd}\n ref={gridRef}\n rowData={rowData}\n rowDragManaged\n rowSelection={labRowSelection}\n singleClickEdit\n stopEditingWhenCellsLoseFocus\n />\n </div>\n </div>\n );\n};\n\nFieldTable.propTypes = {\n genericType: PropTypes.string.isRequired,\n layerKey: PropTypes.string.isRequired,\n field: PropTypes.object.isRequired,\n updSub: PropTypes.func.isRequired,\n unitsFields: PropTypes.arrayOf(PropTypes.object).isRequired,\n selectOptions: PropTypes.arrayOf(PropTypes.object).isRequired,\n};\n\nexport default React.memo(FieldTable);\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, Card, Button, Form } from 'react-bootstrap';\nimport { v4 as uuidv4 } from 'uuid';\nimport { FieldTypes } from 'generic-ui-core';\nimport FIcons from '@components/icons/FIcons';\nimport OperatorSelector from '@ui/groups/OperatorSelector';\nimport Constants from '@components/tools/Constants';\nimport { fieldLabelFor, layerLabelFor, toBool, getConditionDisplay } from '@utils/pureUtils';\nimport { useDesignerContext } from '@components/designer/DesignerContext';\n\nconst ALLOWED_FIELD_TYPES = ['checkbox', 'text', 'select'];\n\n/**\n * FieldRestrictionModal - Modal for managing field restrictions\n * Uses the same clean UI pattern as the layer restriction inline form\n */\nfunction FieldRestrictionModal({\n showModal,\n field,\n layer,\n sortedLayers,\n onUpdate,\n onClose,\n groupedLayerKeys,\n sameGroupLayerKeys,\n selectOptions = {},\n}) {\n const [conditions, setConditions] = useState([]);\n const [selectedLayer, setSelectedLayer] = useState('');\n const [selectedField, setSelectedField] = useState('');\n const [fieldValue, setFieldValue] = useState('');\n const [displayAsValue, setDisplayAsValue] = useState('');\n const [availableFields, setAvailableFields] = useState([]);\n const [selectedOp, setSelectedOp] = useState(1);\n const [availableLayers, setAvailableLayers] = useState([]);\n const [initialConditions, setInitialConditions] = useState([]);\n const [initialOp, setInitialOp] = useState(1);\n const { klasses = [], genericType } = useDesignerContext();\n const [selectedSource, setSelectedSource] = useState('');\n\n // Filter available layers based on grouping\n useEffect(() => {\n if (!sortedLayers) {\n setAvailableLayers([]);\n return;\n }\n\n let filtered;\n if (sameGroupLayerKeys && sameGroupLayerKeys.length > 0) {\n // For grouped layers: only show layers in the same group\n filtered = sortedLayers.filter((l) => sameGroupLayerKeys.includes(l.key));\n } else {\n // For ungrouped layers: only show ungrouped layers\n const groupedSet = new Set(groupedLayerKeys || []);\n filtered = sortedLayers.filter((l) => !groupedSet.has(l.key));\n }\n\n setAvailableLayers(filtered);\n }, [sortedLayers, groupedLayerKeys, sameGroupLayerKeys]);\n\n // Load existing restrictions when component mounts or field changes\n useEffect(() => {\n if (!showModal) return;\n\n if (field?.cond_fields) {\n setConditions(field.cond_fields);\n setSelectedOp(field.cond_operator ?? 1);\n setInitialConditions(field.cond_fields);\n setInitialOp(field.cond_operator ?? 1);\n } else {\n setConditions([]);\n setSelectedOp(1);\n setInitialConditions([]);\n setInitialOp(1);\n }\n\n // Initialize with first available layer\n if (availableLayers && availableLayers.length > 0) {\n const firstLayer = availableLayers[0];\n setSelectedLayer(firstLayer.key);\n updateAvailableFields(firstLayer);\n }\n }, [showModal, field, availableLayers]);\n\n const updateAvailableFields = (selectedLayer) => {\n if (!selectedLayer || !selectedLayer.fields) {\n setAvailableFields([]);\n return;\n }\n\n let filteredFields = selectedLayer.fields.filter((f) =>\n ALLOWED_FIELD_TYPES.includes(f.type),\n );\n\n // If the selected layer is the same as the current field's layer,\n // exclude the current field itself\n if (selectedLayer.key === layer.key) {\n filteredFields = filteredFields.filter((f) => f.field !== field.field);\n }\n\n setAvailableFields(filteredFields);\n\n if (filteredFields.length > 0) {\n setSelectedField(filteredFields[0].field);\n } else {\n setSelectedField('');\n }\n };\n\n const handleLayerChange = (e) => {\n const layerKey = e.target.value;\n setSelectedLayer(layerKey);\n const layer = availableLayers.find((l) => l.key === layerKey);\n if (layer) {\n updateAvailableFields(layer);\n }\n setFieldValue('');\n };\n\n const handleAddCondition = () => {\n if (!selectedLayer || !selectedField) {\n return;\n }\n\n // Get the field type to determine if we need to convert the value\n const selectedLayerObj = availableLayers.find(\n (l) => l.key === selectedLayer,\n );\n const selectedFieldObj = selectedLayerObj?.fields?.find(\n (f) => f.field === selectedField,\n );\n const isCheckbox = selectedFieldObj?.type === FieldTypes.F_CHECKBOX;\n\n // Convert to boolean for checkbox fields using toBool utility\n let conditionValue = fieldValue.trim();\n if (isCheckbox) {\n conditionValue = toBool(fieldValue);\n }\n\n const newCondition = {\n id: `${uuidv4()}-fc`,\n field: selectedField,\n layer: selectedLayer,\n value: conditionValue,\n label: displayAsValue.trim(), // For \"Display as\" feature with Match One\n };\n\n const updatedConditions = [...conditions, newCondition];\n setConditions(updatedConditions);\n setFieldValue('');\n setDisplayAsValue('');\n };\n\n const handleAddSourceCondition = () => {\n if (!selectedSource) return;\n\n const newCondition = {\n id: `${uuidv4()}-fc`,\n field: 'TYPE',\n layer: 'SRC-EL',\n value: selectedSource,\n };\n\n const updatedConditions = [...conditions, newCondition];\n setConditions(updatedConditions);\n };\n\n const handleRemoveCondition = (conditionId) => {\n const updatedConditions = conditions.filter((c) => c.id !== conditionId);\n setConditions(updatedConditions);\n };\n\n const handleOpChange = (newOp) => {\n setSelectedOp(newOp);\n };\n\n const handleSave = () => {\n if (onUpdate) {\n if (conditions.length === 0) {\n // Remove restriction properties\n const updatedField = { ...field };\n delete updatedField.cond_fields;\n delete updatedField.cond_operator;\n onUpdate(updatedField);\n } else {\n onUpdate({\n ...field,\n cond_fields: conditions,\n cond_operator: selectedOp,\n });\n }\n }\n onClose();\n };\n\n const handleCancel = () => {\n // Restore initial state\n setConditions(initialConditions);\n setSelectedOp(initialOp);\n onClose();\n };\n\n if (!showModal) {\n return null;\n }\n\n return (\n <Modal\n centered\n backdrop=\"static\"\n dialogClassName=\"gu_modal-68w\"\n show={showModal}\n onHide={handleCancel}\n >\n <Modal.Header closeButton>\n <Modal.Title>\n Field Restriction Setting [ {field.label} ] in [ {layer.label} ]\n </Modal.Title>\n </Modal.Header>\n <Modal.Body style={{ maxHeight: '70vh', overflow: 'auto' }}>\n <Card className=\"border-0\">\n <Card.Body className=\"p-0\">\n <OperatorSelector\n selectedOp={selectedOp}\n onOpChange={handleOpChange}\n />\n {conditions.length > 0 && (\n <div className=\"mb-3\">\n <small className=\"text-muted d-block mb-2\">\n Existing Conditions:\n </small>\n {conditions.map((cond) => {\n const { layerTitle, fieldTitle, valueTitle } =\n getConditionDisplay(cond, availableLayers, klasses);\n return (\n <div\n key={cond.id}\n className=\"d-flex align-items-center gap-2 mb-2 p-2 border rounded bg-white\"\n >\n <div className=\"flex-grow-1\">\n <small>\n <strong>{layerTitle}</strong> → {fieldTitle} =\n &quot;{valueTitle}&quot;\n {cond.label && (\n <span className=\"text-muted\">\n {' '}\n [Display as: <em>{cond.label}</em>]\n </span>\n )}\n </small>\n </div>\n <Button\n variant=\"danger\"\n size=\"xsm\"\n onClick={() => handleRemoveCondition(cond.id)}\n title=\"Remove condition\"\n >\n {FIcons.faTrashCan}\n </Button>\n </div>\n );\n })}\n </div>\n )}\n\n <div className=\"border-top pt-3\">\n <small className=\"text-muted d-block mb-2\">\n Add New Condition:\n </small>\n <Form.Group className=\"mb-2\">\n <Form.Label className=\"small\">Select Layer (appearance order)</Form.Label>\n <Form.Select\n size=\"sm\"\n value={selectedLayer}\n onChange={handleLayerChange}\n >\n {availableLayers &&\n availableLayers.map((layer) => (\n <option key={layer.key} value={layer.key}>\n {layer.label || layer.key} ({layer.key})\n </option>\n ))}\n </Form.Select>\n </Form.Group>\n\n <div className=\"row mb-3 align-items-start\">\n <div className=\"col-md-4\">\n <Form.Group>\n <Form.Label className=\"small\">Select Field</Form.Label>\n <Form.Select\n size=\"sm\"\n value={selectedField}\n onChange={(e) => setSelectedField(e.target.value)}\n disabled={availableFields.length === 0}\n >\n {availableFields.map((field) => (\n <option key={field.field} value={field.field}>\n {field.label || field.field} ({field.field}, type: {field.type})\n </option>\n ))}\n </Form.Select>\n <Form.Text muted>\n Eligible fields (checkbox, text, select)\n </Form.Text>\n </Form.Group>\n </div>\n\n <div className=\"col-md-4\">\n <Form.Group>\n <Form.Label className=\"small\">Enter Value</Form.Label>\n {(() => {\n // Get selected field details and options for select fields\n const selectedLayerObj = availableLayers.find(\n (l) => l.key === selectedLayer,\n );\n const selectedFieldObj = selectedLayerObj?.fields?.find(\n (f) => f.field === selectedField,\n );\n const isSelectField = selectedFieldObj?.type === 'select';\n const isCheckboxField =\n selectedFieldObj?.type === FieldTypes.F_CHECKBOX;\n const selectFieldOptions =\n isSelectField && selectedFieldObj?.option_layers\n ? selectOptions[selectedFieldObj.option_layers]\n ?.options || []\n : [];\n\n // Render based on field type\n if (isSelectField) {\n return (\n <Form.Select\n size=\"sm\"\n value={fieldValue}\n onChange={(e) => setFieldValue(e.target.value)}\n >\n <option value=\"\">Select a value...</option>\n {selectFieldOptions.map((option) => (\n <option key={option.key} value={option.key}>\n {option.label}\n </option>\n ))}\n </Form.Select>\n );\n }\n\n if (isCheckboxField) {\n return (\n <Form.Select\n size=\"sm\"\n value={fieldValue}\n onChange={(e) => setFieldValue(e.target.value)}\n >\n <option value=\"false\">Unchecked (false)</option>\n <option value=\"true\">Checked (true)</option>\n </Form.Select>\n );\n }\n\n return (\n <Form.Control\n type=\"text\"\n size=\"sm\"\n placeholder=\"Enter expected value\"\n value={fieldValue}\n onChange={(e) => setFieldValue(e.target.value)}\n />\n );\n })()}\n <Form.Text muted>\n {(() => {\n const selectedLayerObj = availableLayers.find(\n (l) => l.key === selectedLayer,\n );\n const selectedFieldObj = selectedLayerObj?.fields?.find(\n (f) => f.field === selectedField,\n );\n if (selectedFieldObj?.type === 'select') {\n return 'Select from predefined options';\n }\n if (selectedFieldObj?.type === FieldTypes.F_CHECKBOX) {\n return 'Select the expected checkbox state';\n }\n return 'Enter the expected value (case-sensitive)';\n })()}\n </Form.Text>\n </Form.Group>\n </div>\n\n <div className=\"col-md-4\">\n <Form.Group>\n <Form.Label className=\"small\">\n Display as (optional)\n {selectedOp !== 1 && (\n <span className=\"text-muted\"> - Match One only</span>\n )}\n </Form.Label>\n <div className=\"d-flex gap-2 align-items-start\">\n <Form.Control\n type=\"text\"\n size=\"sm\"\n placeholder=\"Alternative name\"\n value={displayAsValue}\n onChange={(e) => setDisplayAsValue(e.target.value)}\n disabled={selectedOp !== 1}\n style={{ flex: 1 }}\n />\n <Button\n variant=\"success\"\n size=\"sm\"\n onClick={handleAddCondition}\n disabled={\n !selectedLayer ||\n !selectedField ||\n availableFields.length === 0\n }\n style={{ flexShrink: 0 }}\n title=\"Add condition\"\n >\n {FIcons.faPlus}\n </Button>\n </div>\n </Form.Group>\n </div>\n </div>\n\n {genericType === Constants.GENERIC_TYPES.DATASET && (\n <div className=\"row align-items-start\">\n <div className=\"col-md-12\">\n <Form.Group className=\"border-top pt-3\">\n <Form.Label className=\"small\">Reference Source</Form.Label>\n <div className=\"d-flex gap-2 align-items-start\">\n <Form.Select\n size=\"sm\"\n value={selectedSource}\n onChange={(e) => setSelectedSource(e.target.value)}\n disabled={klasses.length === 0}\n style={{ flex: 1 }}\n >\n <option value=\"\">Select a source...</option>\n {klasses.map((klass) => (\n <option key={klass.name} value={klass.name}>\n {klass.label || klass.name} ({klass.name})\n </option>\n ))}\n </Form.Select>\n <Button\n variant=\"success\"\n size=\"sm\"\n onClick={handleAddSourceCondition}\n disabled={!selectedSource || klasses.length === 0}\n style={{ flexShrink: 0 }}\n title=\"Add condition\"\n >\n {FIcons.faPlus}\n </Button>\n </div>\n <Form.Text muted>Eligible reference sources</Form.Text>\n </Form.Group>\n </div>\n </div>\n )}\n </div>\n </Card.Body>\n </Card>\n </Modal.Body>\n <Modal.Footer className=\"justify-content-start\">\n <Button variant=\"secondary\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button variant=\"success\" onClick={handleSave}>\n Save\n </Button>\n </Modal.Footer>\n </Modal>\n );\n}\n\nFieldRestrictionModal.propTypes = {\n showModal: PropTypes.bool.isRequired,\n field: PropTypes.shape({\n label: PropTypes.string.isRequired,\n field: PropTypes.string.isRequired,\n cond_fields: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n field: PropTypes.string,\n layer: PropTypes.string,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n label: PropTypes.string,\n }),\n ),\n cond_operator: PropTypes.number,\n }).isRequired,\n layer: PropTypes.shape({\n key: PropTypes.string.isRequired,\n label: PropTypes.string,\n }).isRequired,\n sortedLayers: PropTypes.arrayOf(\n PropTypes.shape({\n key: PropTypes.string.isRequired,\n label: PropTypes.string,\n fields: PropTypes.array,\n }),\n ).isRequired,\n onUpdate: PropTypes.func.isRequired,\n onClose: PropTypes.func.isRequired,\n groupedLayerKeys: PropTypes.arrayOf(PropTypes.string),\n sameGroupLayerKeys: PropTypes.arrayOf(PropTypes.string),\n selectOptions: PropTypes.object,\n};\n\nFieldRestrictionModal.defaultProps = {\n groupedLayerKeys: [],\n sameGroupLayerKeys: null,\n selectOptions: {},\n};\n\nexport default FieldRestrictionModal;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Dropdown } from 'react-bootstrap';\nimport FieldRestrictionModal from '@components/designer/template/FieldRestrictionModal';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\nimport TAs from '@components/tools/TAs';\n\nfunction ConditionFieldBtn(props) {\n const {\n field,\n fnUpdateSub,\n layer,\n sortedLayers,\n as,\n groupedLayerKeys,\n sameGroupLayerKeys,\n selectOptions,\n disabled,\n } = props;\n const [show, setShow] = useState(false);\n\n const onClick = () => {\n if (disabled) return;\n setShow(true);\n };\n\n const onClose = () => {\n setShow(false);\n };\n\n const handleUpdate = (updatedField) => {\n fnUpdateSub(layer.key, updatedField);\n };\n\n const conditionBtn = (\n <Button\n variant={field?.cond_fields?.length > 0 || false ? 'warning' : 'light'}\n className=\"rounded-0\"\n onClick={onClick}\n disabled={disabled}\n >\n {FIcons.faGears}\n </Button>\n );\n\n const conditionMenu = (\n <Dropdown.Item\n eventKey=\"_field_cond_menu_item\"\n onClick={onClick}\n className={field?.cond_fields?.length > 0 ? 'gu-menu-item-cond' : ''}\n disabled={disabled}\n >\n {FIcons.faGears}&nbsp;&nbsp;{TAs.restriction_setting}\n </Dropdown.Item>\n );\n\n return (\n <>\n {as === 'menu' ? (\n conditionMenu\n ) : (\n <LTooltip\n idf={disabled ? 'restric_not_on_required' : 'restriction_setting'}\n >\n {conditionBtn}\n </LTooltip>\n )}\n <FieldRestrictionModal\n showModal={show}\n field={field}\n layer={layer}\n sortedLayers={sortedLayers}\n onUpdate={handleUpdate}\n onClose={onClose}\n groupedLayerKeys={groupedLayerKeys}\n sameGroupLayerKeys={sameGroupLayerKeys}\n selectOptions={selectOptions}\n />\n </>\n );\n}\n\nConditionFieldBtn.propTypes = {\n field: PropTypes.object.isRequired,\n fnUpdateSub: PropTypes.func.isRequired,\n layer: PropTypes.object.isRequired,\n sortedLayers: PropTypes.array.isRequired,\n as: PropTypes.string,\n groupedLayerKeys: PropTypes.arrayOf(PropTypes.string),\n sameGroupLayerKeys: PropTypes.arrayOf(PropTypes.string),\n selectOptions: PropTypes.object,\n disabled: PropTypes.bool,\n};\n\nConditionFieldBtn.defaultProps = {\n as: 'menu',\n groupedLayerKeys: [],\n sameGroupLayerKeys: null,\n selectOptions: {},\n disabled: false,\n};\n\nexport default ConditionFieldBtn;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Col, Form, Row } from 'react-bootstrap';\nimport { UnsVocBase } from '@components/elements/BaseFields';\nimport FIcons from '@components/icons/FIcons';\nimport TermLink from '@components/fields/TermLink';\n\nconst VocabForm = ({ init }) => {\n const { label: initLabel, field: initField, ontology: initOntology } = init;\n const {\n description = [''],\n short_form: shortForm = '',\n label: ontologyLabel = '',\n } = initOntology || {};\n const term =\n TermLink(initOntology, ontologyLabel) || '(No terminology linked yet)';\n\n return (\n <Row>\n <Col md={6}>\n <h4>\n <b>{initLabel}</b>\n </h4>\n <Form>\n <Form.Group className=\"props_text\">\n <Form.Label>Field Name</Form.Label>\n <Form.Control type=\"text\" value={initField} readOnly disabled />\n </Form.Group>\n <Form.Group className=\"props_text\">\n <Form.Label>Display Name</Form.Label>\n <Form.Control\n type=\"text\"\n value={initLabel}\n placeholder=\"Give a name to display on the UI. Empty is allow.\"\n readOnly\n disabled\n />\n </Form.Group>\n <Form.Group className=\"p-3 mt-3\">\n <Form.Label>Who can use this vocabulary?</Form.Label>\n <Form.Check type=\"radio\">\n <Form.Check.Input type=\"radio\" checked readOnly />\n <Form.Check.Label>\n <span className=\"gu-mr-1\">{FIcons.faGlobe}</span>\n <b>LabIMotion Generic Module</b>\n <div>\n This vocabulary can be used by any designer within templates.\n Designers can reuse fields, with references automatically\n inheriting values from the original fields.\n </div>\n </Form.Check.Label>\n </Form.Check>\n </Form.Group>\n </Form>\n </Col>\n <Col md={6}>\n <h4 className=\"gu-ontology-text-link\">{term}</h4>\n <Form>\n <Form.Group className=\"props_text\">\n <Form.Label>Term ID</Form.Label>\n <Form.Control type=\"text\" value={shortForm} readOnly disabled />\n </Form.Group>\n <Form.Group>\n <Form.Label>Description</Form.Label>\n <Form.Control\n as=\"textarea\"\n value={description.join('\\n')}\n readOnly\n disabled\n rows={6}\n style={{ resize: 'none' }}\n />\n </Form.Group>\n <div className=\"pt-3 mt-3\">\n <span className=\"me-2\">{FIcons.faCircleInfo}</span>\n <span>\n <b>Please note:</b>\n <p className=\"mb-0\">\n 1. When no terminology is linked, this field cannot be saved as\n a LabIMotion Vocabulary (Lab-Vocab) for future use in the\n template.\n </p>\n <p className=\"mb-0\">\n 2. The following field types are not supported:\n </p>\n <ul>\n {UnsVocBase.map((field) => (\n <li key={field.value}>{field.label}</li>\n ))}\n </ul>\n </span>\n </div>\n </Form>\n </Col>\n </Row>\n );\n};\n\nVocabForm.propTypes = {\n init: PropTypes.shape({\n label: PropTypes.string,\n field: PropTypes.string,\n ontology: PropTypes.shape({\n description: PropTypes.arrayOf(PropTypes.string),\n short_form: PropTypes.string,\n label: PropTypes.string,\n }),\n }).isRequired,\n};\n\nexport default VocabForm;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal } from 'react-bootstrap';\n\nconst LayerSaveModal = ({ acts, title, showProps, close, children }) => {\n const { show } = showProps;\n if (!show) return null;\n\n return (\n <Modal centered show={show} onHide={close} dialogClassName=\"gu_modal-68w\">\n <div\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n onKeyDown={(e) => e.key === 'Enter' && e.stopPropagation()}\n role=\"button\"\n tabIndex={0}\n >\n <Modal.Header closeButton>\n <Modal.Title>{title}</Modal.Title>\n </Modal.Header>\n <Modal.Body>{children}</Modal.Body>\n <Modal.Footer className=\"justify-content-start\">{acts.map((act) => act)}</Modal.Footer>\n </div>\n </Modal>\n );\n};\n\nLayerSaveModal.propTypes = {\n acts: PropTypes.arrayOf(PropTypes.node),\n title: PropTypes.string.isRequired,\n showProps: PropTypes.shape({\n show: PropTypes.bool.isRequired,\n setShow: PropTypes.func.isRequired,\n }).isRequired,\n close: PropTypes.func.isRequired,\n children: PropTypes.node.isRequired,\n};\n\nLayerSaveModal.defaultProps = { acts: [] };\n\nexport default LayerSaveModal;\n","import Api from '@utils/api';\nimport Response from '@utils/response';\nimport { mc2res } from '@components/tools/format-utils';\n\nconst API_VOC = 'vocab';\n\nclass VocabManager {\n // a private static method\n static #exec = async (endpoint, method = 'GET', params = null) => {\n const fullEndpoint = `${API_VOC}/${endpoint}`;\n const res = params\n ? await Api.execApiData(params, fullEndpoint)\n : await Api.execApi(fullEndpoint, method);\n // return mc2res(res.mc, res.msg || '');\n // { mc: 'aaa', msg: 'xxx', data: JSON Object or array}\n return new Response(mc2res(res.mc, res.msg || ''), { data: res.data });\n };\n\n static saveVocabulary = (params = {}) =>\n VocabManager.#exec('save_vocabulary', 'POST', params);\n\n static deleteVocabulary = (vocabularyId) =>\n VocabManager.#exec(`delete_vocabulary/${vocabularyId}`, 'DELETE');\n\n static getVocabulary = (vocabularyId) =>\n VocabManager.#exec(`get_vocabulary/${vocabularyId}`);\n\n static getAllVocabularies = () => VocabManager.#exec('get_all_vocabularies');\n}\n\nexport default VocabManager;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Alert, Button } from 'react-bootstrap';\nimport FIcons from '@components/icons/FIcons';\n\nconst NotificationMessage = ({ notify, onClose }) => {\n if (notify === null) return null;\n\n return (\n <Alert variant={notify.isSuccess ? 'success' : 'danger'}>\n <span>\n <b>{notify.title}</b>\n {`: ${notify.msg}`}\n </span>\n <Button\n size=\"xsm\"\n className=\"gu_button_right\"\n onClick={(e) => {\n e.stopPropagation();\n onClose();\n }}\n variant=\"light\"\n >\n {FIcons.faTimes}\n </Button>\n </Alert>\n );\n};\n\nNotificationMessage.propTypes = {\n notify: PropTypes.shape({\n isSuccess: PropTypes.bool,\n title: PropTypes.string,\n msg: PropTypes.string,\n }),\n onClose: PropTypes.func.isRequired,\n};\n\nNotificationMessage.defaultProps = {\n notify: null,\n};\n\nexport default NotificationMessage;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useEffect, useReducer } from 'react';\nimport { Button } from 'react-bootstrap';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { FieldTypes } from 'generic-ui-core';\nimport VocabForm from '@components/designer/template/VocabForm';\nimport LayerSaveModal from '@components/elements/LayerSaveModal';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\nimport VocabManager from '@utils/vocMgr';\nimport NotificationMessage from '@components/designer/template/NotificationMessage';\nimport TermLink from '@components/fields/TermLink';\nimport { UnsVocBase } from '@components/elements/BaseFields';\n\nconst extractOptionsFromField = (_field, _data) => {\n const options = { select_options: {} };\n const field = cloneDeep(_field);\n const data = cloneDeep(_data);\n // Extract the \"select\"/\"select-multi\" type fields\n if ([FieldTypes.F_SELECT, FieldTypes.F_SELECT_MULTI].includes(field.type)) {\n const optionLayerKey = field.option_layers;\n // Check if it has options for this layer key\n if (data?.properties_template?.select_options?.[optionLayerKey]) {\n // Add the entire matching object to the result\n options.select_options[optionLayerKey] =\n data.properties_template.select_options[optionLayerKey];\n options.select_options[optionLayerKey].desc = optionLayerKey;\n }\n }\n // Check if any options, otherwise return null\n if (Object.keys(options.select_options || {}).length === 0) {\n return null;\n }\n return options;\n};\n\nconst initialState = {\n show: false,\n field: null,\n layer: null,\n data: null,\n notify: null,\n};\n\nconst reducer = (state, action) => {\n switch (action.type) {\n case 'reset':\n return {\n ...initialState,\n field: action.payload.field,\n layer: action.payload.layer,\n data: action.payload.data,\n };\n default: {\n return { ...state, [action.type]: action.payload };\n }\n }\n};\n\nconst VocabSaveBtn = (props) => {\n const {\n field: initialField,\n data: initialData,\n layer: initialLayer,\n genericType,\n } = props;\n\n // 1. State declarations\n const [state, dispatch] = useReducer(reducer, {\n ...initialState,\n field: initialField,\n data: initialData,\n layer: initialLayer,\n });\n\n // 2. Side effects\n useEffect(() => {\n dispatch({ type: 'field', payload: initialField });\n }, [initialField]);\n\n useEffect(() => {\n dispatch({ type: 'data', payload: initialData });\n }, [initialData]);\n\n useEffect(() => {\n dispatch({ type: 'layer', payload: initialLayer });\n }, [initialLayer]);\n\n const handleSave = async () => {\n const extra = {\n source: genericType,\n source_id: state.data.identifier,\n layer_id: state.layer.key,\n };\n const options = extractOptionsFromField(state.field, state.data);\n const saveInput = {\n ...state.field,\n ...options,\n term_id: state.field.ontology?.short_form,\n ...extra,\n voc: { ...extra },\n };\n // change the attribute 'field' to 'name', and 'type' to 'field_type'\n saveInput.name = saveInput.field;\n saveInput.field_type = saveInput.type;\n delete saveInput.field;\n delete saveInput.type;\n const res = await VocabManager.saveVocabulary(saveInput);\n dispatch({ type: 'notify', payload: res.notify });\n };\n\n const handleReset = () => {\n dispatch({\n type: 'reset',\n payload: { field: initialField, data: initialData, layer: initialLayer },\n });\n };\n\n // 3. Render-related variables\n const saveButton = (\n <Button\n key=\"success\"\n variant=\"success\"\n onClick={handleSave}\n disabled={\n !TermLink(state.field.ontology, state.field.ontology?.label) ||\n UnsVocBase.some((item) => item.name === state.field.type)\n }\n >\n Save\n </Button>\n );\n\n const resetButton = (\n <Button key=\"secondary\" variant=\"secondary\" onClick={handleReset}>\n Close\n </Button>\n );\n\n // 4. Return statement (JSX)\n return (\n <>\n <LTooltip idf=\"voc_add\">\n <Button\n variant=\"light\"\n onClick={() => dispatch({ type: 'show', payload: true })}\n >\n {FIcons.faSpellCheck}\n </Button>\n </LTooltip>\n <LayerSaveModal\n acts={[saveButton, resetButton]}\n title=\"LabIMotion Vocabulary (Lab-Vocab)\"\n showProps={{\n show: state.show,\n setShow: (value) => dispatch({ type: 'show', payload: value }),\n }}\n close={handleReset}\n >\n <div>\n <NotificationMessage\n notify={state.notify}\n onClose={() => dispatch({ type: 'notify', payload: null })}\n />\n <VocabForm init={state.field} />\n </div>\n </LayerSaveModal>\n </>\n );\n};\n\nexport default VocabSaveBtn;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, OverlayTrigger, Tooltip } from 'react-bootstrap';\n\nfunction LLabel({ children, tooltip, isCheckLabel }) {\n const LabelComponent = isCheckLabel ? Form.Check.Label : Form.Label;\n\n const label = (\n <LabelComponent className=\"fw-bold mt-2\">{children}</LabelComponent>\n );\n\n if (tooltip == null || React.Children.count(tooltip) === 0) {\n return label;\n }\n\n return (\n <OverlayTrigger\n overlay={<Tooltip>{tooltip}</Tooltip>}\n placement=\"top\"\n delay={{ show: 250, hide: 400 }}\n >\n {label}\n </OverlayTrigger>\n );\n}\n\nLLabel.propTypes = {\n children: PropTypes.node.isRequired,\n tooltip: PropTypes.node,\n isCheckLabel: PropTypes.bool,\n};\n\nLLabel.defaultProps = {\n tooltip: null,\n isCheckLabel: false,\n};\n\nexport default LLabel;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Col, Form, OverlayTrigger, Popover } from 'react-bootstrap';\nimport { v4 as uuid } from 'uuid';\nimport { genUnit, getUnitSystem } from 'generic-ui-core';\nimport { getFieldProps, genUnitSup } from '@components/tools/utils';\nimport LLabel from '@components/shared/LLabel';\n\nconst getNextUnit = (currentUnit, units) => {\n // Find the index of the current unit in the units array\n const currentIndex = units.findIndex((unit) => unit.key === currentUnit);\n\n // If the unit is not found, throw an error\n if (currentIndex === -1) return null;\n\n // Get the next index, wrapping around to 0 if we're at the end of the array\n const nextIndex = (currentIndex + 1) % units.length;\n\n // Return the object of the next unit\n return units[nextIndex];\n};\n\nconst convertUnits = (fromUnit, toUnit, value, units) => {\n // Find the 'from' and 'to' units in the units array\n const from = units.find((unit) => unit.key === fromUnit);\n const to = units.find((unit) => unit.key === toUnit);\n\n // If either unit is not found, throw an error\n if (!from || !to) return null;\n\n // Convert the value from the 'from' unit to the 'to' unit\n const result = value * (from.nm / to.nm);\n return parseFloat(result.toFixed(5));\n};\n\nconst PopUnits = (si = []) => {\n const tbl = si.units.map((e) => (\n <div key={uuid()}>\n {genUnitSup(e.label)}\n <br />\n </div>\n ));\n return (\n <Popover id=\"popover-positioned-scrolling-left\">\n <Popover.Header as=\"h3\">Available units</Popover.Header>\n <Popover.Body>{tbl}</Popover.Body>\n </Popover>\n );\n};\n\nconst InputUnit = (props) => {\n const { fObj, fnUnitChange } = props;\n const { option_layers: si, value_system: valueSystem } = fObj;\n const sis = getUnitSystem();\n const fSi = sis.filter((e) => e.field === si)[0];\n if (!fSi || Object.keys(fSi).length === 0) return null; // return if SI is not found\n\n const defaultUnit = fSi?.units[0];\n const unit = genUnit(fSi.field, valueSystem || defaultUnit?.key);\n if (!unit || Object.keys(unit).length === 0) return null; // return if unit is not found\n\n const onClick = () => {\n const nextUnit = getNextUnit(unit.key, fSi.units);\n fnUnitChange({ data: nextUnit.key });\n };\n\n return (\n <Form.Group as={Col}>\n <LLabel>\n <>\n {getFieldProps('supportedUnits').label}&nbsp;\n {getFieldProps('supportedUnits').fieldTooltip}\n </>\n </LLabel>\n <div className=\"d-flex align-items-center\">\n <OverlayTrigger\n animation\n placement=\"top\"\n root\n trigger={['hover', 'focus']}\n overlay={PopUnits(fSi)}\n >\n <Button onClick={onClick} variant=\"success\" size=\"sm\">\n {genUnitSup(unit.label) || ''}\n </Button>\n </OverlayTrigger>\n </div>\n </Form.Group>\n );\n};\n\nInputUnit.propTypes = {\n fObj: PropTypes.object.isRequired,\n fnUnitChange: PropTypes.func.isRequired,\n};\n\nexport default InputUnit;\n","import React from 'react';\nimport { Button } from 'react-bootstrap';\nimport { buildTS } from 'generic-ui-core';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\n\nconst OntCmp = (_ontology, _sharp = 'link') => {\n const toUrl = buildTS(_ontology);\n if (!toUrl) return null;\n const { label } = _ontology;\n const cls = _sharp === 'link' ? '' : 'ms-1 badge rounded-pill bg-success';\n const content = _sharp === 'link' ? FIcons.faCircleQuestion : label;\n\n return (\n <LTooltip idf={`link_term.${label}`}>\n <Button\n variant=\"link\"\n href={toUrl}\n target=\"_blank\"\n onClick={(e) => e.stopPropagation()}\n className={cls}\n >\n {content}\n </Button>\n </LTooltip>\n );\n};\n\nexport default OntCmp;\n","import React, { useState, useEffect } from 'react';\nimport AsyncSelect from 'react-select/async';\nimport { buildTSS } from 'generic-ui-core';\n\nconst constructOption = data => {\n if (data) {\n const desc = data.description?.join('') || '';\n return {\n value: data.id,\n label: (\n <>\n {data.label}\n <span>\n <span className=\"gu-ontology-select-code-short badge\">\n {data.short_form}\n </span>\n &nbsp;\n <span className=\"gu-ontology-select-code-prefix badge\">\n {data.ontology_prefix}\n </span>\n {desc ? (\n <>\n <br />\n <span style={{ fontSize: '11px' }}>{desc}</span>\n </>\n ) : null}\n </span>\n </>\n ),\n };\n }\n return data;\n};\n\nconst constructOptions = data => {\n if (!data) {\n return [];\n }\n return data.map(d => {\n const option = Object.assign(constructOption(d), { data: d });\n return option;\n });\n};\n\nconst OntologySelect = props => {\n const { fnSelected, defaultValue } = props;\n const [, setData] = useState(null);\n\n const fetchData = async inputValue => {\n try {\n if (!inputValue.trim() || inputValue.length < 2) {\n return [];\n }\n\n const response = await fetch(buildTSS(inputValue));\n if (!response.ok) {\n throw new Error('Network request failed');\n }\n const result = await response.json();\n return constructOptions(result?.response?.docs);\n } catch (error) {\n console.error('Error fetching data:', error);\n return [];\n }\n };\n\n useEffect(() => {\n fetchData('').then(setData);\n }, []);\n\n return (\n <AsyncSelect\n backspaceRemoves\n isClearable\n value={defaultValue}\n valueKey=\"value\"\n labelKey=\"label\"\n loadOptions={(inputValue, callback) => {\n fetchData(inputValue).then(options => callback(options));\n }}\n onChange={selected => {\n fnSelected(selected);\n }}\n styles={{\n container: baseStyles => {\n return {\n ...baseStyles,\n width: '100%',\n };\n },\n control: base => {\n return {\n ...base,\n height: '36px',\n minHeight: '36px',\n minWidth: '200px',\n border: '1px solid #ccc',\n };\n },\n }}\n />\n );\n};\n\nexport default OntologySelect;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, Button, Popover, OverlayTrigger } from 'react-bootstrap';\nimport FIcons from '@components/icons/FIcons';\n\nexport const ModalOntologySelect = props => {\n const { showProps, modalComponent } = props;\n const { show, setShow } = showProps;\n\n return (\n <Modal centered backdrop=\"static\" show={show} onHide={() => setShow(false)}>\n <Modal.Header closeButton>\n <Modal.Title>Select Term</Modal.Title>\n </Modal.Header>\n <Modal.Body>{modalComponent}</Modal.Body>\n </Modal>\n );\n};\n\nModalOntologySelect.propTypes = {\n modalComponent: PropTypes.element.isRequired,\n showProps: PropTypes.object.isRequired,\n};\n\nexport const ButtonOntologySelect = props => {\n const { modalComponent, customClass } = props;\n const [show, setShow] = useState(false);\n const popover = (\n <Popover id=\"popover-positioned-scrolling-left\">\n <div className=\"p-3\">Link to ontology terminology</div>\n </Popover>\n );\n return (\n <>\n <OverlayTrigger\n animation\n placement=\"top\"\n root\n trigger={['hover', 'focus', 'click']}\n overlay={popover}\n >\n <Button\n variant=\"light\"\n onClick={() => setShow(true)}\n className=\"flex-shrink-0\"\n >\n {customClass ? (\n <span>\n <span style={{ color: 'green' }}>{FIcons.faCircleCheck}</span>\n &nbsp;\n </span>\n ) : null}\n Term\n </Button>\n </OverlayTrigger>\n <ModalOntologySelect\n modalComponent={modalComponent}\n showProps={{ show, setShow }}\n />\n </>\n );\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport { Col, Form } from 'react-bootstrap';\nimport Select from 'react-select';\nimport { FieldTypes } from 'generic-ui-core';\nimport OntologySelect from '@components/elements/OntologySelect';\nimport { ButtonOntologySelect } from '@components/fields/ModalOntologySelect';\nimport { getFieldProps, frmSelSty } from '@components/tools/utils';\nimport LLabel from '@components/shared/LLabel';\nimport FIcons from '@components/icons/FIcons';\n\nconst ColWidthOpts = [\n { value: 1, label: '1' },\n { value: 2, label: '2' },\n { value: 3, label: '3' },\n { value: 4, label: '4' },\n { value: 5, label: '5' },\n { value: 6, label: '6' },\n];\n\nexport const renderBlank = () => (\n <Form.Group as={Col}>\n <LLabel>&nbsp;</LLabel>\n </Form.Group>\n);\n\nexport const renderDatetimeRange = ({ fieldObject }) =>\n [FieldTypes.F_DATETIME_RANGE].includes(fieldObject.type) ? (\n <Form.Group className=\"gu-form-group\">\n <Col sm={3}>\n <span className=\"gu-form-group-label\">&nbsp;</span>\n </Col>\n <Col sm={9}>\n <div style={{ fontSize: '10px' }}>\n <b>Datetime Range: </b>\n This type is utilized to record the <b>Start</b> time and <b>Stop</b>{' '}\n time. The <b>Duration</b> is calculated automatically.\n <br />\n Please note that for layout reasons, it will be in a separate row and\n divided into 4 columns.\n </div>\n </Col>\n </Form.Group>\n ) : null;\n\nexport const renderDummyFieldGroup = ({ fieldObject }) =>\n [FieldTypes.F_DUMMY].includes(fieldObject.type) ? (\n <Form.Group as={Col}>\n <LLabel>\n <>({fieldObject.type})</>\n </LLabel>\n <Form.Control\n type=\"text\"\n name={`f_${fieldObject.field}`}\n defaultValue={`${fieldObject.type}, an invisible entry (${fieldObject.field})`}\n disabled\n />\n </Form.Group>\n ) : null;\n\nexport const renderNameField = ({\n layer,\n fieldObject,\n field,\n fnChange,\n fnOntChange,\n}) => (\n <Form.Group as={Col}>\n <LLabel>\n <>\n {getFieldProps(field).label}&nbsp;\n {getFieldProps(field).fieldTooltip}\n </>\n </LLabel>\n <div className=\"d-flex align-items-center\">\n <Form.Control\n type=\"text\"\n name={`f_${field}`}\n defaultValue={fieldObject[field]}\n disabled={field === 'field'}\n onChange={(event) =>\n fnChange(\n event,\n fieldObject[field],\n fieldObject.field,\n layer.key,\n field,\n FieldTypes.F_TEXT,\n )\n }\n className=\"me-0\"\n />\n <ButtonOntologySelect\n modalComponent={\n <OntologySelect\n fnSelected={fnOntChange}\n defaultValue={fieldObject?.ontology}\n />\n }\n customClass={fieldObject?.ontology ? 'gu-ontology-selected' : null}\n />\n </div>\n </Form.Group>\n);\n\nexport const renderTextFieldGroup = ({\n layer,\n fieldObject,\n field,\n fnChange,\n xs,\n}) =>\n [FieldTypes.F_DUMMY].includes(fieldObject.type) ? null : (\n <Form.Group as={Col} xs={xs}>\n <LLabel>\n <>\n {getFieldProps(field).label}&nbsp;\n {getFieldProps(field).fieldTooltip}\n </>\n </LLabel>\n <Form.Control\n type=\"text\"\n name={`f_${field}`}\n defaultValue={fieldObject[field]}\n disabled={field === 'field'}\n onChange={(event) =>\n fnChange(\n event,\n fieldObject[field],\n fieldObject.field,\n layer.key,\n field,\n FieldTypes.F_TEXT,\n )\n }\n />\n </Form.Group>\n );\n\nexport const renderCheck = ({\n layer,\n fieldObject,\n fnChange,\n field,\n note,\n disabled = false,\n isLabel = false,\n xs,\n skipLabel = false,\n}) => {\n const label = (\n <>\n {getFieldProps(field).label}&nbsp;\n {getFieldProps(field).fieldTooltip}\n </>\n );\n return (\n <Form.Group as={Col} xs={xs}>\n {!skipLabel && (\n <LLabel>\n {isLabel ? label : <>&nbsp;</>}\n </LLabel>\n )}\n <Form.Check type=\"checkbox\" id={`frmChk_${layer.key}_f_${field}`}>\n <Form.Check.Input\n className=\"mt-2\"\n type=\"checkbox\"\n checked={!!fieldObject[field]}\n disabled={disabled}\n onChange={(event) =>\n fnChange(\n event,\n fieldObject[field] || false,\n fieldObject.field,\n layer.key,\n field,\n 'checkbox',\n )\n }\n />\n {isLabel ? null : (\n <Form.Check.Label className=\"mt-1\">\n <b>{label}</b>\n </Form.Check.Label>\n )}\n </Form.Check>\n {note && <Form.Text className=\"text-muted\">{note}</Form.Text>}\n </Form.Group>\n );\n};\n\nexport const renderColWidth = ({ layer, fieldObject, field, fnChange }) => (\n <Form.Group as={Col}>\n <LLabel>\n <>\n {getFieldProps(field).label}&nbsp;\n {getFieldProps(field).fieldTooltip}\n </>\n </LLabel>\n <div style={{ display: 'flex' }}>\n <span style={{ width: '100%' }}>\n <Select\n styles={frmSelSty}\n name={field}\n multi={false}\n options={ColWidthOpts}\n value={ColWidthOpts.find(\n (o) => o.value === (fieldObject[field] || layer.cols),\n )}\n onChange={(event) =>\n fnChange(\n event,\n fieldObject[field],\n fieldObject.field,\n layer.key,\n 'cols',\n 'select',\n )\n }\n menuPlacement=\"auto\"\n menuPortalTarget={document.body}\n />\n </span>\n </div>\n </Form.Group>\n);\n\nexport const renderAdjust = ({ layer, fieldObject, fnChange, xs }) =>\n [FieldTypes.F_FORMULA_FIELD].includes(fieldObject.type)\n ? renderCheck({\n layer,\n fieldObject,\n fnChange,\n field: 'canAdjust',\n disabled: false,\n xs,\n })\n : null;\n\nexport const renderOwnRow = ({ layer, fieldObject, fnChange }) =>\n [\n FieldTypes.F_DUMMY,\n FieldTypes.F_TABLE,\n // FieldTypes.F_DATETIME_RANGE,\n ].includes(fieldObject.type)\n ? null\n : renderCheck({\n layer,\n fieldObject,\n fnChange,\n field: 'hasOwnRow',\n disabled: FieldTypes.F_DATETIME_RANGE === fieldObject.type,\n });\n\nexport const renderRequired = ({ layer, fieldObject, fnChange, xs }) =>\n [FieldTypes.F_INTEGER, FieldTypes.F_TEXT].includes(fieldObject.type)\n ? renderCheck({\n layer,\n fieldObject,\n fnChange,\n field: 'required',\n disabled: false,\n skipLabel: true,\n xs,\n // note: 'Required field is always visible.',\n })\n : null;\n\nexport const renderReadonly = ({ layer, fieldObject, fnChange }) =>\n [FieldTypes.F_TEXT].includes(fieldObject.type)\n ? renderCheck({\n layer,\n fieldObject,\n fnChange,\n field: 'readonly',\n note: \"In 'Read-Only' mode, it shows plain text with an available placeholder.\",\n skipLabel: true,\n // xs: 6,\n })\n : null;\n\nexport const renderTypeField = ({\n layer,\n fieldObject,\n fnChange,\n typeOpts,\n xs,\n}) => {\n if ([FieldTypes.F_DUMMY].includes(fieldObject.type)) return null;\n\n return (\n <Form.Group as={Col} xs={xs}>\n <LLabel>\n <>\n {getFieldProps('type').label}&nbsp;\n {getFieldProps('type').fieldTooltip}\n <span className=\"text-warning ms-2 fw-normal small\">\n {FIcons.faTriangleExclamation} Changing the field type will remove\n it from layer display name, restrictions, etc., if used.\n </span>\n </>\n </LLabel>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <span style={{ width: '100%' }}>\n <Select\n styles={frmSelSty}\n name={fieldObject.field}\n multi={false}\n options={typeOpts}\n value={typeOpts?.find((o) => o.value === fieldObject.type)}\n onChange={(event) =>\n fnChange(\n event,\n fieldObject.type,\n fieldObject.field,\n layer.key,\n 'type',\n 'select',\n )\n }\n menuPlacement=\"auto\"\n menuPortalTarget={document.body}\n />\n </span>\n </div>\n </Form.Group>\n );\n};\n\nexport const renderNumberField = ({\n layer,\n fieldObject,\n field,\n fnChange,\n xs,\n}) => (\n <Form.Group as={Col} xs={xs}>\n <LLabel>\n <>\n {getFieldProps(field).label}&nbsp;\n {getFieldProps(field).fieldTooltip}\n </>\n </LLabel>\n <Form.Control\n type=\"number\"\n name={`frmDec_${layer.key}_f_${fieldObject.field}`}\n value={fieldObject.decimal}\n onChange={(event) =>\n fnChange(\n event,\n fieldObject.label,\n fieldObject.field,\n layer.key,\n field,\n FieldTypes.F_TEXT,\n )\n }\n min={1}\n />\n </Form.Group>\n);\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport { useDrag } from 'react-dnd';\nimport FIcons from '@components/icons/FIcons';\n\n// The isButton prop determines how the drag-and-drop icon is rendered.\n// If isButton is true, the component renders a button with a tooltip.\n// If isButton is false, it renders a simple div with the icon.\nconst PositionDnD = React.memo(\n ({ type, field: fid, rowValue: rid, isButton = false }) => {\n\n const [{ isDragging }, drag] = useDrag({\n type,\n item: { fid, rid },\n collect: (monitor) => {\n const dragging = monitor.isDragging();\n return {\n isDragging: dragging,\n };\n },\n });\n\n const className = `${isDragging ? ' gu_is-dragging' : ''}`;\n\n const cursorStyle = {\n cursor: isDragging ? 'grabbing' : 'grab',\n zIndex: 900,\n position: 'relative',\n // zIndex: isDragging ? 1000 : 1,\n };\n\n const moveIcon = () => (\n <Button\n ref={drag}\n className=\"px-3\"\n style={cursorStyle}\n variant=\"outline-light\"\n onClick={(e) => {\n e.stopPropagation();\n }}\n >\n <div className=\"text-primary\">{FIcons.faArrowsUpDownLeftRight}</div>\n </Button>\n );\n\n return isButton ? (\n moveIcon()\n ) : (\n <div\n onMouseEnter={() => console.log('Mouse enter:', fid?.field)}\n onMouseLeave={() => console.log('Mouse leave:', fid?.field)}\n ref={drag}\n // className={className}\n className={`px-3 py-2 ${className}`}\n // className=\"d-inline-flex align-items-center justify-content-center px-3 fs-3 h-100\"\n // style={{ ...cursorStyle, touchAction: 'none' }}\n style={cursorStyle} // Apply cursor style here\n >\n <div className=\"dnd-btn text-primary\">\n <span>{FIcons.faArrowsUpDownLeftRight}</span>\n </div>\n </div>\n );\n }\n);\n\nPositionDnD.propTypes = {\n type: PropTypes.string.isRequired,\n field: PropTypes.object.isRequired,\n rowValue: PropTypes.object.isRequired,\n isButton: PropTypes.bool,\n};\n\nPositionDnD.defaultProps = {\n isButton: false,\n};\n\nPositionDnD.displayName = 'PositionDnD';\n\nexport default PositionDnD;\n","export default {\n LAYER: '-LAYER',\n LAYER_FIELD: '-LAYER-FIELD',\n};\n","import cloneDeep from 'lodash/cloneDeep';\nimport { unitConversion, FieldTypes } from 'generic-ui-core';\nimport GenericSubField from '@components/models/GenericSubField';\n\nconst collateValues = (currentFields, previousFields, previousValues) => {\n const result = [];\n let newSub = new GenericSubField();\n currentFields.map(e => Object.assign(newSub, { [e.id]: '' }));\n const currentValuKeys = Object.keys(newSub);\n const previousValueKeys = Object.keys(previousValues[0]);\n const notInCurrent = previousValueKeys.filter(e => !currentValuKeys.includes(e));\n const currObj = {};\n currentFields.map(c => {\n if (c.type === FieldTypes.F_TEXT) return Object.assign(currObj, { [c.id]: '' });\n return Object.assign(currObj, { [c.id]: { value: '', value_system: c.value_system } });\n });\n previousValues.forEach(e => {\n newSub = new GenericSubField();\n Object.assign(newSub, currObj, e);\n notInCurrent.forEach(c => delete newSub[c]);\n previousValueKeys.forEach(preKey => {\n if (newSub[preKey] === undefined || preKey === 'id') return;\n const curr = currentFields.find(f => f.id === preKey);\n const prev = previousFields.find(f => f.id === preKey);\n if (curr.type === FieldTypes.F_DRAG_MOLECULE) {\n if ([FieldTypes.F_TEXT, FieldTypes.F_SYSTEM_DEFINED, FieldTypes.F_DRAG_SAMPLE].includes(prev.type)) {\n newSub[preKey] = { value: undefined };\n }\n }\n if (curr.type === FieldTypes.F_TEXT) {\n if (prev.type === FieldTypes.F_SYSTEM_DEFINED) {\n newSub[preKey] = newSub[preKey].value;\n }\n if ([FieldTypes.F_DRAG_MOLECULE, FieldTypes.F_DRAG_SAMPLE].includes(prev.type)) {\n newSub[preKey] = '';\n }\n }\n if (curr.type === FieldTypes.F_SYSTEM_DEFINED) {\n if (prev.type === FieldTypes.F_SYSTEM_DEFINED && (curr.option_layers !== prev.option_layers)) {\n newSub[preKey].value_system = curr.value_system;\n }\n if ([FieldTypes.F_TEXT, FieldTypes.F_DRAG_MOLECULE, FieldTypes.F_DRAG_SAMPLE].includes(prev.type)) {\n newSub[preKey] = { value: '', value_system: curr.value_system };\n }\n newSub[preKey].value = unitConversion(curr.option_layers, newSub[preKey].value_system, newSub[preKey].value);\n }\n });\n result.push(newSub);\n });\n return result;\n};\n\nconst organizeSubValues = (cur, pre) => {\n const currentFields = cloneDeep(cur.sub_fields || []);\n const previousFields = cloneDeep(pre.sub_fields || []);\n const previousValues = cloneDeep(pre.sub_values || []);\n if (currentFields.length < 1\n || previousFields.length < 1 || previousValues.length < 1) {\n return [];\n }\n return collateValues(currentFields, previousFields, previousValues);\n};\n\nexport default organizeSubValues;\n","import cloneDeep from 'lodash/cloneDeep';\nimport findIndex from 'lodash/findIndex';\nimport isArray from 'lodash/isArray';\nimport mergeWith from 'lodash/mergeWith';\nimport { FieldTypes, genUnits } from 'generic-ui-core';\nimport organizeSubValues from '@components/tools/collate';\nimport Constants from '@components/tools/Constants';\nimport {\n FieldBase,\n ElementBase,\n SegmentBase,\n} from '@components/elements/BaseFields';\nimport { toBool, toNum } from '@utils/pureUtils';\n\nexport const mergeOptions = (A, B) => {\n return mergeWith({}, A, B, (objValue, srcValue) => {\n if (isArray(objValue) && isArray(srcValue)) {\n // Merge arrays and remove duplicates based on 'key' property\n const combined = [...objValue, ...srcValue];\n return combined.filter(\n (option, index, self) =>\n index === self.findIndex((o) => o.key === option.key)\n );\n }\n // Return undefined for lodash to handle the default merging\n return undefined;\n });\n};\n\n// current generic value, new klass value\nexport const remodel = (generic, klass) => {\n if (\n !generic ||\n Object.keys(klass || {}).length < 1 ||\n !generic.properties ||\n !klass.properties_release\n ) {\n return [undefined, undefined];\n }\n const newProps = cloneDeep(klass.properties_release);\n newProps.klass = generic.properties.klass;\n newProps.klass_uuid = klass.uuid;\n const newPropsSelectOptions = newProps.select_options || {};\n Object.keys(newProps.layers).forEach((key) => {\n const newLayer = newProps.layers[key] || {};\n newLayer.ai = generic.properties.layers[key]?.ai || []; // copy linked analyses or []\n if (generic.properties.layers[key]?.timeRecord) {\n newLayer.timeRecord = generic.properties.layers[key]?.timeRecord; // copy datetime of the layer or ''\n }\n const curFields =\n (generic.properties.layers[key] &&\n generic.properties.layers[key].fields) ||\n [];\n (newLayer.fields || []).forEach((f, idx) => {\n const curIdx = findIndex(curFields, (o) => o.field === f.field);\n const newFieldType = newProps.layers[key].fields[idx].type;\n\n // Initialize checkbox fields with false if they are new and have no default value\n if (curIdx === -1 && newFieldType === FieldTypes.F_CHECKBOX) {\n const currentValue = newProps.layers[key].fields[idx].value;\n if (currentValue === undefined || currentValue === null) {\n newProps.layers[key].fields[idx].value = false;\n }\n }\n\n if (curIdx >= 0) {\n const curVal = generic.properties.layers[key].fields[curIdx].value;\n const curType = typeof curVal;\n if (newFieldType === FieldTypes.F_DATETIME_RANGE) {\n if (\n generic.properties.layers[key].fields[curIdx].type !== newFieldType\n ) {\n newProps.layers[key].fields[idx].sub_fields = [];\n } else {\n const cSubs =\n generic.properties.layers[key].fields[curIdx].sub_fields || [];\n newProps.layers[key].fields[idx].sub_fields = cSubs;\n }\n }\n if (\n [\n FieldTypes.F_SELECT,\n FieldTypes.F_TEXT,\n FieldTypes.F_TEXTAREA,\n FieldTypes.F_FORMULA_FIELD,\n ].includes(newFieldType)\n ) {\n newProps.layers[key].fields[idx].value =\n curType !== FieldTypes.V_UNDEFINED ? (curVal || '').toString() : '';\n }\n if (newFieldType === FieldTypes.F_SELECT_MULTI) {\n newProps.layers[key].fields[idx].value = '';\n if (\n generic.properties.layers[key].fields[curIdx].type !== newFieldType\n ) {\n newProps.layers[key].fields[idx].sub_fields = [];\n } else {\n const newOptionLayers =\n newProps.layers[key].fields[idx].option_layers;\n const newOptions =\n (newPropsSelectOptions[newOptionLayers] || {}).options || [];\n if (newOptions.length < 1) {\n newProps.layers[key].fields[idx].sub_fields = [];\n } else {\n const newOptionsKeys = new Set(newOptions.map((o) => o.key));\n const cSubs =\n generic.properties.layers[key].fields[curIdx].sub_fields || [];\n newProps.layers[key].fields[idx].sub_fields = cSubs.filter((sf) =>\n newOptionsKeys.has(sf.value)\n );\n }\n }\n }\n if (newFieldType === FieldTypes.F_INTEGER) {\n const notInteger =\n curType === FieldTypes.V_UNDEFINED ||\n curType === FieldTypes.V_BOOLEAN ||\n isNaN(curVal);\n newProps.layers[key].fields[idx].value = notInteger\n ? 0\n : parseInt(curVal, 10);\n }\n if (newFieldType === FieldTypes.F_CHECKBOX) {\n if (curVal === undefined || curVal === null) {\n newProps.layers[key].fields[idx].value = false;\n } else {\n newProps.layers[key].fields[idx].value = toBool(curVal);\n }\n }\n if (\n (newFieldType === FieldTypes.F_DRAG_ELEMENT &&\n generic.properties.layers[key].fields[curIdx].type ===\n FieldTypes.F_DRAG_ELEMENT) ||\n (newFieldType === FieldTypes.F_DRAG_SAMPLE &&\n generic.properties.layers[key].fields[curIdx].type ===\n FieldTypes.F_DRAG_SAMPLE) ||\n (newFieldType === FieldTypes.F_DRAG_MOLECULE &&\n generic.properties.layers[key].fields[curIdx].type ===\n FieldTypes.F_DRAG_MOLECULE) ||\n newFieldType === FieldTypes.F_DATETIME\n ) {\n if (typeof curVal !== 'undefined')\n newProps.layers[key].fields[idx].value = curVal;\n }\n if (newFieldType === FieldTypes.F_SYSTEM_DEFINED) {\n const units = genUnits(\n newProps.layers[key].fields[idx].option_layers\n );\n const vs = units.find(\n (u) =>\n u.key ===\n generic.properties.layers[key].fields[curIdx].value_system\n );\n newProps.layers[key].fields[idx].value_system =\n (vs && vs.key) || units[0].key;\n if (curVal) {\n newProps.layers[key].fields[idx].value = toNum(curVal);\n }\n }\n if (newFieldType === FieldTypes.F_INPUT_GROUP) {\n if (\n generic.properties.layers[key].fields[curIdx].type !== newFieldType\n ) {\n newProps.layers[key].fields[idx].value = undefined;\n } else {\n const nSubs = newProps.layers[key].fields[idx].sub_fields || [];\n const cSubs =\n generic.properties.layers[key].fields[curIdx].sub_fields || [];\n const exSubs = [];\n if (nSubs.length < 1) {\n newProps.layers[key].fields[idx].value = undefined;\n } else {\n nSubs.forEach((nSub) => {\n const hitSub = cSubs.find((c) => c.id === nSub.id) || {};\n if (nSub.type === FieldTypes.F_LABEL) {\n exSubs.push(nSub);\n }\n if (nSub.type === FieldTypes.F_TEXT) {\n if (hitSub.type === FieldTypes.F_LABEL) {\n exSubs.push(nSub);\n } else {\n exSubs.push({\n ...nSub,\n value: (hitSub.value || '').toString(),\n });\n }\n }\n if (\n [FieldTypes.F_NUMBER, FieldTypes.F_SYSTEM_DEFINED].includes(\n nSub.type\n )\n ) {\n const nvl =\n typeof hitSub.value === 'undefined' ||\n hitSub.value == null ||\n hitSub.value.length === 0\n ? ''\n : toNum(hitSub.value);\n if (nSub.option_layers === hitSub.option_layers) {\n exSubs.push({\n ...nSub,\n value: nvl,\n value_system: hitSub.value_system,\n });\n } else {\n exSubs.push({ ...nSub, value: nvl });\n }\n }\n });\n }\n newProps.layers[key].fields[idx].sub_fields = exSubs;\n }\n }\n if (newFieldType === FieldTypes.F_UPLOAD) {\n if (\n generic.properties.layers[key].fields[curIdx].type === newFieldType\n ) {\n newProps.layers[key].fields[idx].value =\n generic.properties.layers[key].fields[curIdx].value;\n } else {\n newProps.layers[key].fields[idx].value = {};\n }\n }\n if (newFieldType === FieldTypes.F_TABLE) {\n if (\n generic.properties.layers[key].fields[curIdx].type !== newFieldType\n ) {\n newProps.layers[key].fields[idx].sub_values = [];\n } else {\n newProps.layers[key].fields[idx].sub_values = organizeSubValues(\n newProps.layers[key].fields[idx],\n generic.properties.layers[key].fields[curIdx]\n );\n }\n }\n }\n });\n });\n return [generic.properties, newProps];\n};\n\n// input source generic and target generic; when there are reaction layers in the source generic, add them to the target generic\nexport const importReaction = (source, target) => {\n let newTarget = target;\n let hasReaction = false;\n if (source && source.properties && target && target.properties) {\n const srcProps = source.properties;\n const srcLayers = srcProps.layers;\n\n const reactionLayers = Object.keys(srcLayers).filter((key) =>\n key.startsWith(Constants.SYS_REACTION)\n );\n\n // add these reaction layers to the target generic\n if (reactionLayers.length > 0) {\n hasReaction = true;\n newTarget = cloneDeep(target);\n reactionLayers.forEach((key) => {\n newTarget.properties.layers[key] = srcLayers[key];\n });\n }\n }\n return [hasReaction, newTarget];\n};\n\n// replace by mergeOptions\nexport const mergeSelections = (source, target) => {\n if (\n Object.keys(source || {}).length < 1 ||\n Object.keys(target || {}).length < 1\n ) {\n return target;\n }\n const newTarget = cloneDeep(target);\n Object.keys(source).forEach((key) => {\n // Check if the source key exists and has options\n if (source[key] && source[key].options) {\n // Initialize the key in newTarget if it doesn't exist\n if (!newTarget[key]) {\n newTarget[key] = {};\n }\n // Initialize options array in newTarget[key] if it doesn't exist\n if (!Array.isArray(newTarget[key].options)) {\n newTarget[key].options = [];\n }\n\n // Merge options, ensuring no duplicates based on the key property\n source[key].options.forEach((newOption) => {\n if (\n !newTarget[key].options.some(\n (existingOption) => existingOption.key === newOption.key\n )\n ) {\n newTarget[key].options.push(newOption);\n }\n });\n\n // // Optionally, merge descriptions if necessary\n newTarget[key].desc = source[key].desc || newTarget[key].desc;\n }\n });\n return newTarget;\n};\n\nexport const updateUnsupports = (layer, genericType) => {\n const supports = {\n Element: ElementBase,\n Segment: SegmentBase,\n default: FieldBase,\n };\n const supportedFields = supports[genericType] || supports.default;\n return {\n ...layer,\n fields: layer.fields.map((field) => {\n if (\n !supportedFields.some((supported) => supported.value === field.type)\n ) {\n const { option_layers: optionLayers, ...restField } = field;\n return {\n ...restField,\n type: FieldTypes.F_TEXT,\n text_sub_fields: [],\n sub_fields: [],\n };\n }\n return field;\n }),\n };\n};\n","/**\n * Utility functions for pruning references and maintaining data consistency\n * when deleting template entities (select options, fields, layers, etc.)\n */\n\nimport { FieldTypes } from 'generic-ui-core';\n\n/**\n * Helper function to remove field references to a deleted select option.\n * Removes the option_layers property from fields that reference the deleted select option.\n */\nexport const removeFieldReferencesToSelectOption = (\n element,\n deletedSelectKey,\n) => {\n const affectedFields = [];\n const layers = element?.properties_template?.layers || {};\n\n Object.keys(layers).forEach((layerKey) => {\n const layer = layers[layerKey];\n const fields = layer?.fields || [];\n\n fields.forEach((field) => {\n // Check if field is a select type and references the deleted select option\n if (\n field.type === FieldTypes.F_SELECT &&\n field.option_layers === deletedSelectKey\n ) {\n // Remove the option_layers property\n delete field.option_layers;\n affectedFields.push([layerKey, field.field]);\n }\n });\n });\n\n return affectedFields;\n};\n\n/**\n * Helper function to remove restrictions that reference specific fields.\n */\nexport const removeRestrictionsReferencingFields = (\n element,\n affectedFields,\n) => {\n if (!affectedFields || affectedFields.length === 0) return;\n\n const layers = element?.properties_template?.layers || {};\n const metadata = element?.metadata || {};\n\n // Create a set of affected field identifiers for quick lookup\n const affectedFieldSet = new Set(\n affectedFields.map(([layerKey, fieldKey]) => `${layerKey}.${fieldKey}`),\n );\n\n // 1. Clean up layer-level\n Object.keys(layers).forEach((layerKey) => {\n const layer = layers[layerKey];\n if (layer.cond_fields && Array.isArray(layer.cond_fields)) {\n layer.cond_fields = layer.cond_fields.filter((cond) => {\n const condIdentifier = `${cond.layer}.${cond.field}`;\n return !affectedFieldSet.has(condIdentifier);\n });\n\n // Remove empty cond_fields array\n if (layer.cond_fields.length === 0) {\n delete layer.cond_fields;\n delete layer.cond_operator;\n }\n }\n\n // Clean up field-level cond_fields (restrictions on individual fields)\n if (layer.fields && Array.isArray(layer.fields)) {\n layer.fields.forEach((field) => {\n if (field.cond_fields && Array.isArray(field.cond_fields)) {\n field.cond_fields = field.cond_fields.filter((cond) => {\n const condIdentifier = `${cond.layer}.${cond.field}`;\n return !affectedFieldSet.has(condIdentifier);\n });\n\n // Remove empty cond_fields array\n if (field.cond_fields.length === 0) {\n delete field.cond_fields;\n delete field.cond_operator;\n }\n }\n });\n }\n });\n\n // 2. Clean up other restrictions\n const restrict = metadata?.restrict || {};\n Object.keys(restrict).forEach((restrictKey) => {\n const restriction = restrict[restrictKey];\n if (restriction.cond && Array.isArray(restriction.cond)) {\n restriction.cond = restriction.cond.filter((cond) => {\n const condIdentifier = `${cond.layer}.${cond.field}`;\n return !affectedFieldSet.has(condIdentifier);\n });\n\n // Remove empty restriction objects\n if (restriction.cond.length === 0) {\n delete restrict[restrictKey];\n }\n }\n });\n\n // Clean up empty restrict object\n if (Object.keys(restrict).length === 0) {\n delete metadata.restrict;\n }\n};\n\n/**\n * Helper function to remove restrictions that reference a specific option value.\n * When an option is deleted from a select option list, remove restrictions that use that value.\n */\nexport const removeRestrictionsReferencingOptionValue = (\n element,\n selectOptionKey,\n deletedOptionValue,\n) => {\n const layers = element?.properties_template?.layers || {};\n const metadata = element?.metadata || {};\n\n // Find all fields that use this select option\n const fieldsUsingSelectOption = [];\n Object.keys(layers).forEach((layerKey) => {\n const layer = layers[layerKey];\n const fields = layer?.fields || [];\n\n fields.forEach((field) => {\n if (\n field.type === FieldTypes.F_SELECT &&\n field.option_layers === selectOptionKey\n ) {\n fieldsUsingSelectOption.push([layerKey, field.field]);\n }\n });\n });\n\n if (fieldsUsingSelectOption.length === 0) return;\n\n // Create a set of affected field identifiers for quick lookup\n const affectedFieldSet = new Set(\n fieldsUsingSelectOption.map(\n ([layerKey, fieldKey]) => `${layerKey}.${fieldKey}`,\n ),\n );\n\n // 1. Clean up layer-level\n Object.keys(layers).forEach((layerKey) => {\n const layer = layers[layerKey];\n if (layer.cond_fields && Array.isArray(layer.cond_fields)) {\n layer.cond_fields = layer.cond_fields.filter((cond) => {\n const condIdentifier = `${cond.layer}.${cond.field}`;\n // Only remove if this field uses the select option AND has the deleted value\n return !(\n affectedFieldSet.has(condIdentifier) &&\n cond.value === deletedOptionValue\n );\n });\n\n // Remove empty cond_fields array\n if (layer.cond_fields.length === 0) {\n delete layer.cond_fields;\n delete layer.cond_operator;\n }\n }\n });\n\n // 2. Clean up other restrictions\n const restrict = metadata?.restrict || {};\n Object.keys(restrict).forEach((restrictKey) => {\n const restriction = restrict[restrictKey];\n if (restriction.cond && Array.isArray(restriction.cond)) {\n restriction.cond = restriction.cond.filter((cond) => {\n const condIdentifier = `${cond.layer}.${cond.field}`;\n // Only remove if this field uses the select option AND has the deleted value\n return !(\n affectedFieldSet.has(condIdentifier) &&\n cond.value === deletedOptionValue\n );\n });\n\n // Remove empty restriction objects\n if (restriction.cond.length === 0) {\n delete restrict[restrictKey];\n }\n }\n });\n\n // Clean up empty restrict object\n if (Object.keys(restrict).length === 0) {\n delete metadata.restrict;\n }\n};\n\n/**\n * Helper function to remove restrictions that reference a deleted layer.\n */\nexport const removeRestrictionsReferencingLayer = (\n element,\n deletedLayerKey,\n) => {\n const layers = element?.properties_template?.layers || {};\n const metadata = element?.metadata || {};\n\n // 1. Clean up layer-level cond_fields\n Object.keys(layers).forEach((layerKey) => {\n const layer = layers[layerKey];\n if (layer.cond_fields && Array.isArray(layer.cond_fields)) {\n layer.cond_fields = layer.cond_fields.filter(\n (cond) => cond.layer !== deletedLayerKey,\n );\n\n // Remove empty cond_fields array\n if (layer.cond_fields.length === 0) {\n delete layer.cond_fields;\n delete layer.cond_operator;\n }\n }\n });\n\n // 2. Clean up other restrictions\n const restrict = metadata?.restrict || {};\n Object.keys(restrict).forEach((restrictKey) => {\n const restriction = restrict[restrictKey];\n if (restriction.cond && Array.isArray(restriction.cond)) {\n restriction.cond = restriction.cond.filter(\n (cond) => cond.layer !== deletedLayerKey,\n );\n\n // Remove empty restriction objects\n if (restriction.cond.length === 0) {\n delete restrict[restrictKey];\n }\n }\n });\n\n // Clean up empty restrict object\n if (Object.keys(restrict).length === 0) {\n delete metadata.restrict;\n }\n};\n\n/**\n * Helper function to remove a layer from groups.\n */\nexport const removeLayerFromGroups = (element, deletedLayerKey) => {\n const metadata = element?.metadata || {};\n const groups = metadata?.groups || [];\n const restrict = metadata?.restrict || {};\n\n // Track group IDs that become empty\n const emptyGroupIds = [];\n\n groups.forEach((group) => {\n if (group.layers && Array.isArray(group.layers)) {\n const index = group.layers.indexOf(deletedLayerKey);\n if (index !== -1) {\n group.layers.splice(index, 1);\n }\n\n // Track if group is now empty\n if (group.layers.length === 0) {\n emptyGroupIds.push(group.id);\n }\n }\n });\n\n // Remove empty groups\n metadata.groups = groups.filter(\n (group) => group.layers && group.layers.length > 0,\n );\n\n // Remove restrictions for empty groups\n emptyGroupIds.forEach((groupId) => {\n if (restrict[groupId]) {\n delete restrict[groupId];\n }\n });\n\n // Clean up empty properties\n if (metadata.groups.length === 0) {\n delete metadata.groups;\n delete metadata.restrict;\n }\n};\n","import Ajv from 'ajv';\n\n// Import JSON schemas\nimport propBaseSchema from '@/schemas/json/property-base.json';\nimport pkgSchema from '@/schemas/json/pkg.json';\nimport layersSchema from '@/schemas/json/layers.json';\nimport selectOptionsSchema from '@/schemas/json/select-options.json';\nimport fieldBaseSchema from '@/schemas/json/field-base.json';\nimport systemUnitSchema from '@/schemas/json/system-unit.json';\nimport metadataSchema from '@/schemas/json/metadata.json';\n\nconst ajv = new Ajv({\n allErrors: true,\n allowUnionTypes: true,\n useDefaults: true,\n verbose: true,\n strict: false,\n});\n\n// Register all schemas by their $id\najv.addSchema(pkgSchema);\najv.addSchema(layersSchema);\najv.addSchema(selectOptionsSchema);\najv.addSchema(fieldBaseSchema);\najv.addSchema(systemUnitSchema);\najv.addSchema(metadataSchema);\n\n// Compile the main schema\nconst validatePropBase = ajv.compile(propBaseSchema);\n\n/**\n * Validates properties against schema\n * Return validation result and errors\n */\nexport const validateProperties = (properties) => {\n if (!properties || typeof properties !== 'object') {\n return {\n valid: false,\n errors: [{ message: 'Properties must be a valid object' }],\n };\n }\n\n const valid = validatePropBase(properties);\n\n return {\n valid,\n errors: valid ? [] : (validatePropBase.errors || []),\n };\n};\n\n/**\n * Formats validation errors into a readable message\n */\nexport const formatValidationErrors = (errors) => {\n if (!errors || errors.length === 0) {\n return 'Unknown validation error';\n }\n\n return errors\n .map((err) => {\n const path = err.instancePath || 'root';\n const message = err.message || 'validation failed';\n\n if (err.params) {\n if (err.params.missingProperty) {\n return `Missing required property: ${err.params.missingProperty}`;\n }\n if (err.params.additionalProperty) {\n return `${path}: unexpected property \"${err.params.additionalProperty}\"`;\n }\n if (err.params.allowedValues) {\n return `${path}: ${message}, allowed values: ${err.params.allowedValues.join(', ')}`;\n }\n }\n\n return `${path}: ${message}`;\n })\n .join('; ');\n};\n","import findIndex from 'lodash/findIndex';\nimport { FieldTypes, genUnits, reUnit } from 'generic-ui-core';\nimport Constants from '@components/tools/Constants';\nimport { mc2res, mc2text } from '@components/tools/format-utils';\nimport { GenericDummy } from '@components/tools/utils';\nimport {\n notifyDummyAdd,\n notifyError,\n notifySuccess,\n} from '@utils/template/designer-message';\nimport {\n validateElementKlassInput,\n validateSegmentKlassInput,\n validateOptionAdd,\n validateLayerDeletion,\n validateLayerInput,\n validateLayerUpdate,\n validateSelectList,\n} from '@utils/template/input-validation';\nimport {\n mergeOptions,\n updateUnsupports,\n} from '@utils/template/remodel-handler';\nimport {\n removeFieldReferencesToSelectOption,\n removeRestrictionsReferencingFields,\n removeRestrictionsReferencingOptionValue,\n removeRestrictionsReferencingLayer,\n removeLayerFromGroups,\n} from '@utils/template/prune-references';\nimport { updateLabelFieldsOnRemoval } from '@utils/template/label-handler';\nimport {\n validateProperties,\n formatValidationErrors,\n} from '@utils/template/schema-validation';\nimport { reorderPositions } from '@utils/template/sorting-handler';\nimport Response from '@utils/response';\n\n/**\n * The response object for condition creation.\n */\nexport const responseExt = (_notify, _element, _additional = {}) => {\n const response = new Response(_notify, _element);\n response.additional = _additional;\n return response;\n};\n\n/**\n * The response object for layer creation.\n */\nconst responseCreateLayer = (_notify, _element, _layerKey) => {\n const response = new Response(_notify, _element);\n response.layerKey = _layerKey;\n return response;\n};\n\n/**\n * Handles the layer creation.\n */\nexport const handleCreateLayer = (_layer, _element) => {\n const [element, layer] = [_element, _layer];\n const verify = validateLayerInput(layer);\n if (!verify.isSuccess) return responseCreateLayer(verify, element, layer.key);\n if (\n element &&\n element.properties_template &&\n element.properties_template.layers[`${layer.key}`]\n ) {\n return responseCreateLayer(\n notifyError(\n 'This Layer is already taken. Please choose another one.',\n `Layer [${layer.key}]`,\n ),\n element,\n layer.key,\n );\n }\n\n // Use provided position or set to -1 to ensure new layer sorts first\n // reorderPositions will then assign sequential positions starting from 0\n if (layer.position === undefined || layer.position === null) {\n layer.position = -1;\n }\n\n layer.timeRecord = '';\n element.properties_template.layers[`${layer.key}`] = layer;\n\n // Reorder all positions after adding the new layer\n const reordered = reorderPositions(\n element.properties_template.layers,\n element.metadata || {},\n );\n element.properties_template.layers = reordered.layers;\n if (reordered.metadata && Object.keys(reordered.metadata).length > 0) {\n element.metadata = reordered.metadata;\n }\n\n return responseCreateLayer(\n notifySuccess(\n [\n 'The new layer has been added.',\n \"Remember to save once you've finished editing.\",\n ].join(' '),\n `Layer [${layer.key}]`,\n ),\n element,\n layer.key,\n );\n};\n\nexport const handleAddStandardLayer = (_layer, _element, _genericType) => {\n const [element, origLayer, genericType] = [_element, _layer, _genericType];\n const verify = validateLayerInput(origLayer);\n if (!verify.isSuccess)\n return responseCreateLayer(verify, element, origLayer.key);\n const layer = updateUnsupports(origLayer, genericType);\n // move \"select_options\" to another constant\n const selectOptions = layer.select_options || {};\n delete layer.select_options;\n // check if the layer is already exist\n const layerKey = layer.key;\n if (element?.properties_template?.layers[layerKey]) {\n return responseCreateLayer(\n notifyError(\n 'This Layer is already exist. Please choose another one.',\n `Layer [${layer.key}]`,\n ),\n element,\n layer.key,\n );\n }\n // set default value\n layer.position = 1;\n layer.timeRecord = '';\n element.properties_template.layers[`${layer.key}`] = layer;\n // Handle select_options in the properties_template\n if (!element.properties_template?.select_options) {\n element.properties_template.select_options = selectOptions;\n } else {\n // Merge selectOptions with existing select_options\n element.properties_template.select_options = mergeOptions(\n selectOptions,\n element.properties_template.select_options,\n );\n }\n // Check if \"select_options\" is empty, if so, delete it\n if (\n Object.keys(element.properties_template?.select_options || {}).length === 0\n ) {\n delete element.properties_template.select_options;\n }\n return responseCreateLayer(\n notifySuccess(\n [\n 'A Standard Layer has been added into the template.',\n \"Remember to save once you've finished editing.\",\n ].join(' '),\n `Layer [${layer.key}]`,\n ),\n element,\n layer.key,\n );\n};\n\n/**\n * Handles the layer creation.\n */\nexport const handleUpdateLayer = (_element, _layerKey, _updates) => {\n const [element, layerKey, updates] = [_element, _layerKey, _updates];\n\n let verify = validateLayerInput(updates, 'upd');\n if (!verify.isSuccess) {\n return new Response(verify, element);\n }\n verify = validateLayerUpdate(element, updates);\n if (!verify.isSuccess) return new Response(verify, element);\n\n let layer = element?.properties_template?.layers[layerKey];\n const msg = [\n 'The layer has been updated.',\n \"Remember to save once you've finished editing.\",\n ];\n\n layer = { ...layer, ...updates };\n\n // reset cond_fields of fields if the layer enable workflow\n // note: the workflow of segment and dataset is not supported yet\n if (layer.wf) {\n msg.push(\n 'For a Workflow layer, the Field Restrict Setting is only applicable on its own layer.',\n );\n (layer.fields || []).map((f) => {\n const newF = f;\n if (newF.cond_fields && newF.cond_fields.length > 0) {\n newF.cond_fields = f.cond_fields.filter((o) => o.layer === layer.key);\n if (newF.cond_fields.length < 1) delete newF.cond_fields;\n }\n return newF;\n });\n }\n\n // Preserve the existing position, don't recalculate\n layer.position =\n layer.position !== undefined && layer.position !== null\n ? parseInt(layer.position, 10)\n : 0;\n\n element.properties_template.layers[`${layer.key}`] = layer;\n return new Response(notifySuccess(msg.join(' ')), element);\n};\n\n/**\n * Handles the deletion of Field or Layer or Select or Select option.\n */\nexport const handleDelete = (delStr, delKey, delRoot, _element) => {\n const element = _element;\n let selectOptions = [];\n\n if (delStr === FieldTypes.DEL_SELECT) {\n delete element.properties_template.select_options[delKey];\n selectOptions = Object.keys(element.properties_template.select_options).map(\n (key) => ({ value: key, name: key, label: key }),\n );\n\n // Step 1: Remove field references to the deleted select option\n const affectedFields = removeFieldReferencesToSelectOption(element, delKey);\n\n // Step 2: Remove restrictions that reference the affected fields\n removeRestrictionsReferencingFields(element, affectedFields);\n }\n if (delStr === FieldTypes.DEL_OPTION) {\n const { options } = element.properties_template.select_options[delRoot];\n if (options && options.length > 0) {\n const idx = options.findIndex((o) => o.key === delKey);\n if (idx !== -1) {\n options.splice(idx, 1);\n }\n }\n\n // Remove restrictions that reference this specific option value\n removeRestrictionsReferencingOptionValue(element, delRoot, delKey);\n }\n if (delStr === FieldTypes.DEL_LAYER) {\n const verify = validateLayerDeletion(element, delKey);\n if (!verify.isSuccess) {\n const response = new Response(verify, element);\n response.selectOptions = [];\n return response;\n }\n delete element.properties_template.layers[delKey];\n\n // Step 1: Remove restrictions that reference the deleted layer\n removeRestrictionsReferencingLayer(element, delKey);\n\n // Step 2: Remove the layer from groups\n removeLayerFromGroups(element, delKey);\n }\n if (delStr === FieldTypes.DEL_FIELD) {\n const layer = element.properties_template.layers[delRoot];\n const { fields } = layer;\n const idx = fields.findIndex((o) => o.field === delKey);\n if (idx !== -1) {\n fields.splice(idx, 1);\n }\n\n // Remove the field from label_fields if it exists\n if (layer.label_fields && Array.isArray(layer.label_fields)) {\n layer.label_fields = updateLabelFieldsOnRemoval(\n layer.label_fields,\n delKey,\n );\n }\n\n // Remove restrictions that reference the deleted field\n removeRestrictionsReferencingFields(element, [[delRoot, delKey]]);\n }\n const response = new Response(notifySuccess(), element);\n response.selectOptions = selectOptions;\n return response;\n};\n\nexport const handleAddDummy = (_element, _layerKey, _field) => {\n const [element, layerKey, field] = [_element, _layerKey, _field];\n const layer = element?.properties_template?.layers[layerKey];\n let { fields } = layer || {};\n fields = fields || [];\n let idx = fields.findIndex((o) => o.field === field);\n if (idx === -1 && fields.length > 0) idx = fields.length - 1;\n fields.splice(idx + 1, 0, new GenericDummy());\n element.properties_template.layers[layerKey].fields = fields;\n return new Response(notifyDummyAdd(), element);\n};\n\n// return notify and the updated element and selects\nexport const handleAddSelect = (_element, _name, _options) => {\n const [element, name, options] = [_element, _name, _options];\n const verify = validateSelectList(element, name);\n if (verify.isSuccess) {\n element.properties_template.select_options = options;\n const selectOptions = Object.keys(options).map((key) => ({\n value: key,\n name: key,\n label: key,\n }));\n return responseExt(verify, element, { selectOptions });\n }\n return responseExt(verify, element, { selectOptions: options });\n};\n\n// return notify and the updated element\nexport const handleAddOption = (_element, _key, _optionKey, _selectOptions) => {\n const [element, key, optionKey, selectOptions] = [\n _element,\n _key,\n _optionKey,\n _selectOptions,\n ];\n const verify = validateOptionAdd(optionKey, selectOptions);\n if (verify.isSuccess) {\n element.properties_template.select_options[key].options = selectOptions;\n }\n return responseExt(verify, element);\n};\n\nexport const handleOptionInput = (_element, _optionKey, _selectKey, _input) => {\n const [element, optionKey, selectKey, input] = [\n _element,\n _optionKey,\n _selectKey,\n _input,\n ];\n const options =\n element?.properties_template?.select_options[selectKey]?.options || [];\n const idx = findIndex(options, (o) => o.key === optionKey);\n const op = {};\n op.key = optionKey;\n op.label = input;\n options.splice(idx, 1, op);\n return new Response(notifySuccess(), element);\n};\n\nexport const handleFieldInputChange = (\n _element,\n _event,\n _orig,\n _field,\n _layerKey,\n _fieldCheck,\n _type,\n) => {\n const [element, event, orig, field, layerKey, fieldCheck, type] = [\n _element,\n _event,\n _orig,\n _field,\n _layerKey,\n _fieldCheck,\n _type,\n ];\n let value = '';\n if (\n [\n FieldTypes.F_SELECT,\n FieldTypes.F_SYSTEM_DEFINED,\n FieldTypes.F_SELECT_MULTI,\n ].includes(type)\n ) {\n ({ value } = event);\n } else if (type?.startsWith(FieldTypes.F_DRAG)) {\n value = event;\n } else {\n ({ value } = event.target);\n }\n const layer = element?.properties_template?.layers[layerKey];\n if (typeof layer === 'undefined' || layer == null)\n return { notify: notifyError('Layer is undefined'), element };\n\n const { fields } = layer;\n if (fields == null || fields.length === 0)\n return { notify: notifyError('Layer has no fields'), element };\n\n const fieldObj = fields.find((e) => e.field === field);\n if (!fieldObj || Object.keys(fieldObj || {}).length === 0)\n return { notify: notifyError('Field is undefined'), element };\n\n switch (fieldCheck) {\n case 'required':\n case 'hasOwnRow':\n case 'canAdjust':\n fieldObj[`${fieldCheck}`] = !orig;\n break;\n case 'readonly': {\n fieldObj[`${fieldCheck}`] = !orig;\n if (type === FieldTypes.F_TEXT && fieldObj[`${fieldCheck}`] === true) {\n if (layer?.label_fields?.length > 0) {\n layer.label_fields = updateLabelFieldsOnRemoval(\n layer.label_fields,\n field,\n );\n }\n }\n break;\n }\n case 'ontology':\n if (value) fieldObj[`${fieldCheck}`] = value;\n else delete fieldObj[`${fieldCheck}`];\n break;\n case 'option_layers':\n fieldObj[`${fieldCheck}`] = value;\n if (type === FieldTypes.F_SYSTEM_DEFINED) {\n const defaultSI = reUnit(value);\n fieldObj[`${fieldCheck}`] = defaultSI;\n const defaultUnit = genUnits(defaultSI)[0]?.key;\n fieldObj.value_system = defaultUnit;\n }\n break;\n case 'type': {\n // change selected type\n fieldObj[`${fieldCheck}`] = value;\n // give default unit if select system-defined\n if (value === FieldTypes.F_SYSTEM_DEFINED) {\n const defaultSI = reUnit('');\n fieldObj.option_layers = defaultSI;\n fieldObj.value_system = genUnits(defaultSI)[0]?.key;\n } else {\n fieldObj.option_layers = undefined;\n fieldObj.value_system = undefined;\n fieldObj.sub_fields = undefined;\n }\n // Clean up when field type changes (type change may invalidate conditions)\n if (layer?.label_fields?.length > 0) {\n layer.label_fields = updateLabelFieldsOnRemoval(\n layer.label_fields,\n field,\n );\n }\n removeRestrictionsReferencingFields(element, [[layerKey, field]]);\n break;\n }\n case 'value_system':\n if (value) fieldObj[`${fieldCheck}`] = value;\n break;\n default:\n fieldObj[`${fieldCheck}`] = value;\n break;\n }\n const idx = findIndex(fields, (o) => o.field === field);\n fields.splice(idx, 1, fieldObj);\n element.properties_template.layers[layerKey].fields = fields;\n return new Response(notifySuccess(), element);\n};\n\n/**\n * Handles the template upload action.\n */\nexport const handleTemplateUploading = (_event, _genericType) => {\n const reader = _event.target;\n const pt = reader.result;\n let properties = {};\n\n try {\n properties = JSON.parse(pt);\n if (!properties.klass.endsWith(`${_genericType}Klass`)) {\n return new Response(\n mc2res(\n 'set00',\n [\n 'You are attempting to update a template',\n `from [${properties.klass}] to [${_genericType}Klass]`,\n ].join(' '),\n ),\n properties,\n );\n }\n\n // Validate properties against schema\n const validation = validateProperties(properties);\n if (!validation.valid) {\n // Log validation errors for debugging\n // const errorMessage = formatValidationErrors(validation.errors);\n // console.error('Template validation errors:', errorMessage);\n return new Response(mc2res('set01', mc2text('si00')), properties);\n }\n\n return new Response(notifySuccess(), properties);\n } catch (err) {\n // console.error('Template parsing error:', err);\n return new Response(mc2res('set02', mc2text('si00')), properties);\n }\n};\n\n/**\n * Handles the klass upload action.\n */\nexport const handleKlassUploading = (_event, _genericType) => {\n const requestKlass = `${_genericType}Klass`;\n const reader = _event.target;\n const pt = reader.result;\n let data = {};\n\n try {\n data = JSON.parse(pt);\n const klass = data?.properties_template?.klass;\n if (\n !klass ||\n typeof klass !== 'string' ||\n klass.length === 0 ||\n !klass.endsWith(requestKlass)\n ) {\n return new Response(\n notifyError(\n [\n 'The template upload has failed.',\n `You are attempting to upload a ${_genericType}`,\n `from [${klass}] to [${requestKlass}]`,\n ].join(' '),\n ),\n data,\n );\n }\n\n const inputs = {\n label: data?.label?.trim(),\n desc: data?.desc?.trim(),\n name: data?.name?.trim(),\n klass_prefix: data?.klass_prefix?.trim(),\n icon_name: data?.icon_name?.trim(),\n klass_element: data?.element_klass?.id,\n };\n\n const verify =\n Constants.GENERIC_TYPES.SEGMENT === requestKlass\n ? validateSegmentKlassInput(inputs)\n : validateElementKlassInput(inputs);\n // console.log('verify=', verify, ', requestKlass=', requestKlass);\n return new Response(verify, data);\n } catch (err) {\n return new Response(notifyError(`Error Format: ${err}`), data);\n }\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown } from 'react-bootstrap';\nimport { FieldTypes } from 'generic-ui-core';\nimport ButtonConfirm from '@components/fields/ButtonConfirm';\nimport FIcons from '@components/icons/FIcons';\nimport { handleDelete } from '@utils/template/action-handler';\n\nconst AS = { BUTTON: 'button', MENU: 'menu' };\n\n/**\n * Allowed delete types derived from FieldTypes\n */\nconst ALLOWED_DELETE_TYPES = new Set(\n Object.entries(FieldTypes)\n .filter(([type]) => type.startsWith('DEL_'))\n .map(([, value]) => value),\n);\n\nconst DELETE_ENTITIES = {\n [FieldTypes.DEL_SELECT]: {\n label: 'this select option',\n hasRoot: false,\n },\n [FieldTypes.DEL_OPTION]: {\n label: 'this option',\n hasRoot: true,\n rootLabel: 'select',\n },\n [FieldTypes.DEL_LAYER]: {\n label: 'this layer',\n hasRoot: false,\n },\n [FieldTypes.DEL_FIELD]: {\n label: 'this field',\n hasRoot: true,\n rootLabel: 'layer',\n },\n};\n\nfunction buildMessage(delType, delKey, delRoot) {\n const entity = DELETE_ENTITIES[delType];\n if (!entity) {\n return `remove ???: ${delType}`;\n }\n\n let base =\n `Removing ${entity.label} will remove it from layer display name, restrictions, etc., if used. ` +\n `Continue with removing:`;\n\n if (FieldTypes.DEL_FIELD !== delType) {\n base = base.replace('layer display name, ', '');\n }\n\n if (entity.hasRoot) {\n return `${base} ${entity.label.replace('this ', '')} [${delKey}] from ${entity.rootLabel} [${delRoot}] ?`;\n }\n\n return `${base} [${delKey}] ?`;\n}\n\nfunction confirmDelete({ generic, delType, delKey, delRoot, fnConfirm }) {\n const result = handleDelete(delType, delKey, delRoot, generic);\n fnConfirm(result);\n}\n\nfunction ButtonDelField(props) {\n const { generic, delType, delKey, delRoot, fnConfirm, as } = props;\n\n if (!ALLOWED_DELETE_TYPES.has(delType)) {\n return null;\n }\n\n const msg = buildMessage(delType, delKey, delRoot);\n\n const fnParams = {\n generic,\n delType,\n delKey,\n delRoot,\n fnConfirm,\n };\n\n if (as === AS.MENU) {\n return (\n <Dropdown.Item\n eventKey=\"_del_menu_item\"\n onClick={() => confirmDelete(fnParams)}\n className=\"gu-menu-item-del\"\n >\n {FIcons.faTrashCan}&nbsp;&nbsp;{msg}\n </Dropdown.Item>\n );\n }\n\n return (\n <ButtonConfirm msg={msg} fnClick={confirmDelete} fnParams={fnParams} />\n );\n}\n\nButtonDelField.propTypes = {\n generic: PropTypes.object.isRequired,\n delType: PropTypes.string.isRequired,\n delKey: PropTypes.string,\n delRoot: PropTypes.string,\n fnConfirm: PropTypes.func.isRequired,\n as: PropTypes.oneOf([AS.BUTTON, AS.MENU]),\n};\n\nButtonDelField.defaultProps = {\n delKey: '',\n delRoot: '',\n as: AS.BUTTON,\n};\n\nexport default ButtonDelField;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { ButtonGroup, DropdownButton, Dropdown } from 'react-bootstrap';\nimport FIcons from '@components/icons/FIcons';\n\nconst ButtonEllipse = ({ children, condSet }) => {\n const [, setShow] = useState(false);\n const [, setIsOpen] = useState(false);\n\n const handleItemClick = (child, event) => {\n event.stopPropagation();\n setIsOpen(false);\n setShow(false);\n if (child.props.onClick) {\n child.props.onClick(event);\n }\n };\n\n return (\n <>\n <DropdownButton\n variant={condSet ? 'warning' : 'default'}\n title={FIcons.faEllipsis}\n as={ButtonGroup}\n className=\"ug-no-caret\"\n id=\"dropdown-no-caret\"\n onClick={(e) => e.stopPropagation()}\n onToggle={(nextShow) => setIsOpen(nextShow)}\n >\n {React.Children.map(\n children,\n (child) =>\n child.type !== Dropdown.Divider\n ? React.cloneElement(child, {\n onClick: (event) => handleItemClick(child, event),\n })\n : child\n )}\n </DropdownButton>\n </>\n );\n};\n\nButtonEllipse.propTypes = {\n children: PropTypes.node.isRequired,\n condSet: PropTypes.bool.isRequired,\n};\n\nexport default ButtonEllipse;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Button,\n ButtonGroup,\n Card,\n Col,\n Dropdown,\n Form,\n InputGroup,\n OverlayTrigger,\n Popover,\n Row,\n} from 'react-bootstrap';\nimport Select from 'react-select';\nimport { v4 as uuid } from 'uuid';\nimport { FieldTypes } from 'generic-ui-core';\nimport ButtonTooltip from '@components/fields/ButtonTooltip';\nimport { genUnitSup, getFieldProps, frmSelSty } from '@components/tools/utils';\nimport {\n FieldBase,\n ElementBase,\n SegmentBase,\n} from '@components/elements/BaseFields';\nimport GroupFields from '@components/elements/GroupFields';\nimport TextFormula from '@components/elements/TextFormula';\nimport FieldTable from '@ui/tables/FieldTable';\nimport ConditionFieldBtn from '@components/designer/template/ConditionFieldBtn';\nimport VocabSaveBtn from '@components/designer/template/VocabSaveBtn';\nimport FieldBadge from '@components/fields/FieldBadge';\nimport InputUnit from '@components/fields/InputUnit';\nimport OntCmp from '@components/fields/OntCmp';\nimport {\n // renderDatetimeRange,\n renderAdjust,\n renderBlank,\n renderColWidth,\n renderDummyFieldGroup,\n renderNameField,\n renderNumberField,\n renderOwnRow,\n renderRequired,\n renderReadonly,\n renderTextFieldGroup,\n renderTypeField,\n} from '@components/elements/Fields';\nimport PositionDnD from '@components/dnd/PositionDnD';\nimport DnDs from '@components/dnd/DnDs';\nimport FIcons from '@components/icons/FIcons';\nimport ButtonDelField from '@components/fields/ButtonDelField';\nimport ButtonEllipse from '@components/fields/ButtonEllipse';\nimport LLabel from '@components/shared/LLabel';\nimport Prop from '@components/designer/template/Prop';\nimport { toNullOrInt } from '@utils/pureUtils';\nimport Constants from '@components/tools/Constants';\n\nclass ElementField extends Component {\n constructor(props) {\n super(props);\n this.state = { parentIsExpanded: props.parentExpand, expandLayers: {} };\n this.handleChange = this.handleChange.bind(this);\n // this.handelDelete = this.handelDelete.bind(this);\n this.handleMove = this.handleMove.bind(this);\n this.handleOntChange = this.handleOntChange.bind(this);\n this.handleUnitChange = this.handleUnitChange.bind(this);\n this.handleAddDummy = this.handleAddDummy.bind(this);\n this.handleAddVoc = this.handleAddVoc.bind(this);\n this.updSubField = this.updSubField.bind(this);\n this.handleDrop = this.handleDrop.bind(this);\n this.toggleExpandLayer = this.toggleExpandLayer.bind(this);\n }\n\n componentDidUpdate(prevProps) {\n const { parentExpand } = this.props;\n if (prevProps.parentExpand !== parentExpand) {\n this.setState({ parentIsExpanded: parentExpand });\n }\n }\n\n handleDrop = (_params) => {\n const { onMove } = this.props;\n const { source, target, rid } = _params;\n onMove.onPosition(rid.key, target, source.fid);\n };\n\n // e: Select event, orig: field type, fe: field, lk: layer key, fc: input change on 'Type', tp: type of input change, e.g. a select, a text, a checkbox, etc.\n handleChange(e, orig, fe, lk, fc, tp) {\n if (\n [\n FieldTypes.F_SELECT,\n FieldTypes.F_SYSTEM_DEFINED,\n FieldTypes.F_SELECT_MULTI,\n ].includes(tp) &&\n e === null\n ) {\n return;\n }\n const { onChange } = this.props;\n const env = e;\n if (fc === 'decimal') {\n env.target.value = toNullOrInt(e.target.value) || 5;\n }\n onChange(env, orig, fe, lk, fc, tp);\n }\n\n handleMove(_params) {\n const { onMove } = this.props;\n const { l, f, isUp } = _params;\n onMove.onField(l, f, isUp);\n }\n\n handleOntChange(_params) {\n const { field: fieldObject, layer } = this.props;\n this.handleChange(\n { value: _params?.data },\n fieldObject['field'],\n fieldObject.field,\n layer.key,\n 'ontology', // 'field',\n FieldTypes.F_SELECT, // 'Ontology' // 'text'\n );\n }\n\n handleUnitChange(_params) {\n const { field: fieldObject, layer } = this.props;\n this.handleChange(\n { value: _params?.data },\n fieldObject.field,\n fieldObject.field,\n layer.key,\n 'value_system', // 'field',\n FieldTypes.F_SYSTEM_DEFINED,\n );\n }\n\n handleAddDummy(_params) {\n const { onDummyAdd } = this.props;\n onDummyAdd(_params);\n }\n\n handleAddVoc(_params) {\n this.handleChange(_params);\n }\n\n // Toggle function to handle expand/collapse\n toggleExpandLayer = (layerKey) => {\n this.setState((prev) => ({\n expandLayers: {\n ...prev.expandLayers,\n [layerKey]: !prev.expandLayers[layerKey],\n },\n }));\n };\n\n updSubField(layerKey, field, cb) {\n const { onFieldSubFieldChange } = this.props;\n onFieldSubFieldChange(layerKey, field, cb);\n }\n\n // handelDelete(delStr, delKey, delRoot) {\n // const { onDelete } = this.props;\n // onDelete(delStr, delKey, delRoot);\n // }\n\n availableUnits(val) {\n const { unitsSystem } = this.props;\n const us = unitsSystem.find((e) => e.field === val);\n if (us === undefined) return null;\n const tbl = us.units.map((e) => (\n <div key={uuid()}>\n {genUnitSup(e.label)}\n <br />\n </div>\n ));\n const popover = (\n <Popover id=\"popover-positioned-scrolling-left\">\n <Popover.Header as=\"h3\">Available units</Popover.Header>\n <Popover.Body>{tbl}</Popover.Body>\n </Popover>\n );\n return (\n <OverlayTrigger\n animation\n placement=\"top\"\n root\n trigger={['hover', 'focus', 'click']}\n overlay={popover}\n >\n <Button variant=\"success\" size=\"sm\">\n {FIcons.faTableCells}\n </Button>\n </OverlayTrigger>\n );\n }\n\n renderComponent() {\n const {\n unitsSystem,\n field: fieldObject,\n layer,\n layerKey,\n genericType,\n allLayers,\n select_options: selections,\n position,\n generic,\n onDelete,\n vocabularies,\n } = this.props;\n const { parentIsExpanded, expandLayers } = this.state;\n const isExpanded = parentIsExpanded && (expandLayers[layerKey] || false);\n\n const metadata = generic?.metadata || {};\n const groups = metadata.groups || [];\n\n // Get data for restriction\n const groupedLayerKeys = groups.flatMap((group) => group.layers || []);\n const currentLayerGroup = groups.find((group) =>\n (group.layers || []).includes(layerKey),\n );\n const sameGroupLayerKeys = currentLayerGroup?.layers || null;\n\n const unitConfig = unitsSystem.map((_c) => {\n return {\n value: _c.field,\n name: _c.label,\n label: _c.label,\n };\n });\n let typeOpts = FieldBase;\n if (genericType === 'Element') {\n typeOpts = ElementBase;\n } else if (genericType === 'Segment') {\n typeOpts = SegmentBase;\n }\n typeOpts.sort((a, b) => a.label.localeCompare(b.label));\n const f = fieldObject;\n\n // Transform to expected format\n const selectOptionsArray = Object.keys(selections || {}).map((key) => ({\n value: key,\n name: key,\n label: key,\n }));\n\n const selectOptionsOpts = [\n FieldTypes.F_SELECT,\n FieldTypes.F_SELECT_MULTI,\n ].includes(f.type)\n ? selectOptionsArray\n : unitConfig;\n const selectOptionsVal =\n selectOptionsOpts?.find((o) => o.value === f.option_layers) || null;\n const selectOptions = [\n FieldTypes.F_SYSTEM_DEFINED,\n FieldTypes.F_SELECT,\n FieldTypes.F_SELECT_MULTI,\n ].includes(f.type) ? (\n <>\n <Form.Group as={Col}>\n {[FieldTypes.F_SELECT, FieldTypes.F_SELECT_MULTI].includes(f.type) ? (\n <LLabel>\n <>\n {getFieldProps('options').label}&nbsp;\n {getFieldProps('options').fieldTooltip}\n </>\n </LLabel>\n ) : (\n <LLabel>\n <>{getFieldProps('si').label}</>\n </LLabel>\n )}\n <div style={{ display: 'flex' }}>\n <span style={{ width: '100%' }}>\n <Select\n styles={frmSelSty}\n name={f.field}\n multi={false}\n options={selectOptionsOpts}\n value={selectOptionsVal}\n onChange={(event) =>\n this.handleChange(\n event,\n f.option_layers,\n f.field,\n layerKey,\n 'option_layers',\n f.type,\n )\n }\n menuPlacement=\"auto\"\n menuPortalTarget={document.body}\n />\n </span>\n </div>\n </Form.Group>\n {[FieldTypes.F_SELECT, FieldTypes.F_SELECT_MULTI].includes(\n f.type,\n ) ? null : (\n <Form.Group as={Col} xs={2}>\n <InputUnit fObj={f} fnUnitChange={this.handleUnitChange} />\n </Form.Group>\n )}\n </>\n ) : null;\n\n const groupOptions = [FieldTypes.F_INPUT_GROUP].includes(f.type) ? (\n <Row className=\"mb-1\">\n <Form.Group as={Col}>\n <GroupFields\n layerKey={layerKey}\n field={f}\n updSub={this.updSubField}\n unitsFields={unitsSystem}\n panelIsExpanded={isExpanded}\n />\n </Form.Group>\n </Row>\n ) : null;\n\n const tableOptions = [FieldTypes.F_TABLE].includes(f.type) ? (\n <Row className=\"mb-1\">\n <Form.Group as={Col}>\n <FieldTable\n genericType={genericType}\n layerKey={layerKey}\n field={f}\n updSub={this.updSubField}\n unitsFields={unitsSystem}\n selectOptions={selectOptionsArray}\n panelIsExpanded={isExpanded}\n />\n <InputGroup>\n <InputGroup.Text>Tables per row</InputGroup.Text>\n <Form.Control\n name={`frmPerRow_${layer.key}_f_${fieldObject.field}`}\n as=\"select\"\n defaultValue={f.cols || 1}\n onChange={(event) =>\n this.handleChange(\n event,\n f.cols,\n f.field,\n layerKey,\n 'cols',\n f.cols,\n )\n }\n >\n <option value={1}>1</option>\n <option value={2}>2</option>\n </Form.Control>\n </InputGroup>\n </Form.Group>\n </Row>\n ) : null;\n\n const textFormula = [FieldTypes.F_TEXT_FORMULA].includes(f.type) ? (\n <Row className=\"mb-1\">\n <Form.Group as={Col}>\n <TextFormula\n layerKey={layerKey}\n field={f}\n updSub={this.updSubField}\n allLayers={allLayers}\n panelIsExpanded={isExpanded}\n />\n </Form.Group>\n </Row>\n ) : null;\n\n const fieldHeader = (\n <span className=\"flex-grow-1\">\n <span className=\"fw-bold\">\n {position}{' '}\n {[FieldTypes.F_DUMMY].includes(f.type) ? '(dummy field)' : f.label}\n </span>\n <FieldBadge fieldObj={f} prop=\"field\" />\n {OntCmp(fieldObject.ontology, '!link')}\n <FieldBadge fieldObj={f} prop=\"type\" />\n <FieldBadge fieldObj={f} prop=\"cols\" />\n </span>\n );\n\n const fieldHeaderButtons = (\n <div onClick={(e) => e.stopPropagation()}>\n {genericType !== Constants.GENERIC_TYPES.DATASET && (\n <ButtonGroup className=\"me-2\">\n <VocabSaveBtn\n field={fieldObject}\n data={generic}\n layer={layer}\n genericType={genericType}\n />\n </ButtonGroup>\n )}\n <ButtonGroup>\n <ButtonTooltip\n idf=\"mv_up\"\n fnClick={this.handleMove}\n element={{ l: layerKey, f: f.field, isUp: true }}\n fa=\"faArrowUp\"\n place=\"top\"\n disabled={position === 1}\n />\n <ButtonTooltip\n idf=\"mv_down\"\n fnClick={this.handleMove}\n element={{ l: layerKey, f: f.field, isUp: false }}\n fa=\"faArrowDown\"\n place=\"top\"\n />\n <ConditionFieldBtn\n field={f}\n fnUpdateSub={this.updSubField}\n layer={layer}\n sortedLayers={allLayers}\n groupedLayerKeys={groupedLayerKeys}\n sameGroupLayerKeys={sameGroupLayerKeys}\n selectOptions={selections || {}}\n as=\"button\"\n // disabled={f.required === true || f.required === 'true'}\n disabled={false} // for testing\n />\n <ButtonEllipse condSet={false}>\n <ButtonTooltip\n idf=\"fld_dum_add\"\n fnClick={this.handleAddDummy}\n element={{ layerKey, field: f.field }}\n fa=\"faSquare\"\n place=\"top\"\n as=\"menu\"\n />\n <Dropdown.Divider />\n <ButtonDelField\n delType={FieldTypes.DEL_FIELD}\n delKey={f.field}\n delRoot={layerKey}\n generic={generic}\n fnConfirm={onDelete}\n as=\"menu\"\n />\n </ButtonEllipse>\n </ButtonGroup>\n </div>\n );\n\n const dnd = (\n <PositionDnD\n key={`_drag_${DnDs.LAYER_FIELD}_${f.field}_${layer.key}`}\n type={`${DnDs.LAYER_FIELD}_${layer.key}`}\n field={{ field: f.field }}\n rowValue={{ key: layer.key }}\n isButton={false}\n />\n );\n\n const customHeader = (\n <>\n {fieldHeader}\n {fieldHeaderButtons}\n </>\n );\n\n return (\n <div>\n {/* <Card className=\"border-0 border-top gu-square-corners\"> */}\n <Card className=\"border-0 gu-square-corners\">\n <Card.Body className=\"p-0\">\n <Prop\n key={`_prop_content_${f.field}_${layerKey}`}\n layerKey={`${f.field}_${layerKey}`}\n toggleExpand={this.toggleExpandLayer}\n propHeader={customHeader}\n >\n <Form>\n <Row className=\"mb-1\">\n {renderNameField({\n layer,\n fieldObject,\n field: 'field',\n fnChange: this.handleChange,\n fnOntChange: this.handleOntChange,\n })}\n {renderTextFieldGroup({\n layer,\n fieldObject,\n field: 'label',\n fnChange: this.handleChange,\n })}\n {renderDummyFieldGroup({ fieldObject })}\n </Row>\n <Row className=\"mb-1\">\n {renderTextFieldGroup({\n layer,\n fieldObject,\n field: 'description',\n fnChange: this.handleChange,\n xs: 6,\n })}\n {renderColWidth({\n layer,\n fieldObject,\n field: 'cols',\n fnChange: this.handleChange,\n })}\n {renderOwnRow({\n layer,\n fieldObject,\n fnChange: this.handleChange,\n })}\n </Row>\n <Row className=\"mb-1\">\n {renderTypeField({\n layer,\n fieldObject,\n fnChange: this.handleChange,\n typeOpts,\n xs: [\n FieldTypes.F_SELECT,\n FieldTypes.F_SYSTEM_DEFINED,\n FieldTypes.F_SELECT_MULTI,\n ].includes(f.type)\n ? undefined\n : undefined,\n })}\n </Row>\n {[\n FieldTypes.F_SELECT,\n FieldTypes.F_SYSTEM_DEFINED,\n FieldTypes.F_SELECT_MULTI,\n ].includes(f.type) && (\n <Row className=\"mb-1\">{selectOptions}</Row>\n )}\n {[FieldTypes.F_FORMULA_FIELD].includes(f.type) ? (\n <Row className=\"mb-1\">\n {renderTextFieldGroup({\n layer,\n fieldObject,\n field: 'formula',\n fnChange: this.handleChange,\n xs: 8,\n })}\n {renderNumberField({\n layer,\n fieldObject,\n field: 'decimal',\n fnChange: this.handleChange,\n xs: 2,\n })}\n {renderAdjust({\n layer,\n fieldObject,\n fnChange: this.handleChange,\n xs: 2,\n })}\n </Row>\n ) : null}\n {groupOptions}\n {/* {renderDatetimeRange({ fieldObject })} */}\n {tableOptions}\n {textFormula}\n {[FieldTypes.F_INTEGER, FieldTypes.F_TEXT].includes(f.type) && (\n <>\n <Row className=\"mb-1\">\n {renderTextFieldGroup({\n layer,\n fieldObject,\n field: 'placeholder',\n fnChange: this.handleChange,\n xs: undefined,\n })}\n </Row>\n <Row className=\"mb-1\">\n {renderReadonly({\n layer,\n fieldObject,\n fnChange: this.handleChange,\n })}\n {['Element'].includes(genericType)\n ? renderRequired({\n layer,\n fieldObject,\n fnChange: this.handleChange,\n xs: 6,\n })\n : renderBlank()}\n </Row>\n </>\n )}\n </Form>\n </Prop>\n </Card.Body>\n </Card>\n </div>\n );\n }\n\n render() {\n return (\n <Col md={12} className=\"ps-0\">\n {this.renderComponent()}\n </Col>\n );\n }\n}\n\nElementField.propTypes = {\n genericType: PropTypes.string, // PropTypes.arrayOf(PropTypes.object),\n layer: PropTypes.object.isRequired,\n layerKey: PropTypes.string.isRequired,\n select_options: PropTypes.object,\n position: PropTypes.number.isRequired,\n field: PropTypes.object.isRequired,\n onMove: PropTypes.shape({\n onField: PropTypes.func.isRequired,\n onPosition: PropTypes.func.isRequired,\n }).isRequired,\n onDelete: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n unitsSystem: PropTypes.array,\n onFieldSubFieldChange: PropTypes.func.isRequired,\n onDummyAdd: PropTypes.func.isRequired,\n vocabularies: PropTypes.array,\n parentExpand: PropTypes.bool,\n};\n\nElementField.defaultProps = {\n genericType: 'Element',\n unitsSystem: [],\n vocabularies: [],\n parentExpand: false,\n select_options: {},\n};\n\nexport default ElementField;\n","import { notifyError, notifySuccess } from '@utils/template/designer-message';\nimport Response from '@utils/response';\n\n/**\n * The response object for condition creation.\n * @param {*} _notify\n * @param {*} _element\n * @param {*} _additional\n * @returns {Response} The response object with extra information.\n */\nconst responseCondition = (_notify, _element, _additional = {}) => {\n const response = new Response(_notify, _element);\n response.additional = _additional;\n return response;\n};\n\n// return notify object and result\nexport const verifyConditionLayer = (_element, _layerKey) => {\n const [element, layerKey] = [_element, _layerKey];\n const layer = element?.properties_template?.layers[layerKey];\n if (layer?.wf) {\n return responseCondition(\n notifyError(\n 'Layer Restriction cannot be set on the workflow layer.',\n `Layer [${_layerKey}]`\n ),\n element,\n { fieldObj: null, layerKey }\n );\n }\n return responseCondition(notifySuccess(), element, {\n fieldObj: null,\n layerKey,\n });\n};\n\nexport const handleCondition = (_element, _layerKey, _field) => {\n const [element, field, layerKey] = [_element, _field, _layerKey];\n const layer = element?.properties_template?.layers[layerKey];\n if (!_field && layer?.wf) {\n return responseCondition(\n notifyError(\n 'Layer Restriction cannot be set on the workflow layer.',\n `Layer [${_layerKey}]`\n ),\n element,\n { fieldObj: field, layerKey }\n );\n }\n return responseCondition(notifySuccess(), element, {\n fieldObj: field,\n layerKey,\n });\n};\n\nexport const handleFieldSubChange = (\n _element,\n _layerKey,\n _field,\n _cb = () => {}\n) => {\n const [element, layerKey, field, cb] = [_element, _layerKey, _field, _cb];\n const layer = element?.properties_template?.layers[layerKey];\n const { fields } = layer;\n if (layer != null) {\n const fieldObj = (fields || []).find(o => o.field === field.field);\n if (fieldObj && Object.keys(fieldObj || {}).length > 0) {\n const idx = (fields || []).findIndex(o => o.field === field.field);\n fields.splice(idx, 1, field);\n element.properties_template.layers[layerKey].fields = fields;\n }\n }\n return responseCondition(notifySuccess(), element, {\n fieldObj: field,\n layerKey,\n });\n};\n\nexport const handleLayerConditionChange = (_element, _layerKey) => {\n const [element, layerKey] = [_element, _layerKey];\n return responseCondition(notifySuccess(), element, {\n fieldObj: null,\n layerKey,\n });\n};\n","import filter from 'lodash/filter';\nimport findIndex from 'lodash/findIndex';\nimport { FieldTypes } from 'generic-ui-core';\nimport { validateFieldName } from '@utils/template/input-validation';\nimport { mergeOptions } from '@utils/template/remodel-handler';\nimport { notifyFieldAdd, notifySuccess } from '@utils/template/designer-message';\nimport Response from '@utils/response';\n\nconst resetPosition = (_fields) => {\n const updatedFields = _fields.map((f, idx) => {\n return { ...f, position: idx + 1 };\n });\n return updatedFields;\n};\n\nexport const handleAddVocabulary = (_element, _layer, _selected) => {\n const [element, layer, selected] = [_element, _layer, _selected];\n\n const fields = layer.fields || [];\n // const ontology = {\n // id: `ncit:class:http://purl.obolibrary.org/obo/${selected.term_id}`,\n // iri: `http://purl.obolibrary.org/obo/${selected.term_id}`,\n // type: 'class',\n // label: selected.name,\n // ontology_name: 'ncit',\n // ontology_prefix: 'NCIT',\n // obo_id: selected.term_id,\n // short_form: selected.term_id,\n // description: [selected.name],\n // };\n const dupFields = filter(fields, (o) => o.field === selected.name);\n if (dupFields && dupFields.length > 0) {\n return new Response(\n notifyFieldAdd(\n false,\n `Field (${selected.name}) ${selected.label} is already exist.`\n ),\n element\n );\n }\n // move \"select_options\" to another constant\n const selectOptions = selected.properties?.select_options || {};\n // delete selected.select_options; // TODO: need to delete later\n const newField = {\n is_voc: true,\n identifier: selected.identifier,\n type: selected.field_type,\n ontology: selected.ontology,\n field: selected.name,\n position: 100,\n label: selected.label,\n default: '',\n };\n if (selected.opid) newField.opid = selected.opid;\n if (selected.source) newField.source = selected.source;\n if (selected.source_id) newField.source_id = selected.source_id;\n if (selected.layer_id) newField.layer_id = selected.layer_id;\n if (selected.field_id) newField.field_id = selected.field_id;\n if (selected.properties?.option_layers)\n newField.option_layers = selected.properties?.option_layers;\n fields.push(newField);\n element.properties_template.layers[layer.key].fields = fields;\n // Handle select_options in the properties_template\n if (!element.properties_template?.select_options) {\n element.properties_template.select_options = selectOptions;\n } else {\n // Merge selectOptions with existing select_options\n element.properties_template.select_options = mergeOptions(\n selectOptions,\n element.properties_template.select_options\n );\n }\n // Check if \"select_options\" is empty, if so, delete it\n if (\n Object.keys(element.properties_template?.select_options || {}).length === 0\n ) {\n delete element.properties_template.select_options;\n }\n return new Response(\n notifyFieldAdd(\n true,\n `New field (from Lab-Voc) has been added successfully.`\n ),\n element\n );\n};\n\n/**\n * Handles the field creation.\n * @param {string} _newFieldKey The name of the field.\n * @param {object} _element The element object.\n * @param {string} _layer The key of the layer within the element.\n * @returns {Response} The response object with extra layerKey.\n */\nexport const handleCreateField = (_newFieldKey, _element, _layer) => {\n const [newFieldKey, element, layer] = [_newFieldKey, _element, _layer];\n const verify = validateFieldName(newFieldKey, element);\n if (!verify.isSuccess) {\n return new Response(verify, element);\n }\n const fields = layer.fields || [];\n const dupFields = filter(fields, (o) => o.field === newFieldKey);\n if (dupFields && dupFields.length > 0) {\n return new Response(\n notifyFieldAdd(\n false,\n `Field [${newFieldKey}] is already in use, please choose a different field name.`\n ),\n element\n );\n }\n const newField = {\n type: FieldTypes.F_TEXT,\n field: newFieldKey,\n position: 100,\n label: newFieldKey,\n default: '',\n };\n fields.push(newField);\n element.properties_template.layers[layer.key].fields = fields;\n return new Response(\n notifyFieldAdd(true, `Field [${newFieldKey}] has been added successfully.`),\n element\n );\n};\n\nexport const handleFieldMove = (_element, _layerKey, _field, _isUp) => {\n const [element, layerKey, field, isUp] = [_element, _layerKey, _field, _isUp];\n const layer = element?.properties_template?.layers[layerKey];\n const { fields } = layer;\n const idx = findIndex(fields, (o) => o.field === field);\n if (idx >= 0 && isUp) {\n const curObj = fields[idx];\n curObj.position -= 1;\n const preObj = fields[idx - 1];\n preObj.position += 1;\n fields[idx] = preObj;\n fields[idx - 1] = curObj;\n } else if (idx < fields.length - 1 && !isUp) {\n const curObj = fields[idx];\n curObj.position += 1;\n const nexObj = fields[idx + 1];\n nexObj.position -= 1;\n fields[idx] = nexObj;\n fields[idx + 1] = curObj;\n }\n element.properties_template.layers[layerKey].fields = fields;\n return new Response(notifySuccess(), element);\n};\n\nexport const handlePositionChange = (_element, _layerKey, _target, _source) => {\n const [element, layerKey, target, source] = [\n _element,\n _layerKey,\n _target,\n _source,\n ];\n const layer = element?.properties_template?.layers[layerKey];\n if (layer) {\n const { fields } = layer;\n const sourceIdx = findIndex(fields, (o) => o.field === source.field);\n const targetIdx = findIndex(fields, (o) => o.field === target.field);\n if (sourceIdx < 0 || targetIdx < 0) {\n return new Response(notifySuccess(), element);\n }\n const removedElement = fields.splice(sourceIdx, 1)[0];\n fields.splice(targetIdx, 0, removedElement);\n element.properties_template.layers[layerKey].fields = resetPosition(fields);\n return new Response(notifySuccess(), element);\n }\n return new Response(notifySuccess(), element);\n};\n\nexport const handleLayerPositionChange = (_element, _target, _source) => {\n const [element, target, source] = [_element, _target, _source];\n const layers = { ...element.properties_template.layers }; // Create a copy of layers\n\n const layerKeys = Object.keys(layers).sort(\n (a, b) => layers[a].position - layers[b].position\n );\n const sourceIdx = layerKeys.indexOf(source.key);\n const targetIdx = layerKeys.indexOf(target.key);\n if (sourceIdx < 0 || targetIdx < 0) {\n return new Response(notifySuccess(), element);\n }\n // Remove the source layer and insert it at the target position\n const removedLayerKey = layerKeys.splice(sourceIdx, 1)[0];\n layerKeys.splice(targetIdx, 0, removedLayerKey);\n\n // Create a new layers object with the updated order\n const newLayers = {};\n layerKeys.forEach((key, idx) => {\n newLayers[key] = layers[key];\n newLayers[key].position = (idx + 1) * 10;\n });\n\n element.properties_template.layers = newLayers;\n return new Response(notifySuccess(), element);\n};\n","/* eslint-disable react/forbid-prop-types */\n\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { organizeLayersForDisplay } from '@utils/template/group-handler';\nimport { getUnitSystem } from 'generic-ui-core';\nimport ElementField from '@components/elements/ElementField';\nimport {\n handleAddDummy,\n handleDelete,\n handleFieldInputChange,\n} from '@utils/template/action-handler';\nimport { handleFieldSubChange } from '@utils/template/condition-handler';\nimport {\n handleFieldMove,\n handlePositionChange,\n} from '@utils/template/field-handler';\n\nconst PropFields = (props) => {\n const { generic, genericType, fnUpdate, layer, vocabularies, parentExpand } =\n props;\n\n const onDummyAdd = (_e) => {\n const { layerKey: _layerKey, field: _field } = _e;\n const result = handleAddDummy(generic, _layerKey, _field);\n fnUpdate(result);\n };\n\n const onFieldMove = (_layerKey, _field, _isUp) => {\n const result = handleFieldMove(generic, _layerKey, _field, _isUp);\n fnUpdate(result);\n };\n\n // const onFieldRemove = (delStr, delKey, delRoot) => {\n // const result = handleDelete(delStr, delKey, delRoot, generic);\n // fnUpdate(result);\n // };\n const onFieldRemove = (result) => {\n fnUpdate(result);\n };\n\n const onFieldInputChange = (\n _event,\n _orig,\n _field,\n _layerKey,\n _fieldCheck,\n _type,\n ) => {\n const result = handleFieldInputChange(\n generic,\n _event,\n _orig,\n _field,\n _layerKey,\n _fieldCheck,\n _type,\n );\n fnUpdate(result);\n };\n\n const onFieldSubFieldChange = (_layerKey, _field, _cb) => {\n const result = handleFieldSubChange(generic, _layerKey, _field, _cb);\n fnUpdate(result);\n };\n\n const onPositionMove = (_layerKey, _target, _source) => {\n const result = handlePositionChange(generic, _layerKey, _target, _source);\n fnUpdate(result);\n };\n\n // Use organizeLayersForDisplay to respect group structure\n const displayItems = organizeLayersForDisplay(\n generic.properties_template.layers || {},\n generic.metadata?.groups || [],\n );\n\n const sortedLayers = [];\n displayItems.forEach((item) => {\n if (item.type === 'group') {\n item.layers.forEach((layerItem) => {\n sortedLayers.push(layerItem.data);\n });\n } else {\n sortedLayers.push(item.data);\n }\n });\n\n // Pass original select_options object structure\n const selectOptions = generic.properties_template?.select_options || {};\n\n const fields = (layer?.fields || []).map((f, idx) => (\n <ElementField\n generic={generic}\n genericType={genericType}\n key={`_propF_${genericType}_${layer.key}_${f.field}_${idx}`}\n layer={layer}\n layerKey={layer.key}\n position={idx + 1}\n field={f}\n select_options={selectOptions}\n onMove={{ onField: onFieldMove, onPosition: onPositionMove }}\n onDelete={onFieldRemove}\n onChange={onFieldInputChange}\n unitsSystem={getUnitSystem()}\n onFieldSubFieldChange={onFieldSubFieldChange}\n onDummyAdd={onDummyAdd}\n allLayers={sortedLayers}\n vocabularies={vocabularies}\n parentExpand={parentExpand}\n />\n ));\n\n return <>{fields}</>;\n};\n\nPropFields.propTypes = {\n generic: PropTypes.object.isRequired,\n genericType: PropTypes.string.isRequired,\n fnUpdate: PropTypes.func.isRequired,\n layer: PropTypes.object.isRequired,\n vocabularies: PropTypes.array,\n parentExpand: PropTypes.bool,\n};\n\nPropFields.defaultProps = { vocabularies: [], parentExpand: false };\n\nexport default PropFields;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, InputGroup } from 'react-bootstrap';\nimport ButtonTooltip from '@components/fields/ButtonTooltip';\n\nconst NewFieldBtn = ({ fnUpdate, layer, children }) => {\n const [newFieldKey, setNewFieldKey] = useState('');\n\n const onInputNewField = (_e) => {\n setNewFieldKey(_e.target.value);\n };\n\n return (\n <div\n onMouseDown={(e) => e.stopPropagation()} // Prevent accordion collapse on click\n onClick={(e) => e.stopPropagation()} // Prevent accordion collapse on click\n onKeyDown={(e) => e.stopPropagation()} // Add keyboard listener\n role=\"button\" // Add role for accessibility\n tabIndex={0} // Make the div focusable\n >\n <InputGroup>\n <Form.Control\n type=\"text\"\n name=\"field_new\"\n placeholder=\"Input new field name\"\n size=\"sm\"\n onChange={(e) => onInputNewField(e)}\n onFocus={(e) => {\n e.stopPropagation();\n e.preventDefault();\n }}\n style={{ maxWidth: '140px', boxShadow: 'none' }}\n />\n <ButtonTooltip\n idf=\"fld_add\"\n fnClick={fnUpdate}\n element={{ layer, newFieldKey }}\n fa=\"faPlus\"\n place=\"top\"\n />\n {children}\n </InputGroup>\n </div>\n );\n};\n\nNewFieldBtn.propTypes = {\n fnUpdate: PropTypes.func.isRequired,\n layer: PropTypes.object.isRequired,\n children: PropTypes.node,\n};\n\nNewFieldBtn.defaultProps = { children: null };\n\nexport default NewFieldBtn;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Col, Form, Row } from 'react-bootstrap';\nimport FIcons from '@components/icons/FIcons';\nimport LFormGroup from '@components/shared/LFormGroup';\n\nconst LayerForm = ({ init, layer, onChange }) => {\n const { label: initLabel, key: initKey } = init;\n const { description, label, key } = layer;\n return (\n <Row>\n <Col xs={6}>\n <h4>Current Setting</h4>\n <Form>\n <LFormGroup>\n <Form.Label>Name</Form.Label>\n <Form.Control\n type=\"text\"\n value={initKey}\n placeholder=\"An identifier for the layer, must be unique in Standard Layers.\"\n disabled\n readOnly\n />\n </LFormGroup>\n <LFormGroup>\n <Form.Label>Display Name</Form.Label>\n <Form.Control\n type=\"text\"\n value={initLabel}\n placeholder=\"Give a name to display on the UI. Empty is allow.\"\n disabled\n readOnly\n />\n </LFormGroup>\n <div style={{ fontSize: '12px', display: 'flex' }}>\n <span className=\"mr-1\">{FIcons.faCircleInfo}</span>\n <span>\n <b>About &quot;Name&quot;</b>\n <p className=\"mb-1\">\n 1. The layer name is a unique identifier within{' '}\n <b>Standard Layers</b> and must be at least 3 characters long.\n </p>\n <p className=\"mb-1\">\n 2. It should consist only of lowercase letters and underscores,\n but underscores cannot be placed at the beginning or end.\n </p>\n <p className=\"mb-1\">\n 3. Special characters such as $, !, %, and others are not\n allowed.\n </p>\n </span>\n </div>\n </Form>\n </Col>\n <Col xs={6}>\n <h4>Please give the below information</h4>\n <Form>\n <LFormGroup>\n <Form.Label>Name</Form.Label>\n <Form.Control\n required\n type=\"text\"\n value={key}\n placeholder=\"An identifier for the layer, must be unique in Standard Layers.\"\n onChange={(e) => onChange('key', e.target.value)}\n />\n </LFormGroup>\n <LFormGroup>\n <Form.Label>Display Name</Form.Label>\n <Form.Control\n type=\"text\"\n value={label}\n placeholder=\"Give a name to display on the UI. Empty is allow.\"\n disabled\n readOnly\n />\n </LFormGroup>\n <LFormGroup>\n <Form.Label>Description</Form.Label>\n <Form.Control\n as=\"textarea\"\n rows={3}\n value={description}\n placeholder=\"Give a description to describe the usage/purpose.\"\n onChange={(e) => onChange('description', e.target.value)}\n />\n </LFormGroup>\n <LFormGroup>\n <Form.Label>Who can use this layer?</Form.Label>\n <Form.Check type=\"radio\">\n <Form.Check.Input type=\"radio\" checked readOnly />\n <Form.Check.Label>\n <span className=\"gu-mr-1\">{FIcons.faGlobe}</span>\n <b>Standard</b>\n <div>\n This can be used by any designer later in the template.\n </div>\n </Form.Check.Label>\n </Form.Check>\n </LFormGroup>\n </Form>\n </Col>\n </Row>\n );\n};\n\nLayerForm.propTypes = {\n init: PropTypes.shape({\n label: PropTypes.string,\n key: PropTypes.string,\n }).isRequired,\n layer: PropTypes.shape({\n description: PropTypes.string,\n label: PropTypes.string,\n key: PropTypes.string,\n }).isRequired,\n onChange: PropTypes.func.isRequired,\n};\n\nexport default LayerForm;\n","import { isLayerInWF } from 'generic-ui-core';\nimport { notifyError, notifySuccess } from '@utils/template/designer-message';\n\nexport const isValidKlass = klass => /\\b[a-z]{3,5}\\b/.test(klass);\nexport const isValidField = field => /^[a-zA-Z0-9_]*$/.test(field);\n\nexport const validateSegmentKlassInput = element => {\n if (element.label === '') {\n return notifyError(\n 'Please input Segment Label.',\n `Segment [${element.label}]`\n );\n }\n if (element.klass_element === '') {\n return notifyError(\n 'Please assign to an Element.',\n `Segment [${element.label}]`\n );\n }\n return notifySuccess();\n};\n\nexport const validateLayerDeletion = (_element, _delKey) => {\n if (isLayerInWF(_element, _delKey)) {\n return notifyError(\n `This layer [${_delKey}] can not be removed because it is currently used in workflow.`,\n `Layer [${_delKey}]`\n );\n }\n return notifySuccess(\n [\n 'Operation successfully.',\n \"Remember to save once you've finished editing.\",\n ].join(' ')\n );\n};\n\n/**\n * Validate inputs for the standard layer\n * Duplicate layer key validation is done in the backend\n * Updation can only be performed by the creator validation is done in the backend\n * Do we need to track the version of the layer? No.\n * Can the layer be updated? 'Yes' for the creator.\n * If the layer can be updated, which fields can be updated? All fields.\n * @param {*} layer\n * @param {*} act\n * @returns {Object} notifySuccess or notifyError\n */\nexport const validateLayerInput = layer => {\n if (layer.key === '') {\n return notifyError('Please input Name.', `Layer [${layer.key}]`);\n }\n if (!/^[a-z][a-z_]+[a-z]$/g.test(layer.key)) {\n return notifyError(\n 'This Name is invalid, please try a different one.',\n `Layer [${layer.key}]`\n );\n }\n return notifySuccess();\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useEffect, useReducer } from 'react';\nimport { Button } from 'react-bootstrap';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { FieldTypes } from 'generic-ui-core';\nimport LayerForm from '@components/designer/template/LayerForm';\nimport LayerSaveModal from '@components/elements/LayerSaveModal';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\nimport LayerManager from '@utils/desMgr';\nimport NotificationMessage from '@components/designer/template/NotificationMessage';\nimport { validateLayerInput } from '@utils/template/standard-validation';\nimport { mergeOptions } from '@utils/template/remodel-handler';\n\nconst extractOptionsFromTable = (_layer, _data) => {\n const options = { select_options: {} };\n const layer = cloneDeep(_layer);\n const data = cloneDeep(_data);\n const selectFields = layer.fields.filter(\n (field) => field.type === FieldTypes.F_TABLE\n );\n selectFields.forEach((selectField) => {\n // TODO: Implement the logic to extract options from table fields\n // For each table field, a property \"sub_fields\" is an array of objects, each object has a property \"type\"\n // If the type is \"select\", then a property \"option_layers\" may exist, which is a string, and we use it to search the data?.properties_template?.select_options to get the options\n (selectField.sub_fields || []).forEach((subField) => {\n if (\n [FieldTypes.F_SELECT, FieldTypes.F_SELECT_MULTI].includes(subField.type) &&\n subField.option_layers\n ) {\n const optionLayerKey = subField.option_layers;\n if (data?.properties_template?.select_options?.[optionLayerKey]) {\n // Add the entire matching object to the result\n options.select_options[optionLayerKey] =\n data.properties_template.select_options[optionLayerKey];\n options.select_options[optionLayerKey].desc = optionLayerKey;\n }\n }\n });\n });\n // Check if any options, otherwise return null\n if (Object.keys(options.select_options || {}).length === 0) {\n return null;\n }\n return options;\n};\n\nconst extractOptions = (_layer, _data) => {\n const options = { select_options: {} };\n const layer = cloneDeep(_layer);\n const data = cloneDeep(_data);\n // Extract the \"select\" type fields\n const selectFields = layer.fields.filter((field) =>\n [FieldTypes.F_SELECT, FieldTypes.F_SELECT_MULTI].includes(field.type)\n );\n // For each select field, use the option_layers to find the matching options\n selectFields.forEach((selectField) => {\n const optionLayerKey = selectField.option_layers;\n // Check if it has options for this layer key\n if (data?.properties_template?.select_options?.[optionLayerKey]) {\n // Add the entire matching object to the result\n options.select_options[optionLayerKey] =\n data.properties_template.select_options[optionLayerKey];\n options.select_options[optionLayerKey].desc = optionLayerKey;\n }\n });\n // Check if any options, otherwise return null\n if (Object.keys(options.select_options || {}).length === 0) {\n return null;\n }\n return options;\n};\n\nconst initialState = {\n show: false,\n layer: null,\n data: null,\n notify: null,\n};\n\nconst reducer = (state, action) => {\n switch (action.type) {\n case 'reset':\n return {\n ...initialState,\n layer: action.payload.layer,\n data: action.payload.data,\n };\n default: {\n return { ...state, [action.type]: action.payload };\n }\n }\n};\n\nconst LayerSaveBtn = (props) => {\n const { layer: initialLayer, data: initialData } = props;\n\n // 1. State declarations\n const [state, dispatch] = useReducer(reducer, {\n ...initialState,\n layer: initialLayer,\n data: initialData,\n });\n\n // 2. Side effects\n useEffect(() => {\n dispatch({ type: 'layer', payload: initialLayer });\n }, [initialLayer]);\n\n useEffect(() => {\n dispatch({ type: 'data', payload: initialData });\n }, [initialData]);\n\n // 3. Event handlers and other functions\n const inputChange = (_field, _value) => {\n dispatch({ type: 'layer', payload: { ...state.layer, [_field]: _value } });\n };\n\n const handleSave = async () => {\n let res = validateLayerInput(state.layer);\n if (!res.isSuccess) {\n dispatch({ type: 'notify', payload: res });\n } else {\n const options = extractOptions(state.layer, state.data);\n const optionsFromTable = extractOptionsFromTable(state.layer, state.data);\n const mergedOptions = mergeOptions(optionsFromTable || {}, options || {});\n const saveInput = {\n ...state.layer,\n ...mergedOptions,\n };\n res = await LayerManager.saveStandardLayer(saveInput);\n dispatch({ type: 'notify', payload: res.notify });\n }\n };\n\n const handleReset = (e) => {\n if (e && e.stopPropagation) {\n e.stopPropagation();\n }\n dispatch({\n type: 'reset',\n payload: { layer: initialLayer, data: initialData },\n });\n };\n\n // 4. Render-related variables\n const saveButton = (\n <Button\n key=\"success\"\n variant=\"success\"\n onClick={(e) => {\n e.stopPropagation();\n handleSave();\n }}\n >\n Save\n </Button>\n );\n\n const resetButton = (\n <Button key=\"primary\" variant=\"secondary\" onClick={(e) => handleReset(e)}>\n Close\n </Button>\n );\n\n // 5. Return statement (JSX)\n return (\n <>\n <LTooltip idf=\"lyr_add2std\">\n <Button\n variant=\"light\"\n onClick={(e) => {\n e.stopPropagation();\n dispatch({ type: 'show', payload: true });\n }}\n >\n {FIcons.faGlobe}\n </Button>\n </LTooltip>\n <LayerSaveModal\n acts={[saveButton, resetButton]}\n title=\"Standard Layer\"\n showProps={{\n show: state.show,\n setShow: (value) => dispatch({ type: 'show', payload: value }),\n }}\n close={handleReset}\n >\n <>\n <NotificationMessage\n notify={state.notify}\n onClose={() => dispatch({ type: 'notify', payload: null })}\n />\n <LayerForm\n init={initialLayer}\n layer={state.layer}\n onChange={inputChange}\n />\n </>\n </LayerSaveModal>\n </>\n );\n};\n\nexport default LayerSaveBtn;\n","import React, {\n useState,\n useEffect,\n useMemo,\n useCallback,\n useRef,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Form } from 'react-bootstrap';\nimport { AgGridReact } from 'ag-grid-react';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\nimport VocabManager from '@utils/vocMgr';\nimport ButtonConfirm from '@components/fields/ButtonConfirm';\nimport Constants from '@components/tools/Constants';\n\nconst editableSource = [\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n];\n\nconst defaultColDef = {\n minWidth: 70,\n filter: false,\n sortable: true,\n};\n\nconst VocabGrid = ({ onVocSelect, onVocDelete }) => {\n const gridRef = useRef();\n const qfRef = useRef();\n const gridStyle = useMemo(() => ({ height: '600px', width: '100%' }), []);\n const [rowData, setRowData] = useState([]);\n const [columnDefs] = useState([\n {\n headerName: 'Action',\n cellRenderer: (params) => (\n <>\n <LTooltip idf=\"voc_add2tpl\">\n <Button size=\"sm\" onClick={() => onVocSelect(params)}>\n Add\n </Button>\n </LTooltip>\n {editableSource.includes(params.data.source) && (\n <ButtonConfirm\n cls=\"gu-ml-1\"\n msg=\"Delete this Lab-Vocab permanently?\"\n fnClick={onVocDelete}\n fnParams={params}\n disabled={false}\n />\n )}\n </>\n ),\n sortable: false,\n width: 100,\n },\n {\n field: 'id',\n headerName: 'ID',\n sortable: false,\n width: 70,\n },\n {\n field: 'name',\n headerName: 'Field Name',\n width: 200,\n },\n {\n field: 'label',\n headerName: 'Display Name',\n width: 200,\n },\n {\n field: 'field_type',\n headerName: 'Type',\n width: 120,\n },\n {\n field: 'source',\n headerName: 'Ref. Source',\n width: 120,\n },\n {\n field: 'voc.source_name',\n headerName: 'Ref. Source Name',\n width: 200,\n },\n {\n field: 'layer_id',\n headerName: 'Ref. Source Layer',\n width: 200,\n },\n {\n field: 'ontology.short_form',\n headerName: 'Ref. Terminology',\n width: 120,\n },\n ]);\n\n useEffect(() => {\n const fetchVocabularies = async () => {\n const res = await VocabManager.getAllVocabularies();\n if (res.notify.isSuccess) {\n setRowData(res.element.data || []);\n }\n };\n fetchVocabularies();\n }, []);\n\n const onFilterTextBoxChanged = useCallback(() => {\n gridRef.current.api.setGridOption('quickFilterText', qfRef.current.value);\n }, []);\n\n return (\n <div>\n <div className=\"mb-2\">\n <div className=\"position-relative\">\n <span className=\"position-absolute top-50 translate-middle-y ms-2 text-muted\">\n {FIcons.faMagnifyingGlass}\n </span>\n <Form.Control\n ref={qfRef}\n type=\"text\"\n placeholder=\"Enter text to filter...\"\n style={{ paddingLeft: '2rem' }}\n onChange={onFilterTextBoxChanged}\n />\n </div>\n </div>\n <div className={Constants.GRID_THEME.QUARTZ.VALUE} style={gridStyle}>\n <AgGridReact\n ref={gridRef}\n columnDefs={columnDefs}\n defaultColDef={defaultColDef}\n rowData={rowData}\n />\n </div>\n </div>\n );\n};\n\nVocabGrid.propTypes = {\n onVocSelect: PropTypes.func.isRequired,\n onVocDelete: PropTypes.func.isRequired,\n};\n\nexport default VocabGrid;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal } from 'react-bootstrap';\nimport { handleAddVocabulary } from '@utils/template/field-handler';\nimport LTooltip from '@components/shared/LTooltip';\nimport FIcons from '@components/icons/FIcons';\nimport VocabGrid from '@components/designer/template/VocabGrid';\nimport VocabManager from '@utils/vocMgr';\n\nconst VocabularyListBtn = (props) => {\n const { element, fnUpdate, layer } = props;\n const [show, setShow] = useState(false);\n\n const handleShow = () => setShow(true);\n const handleClose = () => setShow(false);\n\n const handleDeleteVoc = async (params) => {\n await VocabManager.deleteVocabulary(params.data.id);\n setShow(false);\n };\n\n const handleSelectVoc = (params) => {\n const result = handleAddVocabulary(element, layer, params.data);\n fnUpdate(result);\n setShow(false);\n };\n\n return (\n <>\n <LTooltip idf=\"sel_voc2tpl\">\n <Button\n variant=\"light\"\n size=\"sm\"\n onClick={(e) => {\n e.stopPropagation();\n handleShow();\n }}\n >\n {FIcons.faSpellCheck}\n </Button>\n </LTooltip>\n\n <Modal\n centered\n show={show}\n onHide={handleClose}\n dialogClassName=\"gu_modal-68w\"\n >\n <Modal.Header closeButton>\n <Modal.Title>LabIMotion Vocabulary (Lab-Vocab) List</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <VocabGrid\n onVocSelect={handleSelectVoc}\n onVocDelete={handleDeleteVoc}\n />\n </Modal.Body>\n <Modal.Footer className=\"justify-content-start\">\n <LTooltip idf=\"close\">\n <Button\n variant=\"secondary\"\n onClick={(e) => {\n e.stopPropagation();\n handleClose();\n }}\n >\n Close\n </Button>\n </LTooltip>\n </Modal.Footer>\n </Modal>\n </>\n );\n};\n\nVocabularyListBtn.propTypes = {\n element: PropTypes.object.isRequired,\n fnUpdate: PropTypes.func.isRequired,\n layer: PropTypes.object.isRequired,\n};\n\nexport default VocabularyListBtn;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Table } from 'react-bootstrap';\nimport { getCondOperator } from 'generic-ui-core';\n\nconst ConditionsDisplay = ({ conditions }) => {\n const { cond_fields: condFields = [], cond_operator: matchOp = 1 } =\n conditions;\n\n if (!condFields.length) return null;\n\n const matchOpLabel = getCondOperator[matchOp];\n const condFieldsList = condFields.map((condField) => {\n const { id, layer, field, value } = condField;\n return (\n <tr key={id}>\n <td>{layer}</td>\n <td>{field}</td>\n <td>{value}</td>\n </tr>\n );\n });\n return (\n <>\n <div className=\"fw-semibold fst-italic\">\n Restriction Setting: {matchOpLabel}\n </div>\n <Table size=\"sm\" bordered responsive className=\"m-0\">\n <thead className=\"table-light\">\n <tr>\n {['Layer', 'Field', 'Value'].map((label) => (\n <th key={label}>{label}</th>\n ))}\n </tr>\n </thead>\n <tbody>{condFieldsList}</tbody>\n </Table>\n </>\n );\n};\n\nConditionsDisplay.propTypes = {\n conditions: PropTypes.shape({\n cond_fields: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string,\n layer: PropTypes.string,\n field: PropTypes.string,\n value: PropTypes.string,\n }),\n ),\n cond_operator: PropTypes.number,\n }).isRequired,\n};\n\nexport default ConditionsDisplay;\n","import React, { forwardRef, useImperativeHandle, useState, useRef } from 'react';\nimport Col from 'react-bootstrap/Col';\nimport Row from 'react-bootstrap/Row';\nimport sortBy from 'lodash/sortBy';\nimport { FieldTypes, moveField } from 'generic-ui-core';\nimport DragLayer from '@components/dnd/DragLayer';\nimport DnD from '@components/dnd/DnD';\nimport DnDs from '@components/dnd/DnDs';\nimport FIcons from '@components/icons/FIcons';\nimport FieldConditionsDisplay from '@components/designer/template/ConditionsDisplay';\nimport { LHText } from '@components/shared/LCom';\nimport { defaultFieldsContent, definedFieldHeader } from '@components/shared/arrangeUtils';\n\nconst FieldOrderContent = forwardRef(({ layer }, ref) => {\n // Initialize state with empty object or layers\n const fields = layer?.fields || [];\n // Initialize state with the original layers\n const [newFields, setNewFields] = useState(fields);\n\n // Create ref for scrollable container\n const scrollableContainerRef = useRef(null);\n\n // Expose method to get current newFields value\n useImperativeHandle(ref, () => ({\n getUpdates: () => newFields,\n }));\n\n if (fields.length === 0) return defaultFieldsContent;\n\n const handleMove = (sourceKey, targetKey) => {\n const updatedFields = moveField(newFields, sourceKey, targetKey);\n setNewFields(updatedFields);\n };\n\n // Use different source for current and new arrangements\n const currentSortedFields = sortBy(fields, ['position']) || [];\n const newSortedFields = sortBy(newFields, ['position']) || [];\n\n const block = (obj, isNew = false) => {\n const { label, field, type } = obj;\n\n const contentStyle = `p-3 rounded border border-${\n isNew ? 'primary' : 'secondary'\n } `;\n\n const content = (\n <div className={contentStyle}>\n {definedFieldHeader(label, field, FieldTypes.F_DUMMY === type ? 'dummy' : type)}\n <FieldConditionsDisplay conditions={obj} />\n </div>\n );\n\n // If it's current view or workflow layer, return non-draggable content\n if (!isNew) {\n return (\n <div\n key={`${field}-${isNew ? 'new' : 'current'}`}\n className=\"w-100 p-2 m-2\"\n >\n <div>{content}</div>\n </div>\n );\n }\n\n return (\n <DnD\n key={`${field}-${isNew ? 'new' : 'current'}`}\n type={DnDs.LAYER_FIELD}\n layer={{ key: obj.field, ...obj }}\n field=\"position\"\n handleMove={handleMove}\n canDrag\n >\n {content}\n </DnD>\n );\n };\n\n const fieldsListCurrent = currentSortedFields\n .map((field) => block(field, false))\n .filter(Boolean);\n const fieldsListNew = newSortedFields\n .map((field) => block(field, true))\n .filter(Boolean);\n\n return (\n <div className=\"d-flex flex-column h-100\">\n <Row className=\"mx-0 p-3\">\n <Col md={6}>\n <LHText title=\"Current Arrangement\">The existing arrangement</LHText>\n </Col>\n <Col md={6} className=\"text-primary\">\n <LHText title=\"New Arrangement\">\n Drag and drop ({FIcons.faArrowsUpDownLeftRight}) to reorder fields\n </LHText>\n </Col>\n </Row>\n <div\n ref={scrollableContainerRef}\n className=\"flex-grow-1\"\n style={{\n overflowY: 'auto',\n overflowX: 'hidden',\n minHeight: 0,\n position: 'relative', // Important for DnD context\n }}\n >\n <Row className=\"mx-0 h-100\">\n <Col\n md={6}\n style={{\n position: 'relative',\n }}\n >\n {fieldsListCurrent}\n </Col>\n <Col\n md={6}\n style={{\n position: 'relative',\n }}\n >\n {fieldsListNew}\n </Col>\n </Row>\n </div>\n <DragLayer scrollableContainerRef={scrollableContainerRef} />\n </div>\n );\n});\n\nFieldOrderContent.displayName = 'FieldOrderContent';\n\nexport default FieldOrderContent;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Dropdown } from 'react-bootstrap';\nimport cloneDeep from 'lodash/cloneDeep';\nimport FieldOrderContent from '@components/designer/template/FieldOrderContent';\nimport ArrangeModal from '@components/actions/ArrangeModal';\nimport Constants from '@components/tools/Constants';\nimport FIcons from '@components/icons/FIcons';\nimport Response from '@utils/response';\nimport { notifySuccess } from '@utils/template/designer-message';\n\nconst FieldOrderBtn = ({\n layer = {},\n generic = {},\n genericType,\n fnSave = () => {},\n}) => {\n const [show, setShow] = useState(false);\n const arrangeContentRef = useRef(null);\n\n if ((layer.fields || []).length === 0) return null;\n\n const handleSave = (updatedFields) => {\n // Save changes\n const updates = cloneDeep(generic);\n updates.properties_template.layers[layer.key].fields = updatedFields;\n updates.changed = true;\n fnSave(new Response(notifySuccess(), updates));\n };\n\n return (\n <>\n <Dropdown.Item\n eventKey={`arrange_fields.${layer.label}`}\n onClick={() => setShow(true)}\n >\n {FIcons.faBars}&nbsp;&nbsp;Arrange Fields Order\n </Dropdown.Item>\n <ArrangeModal\n genericType={genericType}\n showProps={{ show, setShow }}\n onSave={handleSave}\n >\n <FieldOrderContent ref={arrangeContentRef} layer={layer} />\n </ArrangeModal>\n </>\n );\n};\n\nFieldOrderBtn.propTypes = {\n layer: PropTypes.object,\n generic: PropTypes.object,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n fnSave: PropTypes.func,\n};\nFieldOrderBtn.defaultProps = {\n layer: {},\n generic: {},\n fnSave: () => {},\n};\nexport default FieldOrderBtn;\n","/* eslint-disable react/require-default-props */\n/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { ButtonGroup, Card, Dropdown } from 'react-bootstrap';\nimport { FieldTypes } from 'generic-ui-core';\nimport Prop from '@components/designer/template/Prop';\nimport LayerHeader from '@components/designer/template/LayerHeader';\nimport GroupLayerOrderBtn from '@components/designer/template/GroupLayerOrderBtn';\nimport LayerAttrEditBtn from '@components/designer/LayerAttrEditBtn';\nimport LayerAttrNewBtn from '@components/designer/LayerAttrNewBtn';\nimport LayerGridBtn from '@components/designer/template/LayerGridBtn';\nimport Constants from '@components/tools/Constants';\nimport ButtonTooltip from '@components/fields/ButtonTooltip';\nimport GroupButton from '@components/actions/GroupButton';\nimport PropFields from '@components/designer/template/PropFields';\nimport NewFieldBtn from '@components/designer/template/NewFieldBtn';\nimport LayerSaveBtn from '@components/designer/template/LayerSaveBtn';\nimport ButtonDelField from '@components/fields/ButtonDelField';\nimport ButtonEllipse from '@components/fields/ButtonEllipse';\nimport VocabularyListBtn from '@components/designer/template/VocabularyListBtn';\nimport FieldOrderBtn from '@components/designer/template/FieldOrderBtn';\nimport fbc from '@components/tools/ui-styles';\nimport LayerManager from '@utils/desMgr';\nimport {\n handleAddDummy,\n handleCreateLayer,\n handleAddStandardLayer,\n handleUpdateLayer,\n} from '@utils/template/action-handler';\nimport {\n handleCreateField,\n handleLayerPositionChange,\n} from '@utils/template/field-handler';\nimport {\n getGroupInfoByLayer,\n organizeLayersForDisplay,\n} from '@utils/template/group-handler';\n\nfunction PropLayers(props) {\n const { data, genericType, fnUpdate, vocabularies } = props;\n const [expandLayers, setExpandLayers] = useState({});\n\n const toggleExpandLayer = (layerKey) => {\n setExpandLayers((prev) => ({\n ...prev,\n [layerKey]: !prev[layerKey],\n }));\n };\n\n const onFieldAdd = (_e) => {\n const { newFieldKey, layer } = _e;\n const result = handleCreateField(newFieldKey, data, layer);\n fnUpdate(result);\n };\n\n const onDummyAdd = (_e) => {\n const { layerKey: _layerKey, field: _field } = _e;\n const result = handleAddDummy(data, _layerKey, _field);\n fnUpdate(result);\n };\n\n const onLayerCreate = (_layer) => {\n const result = handleCreateLayer(_layer, data);\n fnUpdate(result);\n };\n\n const onAddStandardLayer = async (_layer) => {\n const result = handleAddStandardLayer(_layer, data, genericType);\n fnUpdate(result);\n };\n\n const onDeleteStandardLayer = async (_layer) => {\n const result = await LayerManager.deleteStandardLayer(_layer.id);\n };\n\n const onLayerUpdate = (_layerKey, _updates) => {\n const result = handleUpdateLayer(data, _layerKey, _updates);\n fnUpdate(result);\n };\n\n const onLayerDelete = (result) => {\n fnUpdate(result);\n };\n\n const onLayerCondition = (result) => {\n fnUpdate(result);\n };\n\n const onPositionMove = (_item) => {\n const { target, source } = _item;\n const result = handleLayerPositionChange(\n data,\n { key: target.field },\n { key: source.fid.field },\n );\n fnUpdate(result);\n };\n\n const layers = [];\n\n // Use organizeLayersForDisplay to get layers in the same order as others\n const displayItems = organizeLayersForDisplay(\n data.properties_template.layers || {},\n data.metadata?.groups || [],\n );\n\n // Flatten displayItems to get layers in correct order\n const sortedLayers = [];\n displayItems.forEach((item) => {\n if (item.type === 'group') {\n // Add all layers from the group in the order they appear in the group\n item.layers.forEach((layerItem) => {\n sortedLayers.push(layerItem.data);\n });\n } else {\n // Add ungrouped layer\n sortedLayers.push(item.data);\n }\n });\n\n (sortedLayers || []).forEach((layer) => {\n const layerKey = `${layer.key}`;\n\n // Get group information if layer belongs to a group\n const groupInfo = getGroupInfoByLayer(data.metadata, layerKey);\n\n const fields = (\n <PropFields\n generic={data}\n genericType={genericType}\n fnUpdate={fnUpdate}\n layer={layer}\n vocabularies={vocabularies}\n parentExpand={expandLayers[layerKey]}\n />\n );\n\n const isAttrOnWF = [\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n ].includes(genericType);\n\n const layerHeader = <LayerHeader layer={layer} groupInfo={groupInfo} />;\n\n const layerHeaderButtons = (\n <div className=\"d-flex\">\n <div className=\"me-2\">\n <NewFieldBtn fnUpdate={onFieldAdd} layer={layer}>\n <VocabularyListBtn\n element={data}\n fnUpdate={fnUpdate}\n layer={layer}\n />\n </NewFieldBtn>\n </div>\n <ButtonGroup className=\"me-2\">\n <LayerSaveBtn layer={layer} data={data} />\n </ButtonGroup>\n <ButtonGroup>\n <ButtonEllipse condSet={false}>\n <LayerAttrEditBtn\n fnUpdate={onLayerUpdate}\n isAttrOnWF={isAttrOnWF}\n layer={layer}\n as=\"menu\"\n />\n <ButtonTooltip\n idf=\"fld_dum_add\"\n fnClick={onDummyAdd}\n element={{ layerKey, field: null }}\n fa=\"faSquare\"\n place=\"top\"\n as=\"menu\"\n />\n <FieldOrderBtn\n layer={layer}\n generic={data}\n genericType={genericType}\n fnSave={fnUpdate}\n />\n <Dropdown.Divider />\n <ButtonDelField\n delType={FieldTypes.DEL_LAYER}\n delKey={layerKey}\n generic={data}\n fnConfirm={onLayerDelete}\n as=\"menu\"\n />\n </ButtonEllipse>\n </ButtonGroup>\n </div>\n );\n\n const customHeader = (\n <>\n {layerHeader}\n {layerHeaderButtons}\n </>\n );\n\n const newNode = (\n <Prop\n key={`_prop_content_${layerKey}`}\n layerKey={layerKey}\n toggleExpand={toggleExpandLayer}\n propHeader={customHeader}\n >\n {fields}\n </Prop>\n );\n layers.push(newNode);\n });\n\n return (\n <div>\n <Card className=\"border-0\">\n <Card.Header as=\"h5\" className={`${fbc} lu-bg-white px-1`}>\n Layers\n <span className=\"button-right d-flex gap-1\">\n <GroupLayerOrderBtn\n generic={data}\n genericType={genericType}\n fnSave={fnUpdate}\n />\n <GroupButton\n generic={data}\n genericType={genericType}\n fnSave={fnUpdate}\n />\n <LayerAttrNewBtn fnCreate={onLayerCreate} />\n <LayerGridBtn\n fnCreate={onAddStandardLayer}\n fnDelete={onDeleteStandardLayer}\n />\n </span>\n </Card.Header>\n <Card.Body className=\"p-0\">\n <div>{layers}</div>\n </Card.Body>\n </Card>\n </div>\n );\n}\n\nPropLayers.propTypes = {\n data: PropTypes.object.isRequired,\n fnUpdate: PropTypes.func.isRequired,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n vocabularies: PropTypes.array,\n};\n\nPropLayers.defaultProps = { vocabularies: [] };\n\nexport default PropLayers;\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, InputGroup, Modal, Button } from 'react-bootstrap';\n\nexport default class SelectAttrNewModal extends Component {\n constructor(props) {\n super(props);\n this.s_selectKey = React.createRef();\n }\n\n handleCreate() {\n const { fnCreate } = this.props;\n fnCreate(this.s_selectKey.current.value.trim());\n }\n\n render() {\n const { showModal, fnClose } = this.props;\n return (\n <Modal\n centered\n backdrop=\"static\"\n show={showModal}\n onHide={() => fnClose()}\n size=\"lg\"\n >\n <Modal.Header closeButton>\n <Modal.Title>New Select List</Modal.Title>\n </Modal.Header>\n <Modal.Body style={{ overflow: 'auto' }}>\n <div className=\"col-md-12\">\n <Form className=\"row mb-3 input-form\">\n <Form.Group controlId=\"formControlSelectKey\">\n <InputGroup>\n <InputGroup.Text>Name</InputGroup.Text>\n <Form.Control type=\"text\" ref={this.s_selectKey} />\n </InputGroup>\n <div className=\"help\">\n Select List name is unique in the template.\n <br />\n Select List name must start with a lowercase letter, and then\n have one or more lowercase letters or underscores in the\n middle, and end with a lowercase letter.\n <br />\n Select List name should not contain special characters like $,\n !, %, etc.\n </div>\n </Form.Group>\n </Form>\n <Form.Group>\n <Button variant=\"primary\" onClick={() => this.handleCreate()}>\n Add new select list to template workarea\n </Button>\n &nbsp;\n <Button variant=\"secondary\" onClick={() => fnClose()}>\n Cancel\n </Button>\n </Form.Group>\n </div>\n </Modal.Body>\n </Modal>\n );\n }\n}\n\nSelectAttrNewModal.propTypes = {\n showModal: PropTypes.bool.isRequired,\n fnClose: PropTypes.func.isRequired,\n fnCreate: PropTypes.func.isRequired,\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, InputGroup, Row } from 'react-bootstrap';\nimport cloneDeep from 'lodash/cloneDeep';\nimport ButtonTooltip from '@components/fields/ButtonTooltip';\nimport FIcons from '@components/icons/FIcons';\n\nconst stopPropagation = (event) => {\n event.stopPropagation();\n};\nexport default class SelectOption extends Component {\n constructor(props) {\n super(props);\n this.inputNewOption = React.createRef();\n }\n\n handleCreate() {\n const { generic, root, fnAddOption } = this.props;\n const input = this.inputNewOption.current.value.trim();\n const newOption = { key: input, label: input };\n\n // prepare generic with new options of root\n const deep = cloneDeep(generic);\n const selectObj =\n deep?.properties_template?.select_options[root]?.options || [];\n selectObj.push(newOption);\n\n fnAddOption(root, input, selectObj); // return [root, new option, new options]\n }\n\n render() {\n const { root, children } = this.props;\n return (\n <Form.Group\n size=\"sm\"\n as={Row}\n style={{ marginBottom: 'unset', display: 'inline-table' }}\n >\n <Form.Label>\n {FIcons.faList}&nbsp;{root}\n </Form.Label>\n <InputGroup className=\"ug-input-group\">\n <Form.Control\n type=\"text\"\n name=\"input_newOption\"\n ref={this.inputNewOption}\n placeholder=\"Input new option\"\n size=\"sm\"\n onClick={stopPropagation}\n onFocus={stopPropagation}\n />\n <ButtonTooltip\n idf=\"sel_opt_add\"\n fnClick={() => this.handleCreate()}\n fa=\"faPlus\"\n />\n {children}\n </InputGroup>\n </Form.Group>\n );\n }\n}\n\nSelectOption.propTypes = {\n generic: PropTypes.object.isRequired,\n root: PropTypes.string.isRequired,\n fnAddOption: PropTypes.func.isRequired,\n children: PropTypes.node.isRequired,\n};\n","import React from 'react';\nimport ButtonDelField from '@components/fields/ButtonDelField';\n\nconst renderDeleteButton = (\n generic,\n delType,\n delKey,\n delRoot,\n fnConfirm,\n as = 'button',\n) => (\n <ButtonDelField\n generic={generic}\n delType={delType}\n delKey={delKey}\n delRoot={delRoot}\n fnConfirm={fnConfirm}\n as={as}\n />\n);\n\nexport default renderDeleteButton;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Card, Col, Form, InputGroup } from 'react-bootstrap';\nimport renderDeleteButton from '@components/admin/renderDeleteButton';\n\nfunction OptionComponent({ name, label, generic, root, fnInputChg, fnDel }) {\n const [inputValue, setInputValue] = useState(label);\n\n React.useEffect(() => {\n setInputValue(label);\n }, [label]);\n\n const handleChange = (event) => {\n const newValue = event.target.value;\n setInputValue(newValue);\n fnInputChg(event, name, root);\n };\n\n return (\n <Form.Group size=\"sm\" controlId={`_cgu_frmSelectOption_${name}`}>\n <InputGroup>\n <InputGroup.Text>{name}</InputGroup.Text>\n <Form.Control\n type=\"text\"\n name=\"lf_label\"\n value={inputValue}\n onChange={handleChange}\n />\n {renderDeleteButton(generic, 'Option', name, root, fnDel)}\n </InputGroup>\n </Form.Group>\n );\n}\n\nconst Option = React.memo(OptionComponent);\nOption.displayName = 'SelectOption';\n\nfunction SelectOptionList(props) {\n const { generic, root, fnInputChg, fnDel } = props;\n\n const options =\n generic?.properties_template?.select_options[root]?.options || [];\n if (options.length < 1) return null;\n\n return (\n <Col md={12}>\n <Card.Body>\n {options.map((o) => (\n <div key={`${o.key}_${root}`} className=\"mb-2\">\n <Option\n name={o.key}\n label={o.label}\n generic={generic}\n root={root}\n fnInputChg={fnInputChg}\n fnDel={fnDel}\n />\n </div>\n ))}\n </Card.Body>\n </Col>\n );\n}\n\nSelectOptionList.propTypes = {\n generic: PropTypes.object.isRequired,\n root: PropTypes.string.isRequired,\n fnInputChg: PropTypes.func.isRequired,\n fnDel: PropTypes.func.isRequired,\n};\n\nexport default SelectOptionList;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Col, Row } from 'react-bootstrap';\nimport ButtonTooltip from '@components/fields/ButtonTooltip';\nimport SelectOption from '@components/admin/SelectOption';\nimport SelectOptionList from '@components/admin/SelectOptionList';\nimport renderDeleteButton from '@components/admin/renderDeleteButton';\n\nfunction Selection(props) {\n const { generic, root, fnAdd, fnChange, fnInputChg } = props;\n const [expand, setExpand] = useState(false);\n\n const handleAddOption = (_root, _input, _select) => {\n setExpand(true);\n fnAdd(_root, _input, _select);\n };\n\n return (\n <Row>\n <Col md={12}>\n <SelectOption\n generic={generic}\n root={root}\n fnAddOption={handleAddOption}\n fnChange={fnChange}\n >\n {renderDeleteButton(generic, 'Select', root, '', fnChange)}\n <ButtonTooltip\n idf={`dtl_${expand ? 'collapse' : 'expand'}`}\n fnClick={() => setExpand(!expand)}\n fa={`faCaret${expand ? 'Up' : 'Down'}`}\n />\n </SelectOption>\n </Col>\n {expand && (\n <SelectOptionList\n generic={generic}\n root={root}\n fnInputChg={fnInputChg}\n fnDel={fnChange}\n />\n )}\n </Row>\n );\n}\n\nSelection.propTypes = {\n generic: PropTypes.object.isRequired,\n root: PropTypes.string.isRequired,\n fnAdd: PropTypes.func.isRequired,\n fnInputChg: PropTypes.func.isRequired,\n fnChange: PropTypes.func.isRequired,\n};\n\nexport default Selection;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Card } from 'react-bootstrap';\nimport SelectAttrNewModal from '@components/admin/SelectAttrNewModal';\nimport Selection from '@components/admin/Selection';\nimport ButtonTooltip from '@components/fields/ButtonTooltip';\nimport {\n handleAddOption,\n handleAddSelect,\n handleOptionInput,\n} from '@utils/template/action-handler';\nimport fbc from '@components/tools/ui-styles';\n\nfunction SelectOptionLayer(props) {\n const { generic, fnChange } = props;\n\n const [showAddSelect, setShowAddSelect] = useState(false);\n\n const onAdd = (_key, _optionKey, _selectOptions) => {\n const result = handleAddOption(generic, _key, _optionKey, _selectOptions);\n fnChange(result);\n setShowAddSelect(false);\n };\n\n const onCreate = (selectName) => {\n const sos = { ...generic.properties_template?.select_options };\n sos[selectName] = {};\n const result = handleAddSelect(generic, selectName, sos);\n fnChange(result);\n setShowAddSelect(false);\n };\n\n const onOptionInputChange = (event, optionKey, selectKey) => {\n const input = event.target.value;\n const result = handleOptionInput(generic, optionKey, selectKey, input);\n fnChange(result);\n };\n\n return (\n <div>\n <Card className=\"border-0\">\n <Card.Header as=\"h5\" className={`${fbc} lu-bg-white`}>\n Selection Lists\n <ButtonTooltip\n idf=\"sel_add\"\n fnClick={() => setShowAddSelect(true)}\n fa=\"faPlus\"\n size=\"sm\"\n bs=\"primary\"\n txt=\"Add new selection list\"\n btnCls=\"ms-auto fw-medium\"\n />\n </Card.Header>\n <Card.Body>\n {Object.keys(generic.properties_template?.select_options || {}).map(\n (root) => {\n return (\n <Selection\n key={root}\n generic={generic}\n root={root}\n fnAdd={onAdd}\n fnChange={fnChange}\n fnInputChg={onOptionInputChange}\n />\n );\n },\n )}\n </Card.Body>\n </Card>\n <SelectAttrNewModal\n showModal={showAddSelect}\n fnClose={() => setShowAddSelect(false)}\n fnCreate={onCreate}\n />\n </div>\n );\n}\n\nSelectOptionLayer.propTypes = {\n generic: PropTypes.object.isRequired,\n fnChange: PropTypes.func.isRequired,\n};\n\nexport default SelectOptionLayer;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal } from 'react-bootstrap';\n\nconst WorkflowModal = ({ showProps, children }) => {\n const { show, setShow } = showProps;\n if (!show) return null;\n\n return (\n <Modal\n centered\n show={show}\n onHide={() => setShow(false)}\n fullscreen\n backdrop=\"static\"\n >\n <Modal.Header closeButton>\n <Modal.Title>Design Workflow</Modal.Title>\n </Modal.Header>\n <Modal.Body>{children}</Modal.Body>\n </Modal>\n );\n};\n\nWorkflowModal.propTypes = {\n showProps: PropTypes.shape({\n show: PropTypes.bool.isRequired,\n setShow: PropTypes.func.isRequired,\n }).isRequired,\n children: PropTypes.node.isRequired,\n};\n\nexport default WorkflowModal;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport { useDrag } from 'react-dnd';\nimport PropTypes from 'prop-types';\n\nconst DnDNode = props => {\n const { node } = props;\n\n const [{ isDragging }, drag] = useDrag(() => {\n return {\n type: 'lim-dnd-type',\n collect: monitor => {\n return { isDragging: monitor.isDragging() };\n },\n item: node,\n };\n });\n\n return (\n <div key={node.key} className=\"react-flow__node-default\" ref={drag}>\n <div className=\"gu_flow_dnd_sidebar\">\n <b>{node.label}</b>\n </div>\n <div>({node.key})</div>\n </div>\n );\n};\n\nDnDNode.propTypes = { node: PropTypes.object.isRequired };\n\nconst DnDNodes = props => {\n const { nodes } = props;\n\n return (\n <>\n {nodes.map(node => (\n <DnDNode key={node.key} id={node.id} node={node} />\n ))}\n </>\n );\n};\n\nDnDNodes.propTypes = { nodes: PropTypes.array.isRequired };\n\nexport default DnDNodes;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport sortBy from 'lodash/sortBy';\nimport DnDNodes from '@components/flow/DnDNodes';\n\nconst DnDSidebar = (props) => {\n const { element } = props;\n\n if (element?.properties_template == null) {\n return null;\n }\n const sortedLayers = sortBy(\n element.properties_template.layers || [],\n l => l.position\n );\n const inputs = sortedLayers.filter((e) => e.wf);\n\n return (\n <aside>\n <div className=\"description\">\n You can drag the nodes listed below to the left pane to design your\n flow.\n </div>\n <div className=\"description\">\n To remove the node from the pane, click on the node and press\n &apos;Del&apos; button.\n </div>\n <DnDNodes nodes={inputs} />\n </aside>\n );\n};\n\nDnDSidebar.propTypes = { element: PropTypes.object.isRequired };\n\nexport default DnDSidebar;\n","import React, { memo } from 'react';\nimport { Handle, Position } from 'reactflow';\n\nconst targetHandleStyle = { background: 'red' };\nconst sourceHandleStyle = { ...targetHandleStyle, top: 10 };\nconst onConnect = params => console.log('handle onConnect', params);\n\nconst LayerNode = ({ data }) => (\n <>\n <Handle\n type=\"target\"\n position={Position.Top}\n style={targetHandleStyle}\n onConnect={onConnect}\n />\n <div>\n <div className=\"gu_flow_dnd_sidebar\">\n <b>{data.layer.label}</b>\n </div>\n <div>({data.layer.key})</div>\n </div>\n <Handle\n type=\"source\"\n position={Position.Bottom}\n id=\"a\"\n style={sourceHandleStyle}\n />\n </>\n);\n\nexport default memo(LayerNode);\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport FIcons from '@components/icons/FIcons';\n\nconst NodeIcon = ({ nodeClass, nodeIcon }) => (\n <div className={nodeClass}>{nodeIcon}</div>\n);\n\nNodeIcon.propTypes = {\n nodeClass: PropTypes.string.isRequired,\n nodeIcon: PropTypes.object.isRequired,\n};\n\nconst createLayerNodeIcon = (\n layer,\n checked,\n nodeClass = 'chk',\n extCSS = ''\n) => {\n const nodeIcon =\n nodeClass === 'chk' ? FIcons.faCircleCheck : FIcons.faCirclePlus;\n const klz = `border_line ${extCSS}`;\n return (\n <div className=\"gu_flow_default_element\">\n {checked ? <NodeIcon nodeClass={nodeClass} nodeIcon={nodeIcon} /> : null}\n <div className={klz}>\n <b>{layer.label}</b>\n </div>\n <div>({layer.key})</div>\n </div>\n );\n};\n\nexport default createLayerNodeIcon;\n","import sortBy from 'lodash/sortBy';\nimport Constants from '@components/tools/Constants';\nimport createLayerNodeIcon from '@components/flow/NodeIcon';\nimport { flowInputNode, flowOutputNode } from '@utils/flow/initial-flow';\n\n/**\n * arrangedFlowElements, to add extra nodes and edges\n *\n * @param {Array} nodes nodes of the pre-defined workflow\n * @param {Object} properties properties of the template\n */\nconst arrangedFlowElements = (nodes, properties) => {\n const defaultNodes = nodes.filter(\n n => n.type === Constants.NODE_TYPES.DEFAULT\n );\n if (defaultNodes.length < 1) return { nodes: [], edges: [] };\n\n const returnNodes = [];\n const returnEdges = [];\n const { layers: layersProperties } = properties;\n const sortedLayers =\n sortBy(layersProperties, ['position', 'wf_position']) || [];\n\n // loop through the sortedLayers, for each layer, check if the layer's is associated with a node.data.lKey of defaultNodes\n sortedLayers.forEach(layer => {\n let associatedNode = defaultNodes.find(n => layer.key === n.data.lKey);\n let label = createLayerNodeIcon(layer, true);\n if (!associatedNode) {\n associatedNode = defaultNodes.find(n =>\n layer.key.startsWith(`${n.data.lKey}.`)\n );\n if (!associatedNode) return;\n label = createLayerNodeIcon(layer, true, 'add');\n }\n\n const lKey = layer.key;\n const newNode = {\n id: lKey,\n type: Constants.NODE_TYPES.DEFAULT,\n data: { label, layer, lKey },\n width: associatedNode.width,\n height: associatedNode.height,\n };\n returnNodes.push(newNode);\n });\n\n // add flowInputNode into returnNodes and make it as the first record, then, add flowOutputNode into returnNodes and make it as the last record\n returnNodes.unshift(flowInputNode);\n returnNodes.push(flowOutputNode);\n\n // loop through the returnNodes and update each node's position, the position.x is same as the previous node, the position.y is the previous node's position.y + 10 + the previous node's height\n const updatedNodes = [];\n returnNodes.forEach((node, index) => {\n if (index === 0) {\n updatedNodes.push(node);\n } else {\n const baseNode = updatedNodes[index - 1];\n const newPosition = {\n x: baseNode.position.x,\n y: baseNode.position.y + (index * 10 + 10 + node.height),\n };\n updatedNodes.push({ ...node, position: newPosition });\n }\n });\n\n // loop through the updatedNodes, for each node, create an edge between the node and the previous node and add it to returnEdges\n updatedNodes.forEach((node, index) => {\n if (index === 0) return;\n const baseNode = updatedNodes[index - 1];\n returnEdges.push({\n id: `${baseNode.id}-${node.id}`,\n source: baseNode.id,\n target: node.id,\n animated: true,\n });\n });\n\n return { nodes: updatedNodes, edges: returnEdges };\n};\n\nexport default arrangedFlowElements;\n","import cloneDeep from 'lodash/cloneDeep';\nimport findKey from 'lodash/findKey';\nimport { v4 as uuid } from 'uuid';\nimport Constants from '@components/tools/Constants';\nimport createLayerNodeIcon from '@components/flow/NodeIcon';\nimport splitFlowElements from '@utils/flow/split-flow-elements';\n// import extendFlowElements from '@utils/flow/ext-flow-elements';\nimport arrangedFlowElements from '@utils/flow/arranged-flow-elements';\n\nexport const removeReactionLayers = (_layers) => {\n const layers = cloneDeep(_layers || {});\n return Object.keys(layers).reduce((acc, key) => {\n if (!key.startsWith(Constants.SYS_REACTION)) {\n acc[key] = layers[key];\n }\n return acc;\n }, {});\n};\n\nexport const removeGroupedLayers = (_layers, metadata) => {\n const layers = cloneDeep(_layers || {});\n const groups = metadata?.groups || [];\n const groupedLayerKeys = groups.flatMap((group) => group.layers || []);\n\n return Object.keys(layers).reduce((acc, key) => {\n if (!groupedLayerKeys.includes(key)) {\n acc[key] = layers[key];\n }\n return acc;\n }, {});\n};\n\nconst updateDataProperties = (els, layers, properties) =>\n els.map(d => {\n if (d.type === Constants.NODE_TYPES.DEFAULT && d.data) {\n const { lKey } = d.data;\n const layer = layers[lKey] || {};\n const matchingLayer = findKey(\n properties.layers || {},\n o => o.wf && (o.key === lKey || o.key.startsWith(`${lKey}.`))\n );\n\n const label = matchingLayer\n ? createLayerNodeIcon(layer, true)\n : createLayerNodeIcon(layer, false);\n\n d.data = { label, layer, lKey: layer.key };\n }\n if (\n d.type === Constants.NODE_TYPES.INPUT ||\n d.type === Constants.NODE_TYPES.OUTPUT\n ) {\n d.deletable = false;\n }\n return d;\n });\n\nexport const buildDefaultNode = (props) => {\n const { id, layer, position } = props;\n return {\n id: id || uuid(),\n type: Constants.NODE_TYPES.DEFAULT,\n data: {\n lKey: layer.key,\n layer,\n label: createLayerNodeIcon(layer, false),\n },\n position: position || { x: 0, y: 0 },\n };\n};\n\nexport const buildNode = (props) => {\n const { id, layer, position } = props;\n return {\n id: id || uuid(),\n type: Constants.NODE_TYPES.DEFAULT,\n data: {\n lKey: layer.key,\n layer: { label: layer.label, key: layer.key },\n label: createLayerNodeIcon(layer, false),\n },\n position: position || { x: 0, y: 0 },\n };\n};\n\nexport const decorateNodes = (_nodes, _layers = []) => {\n const isValidLayer = (_layer) => _layers.includes(_layer.key);\n return _nodes.map((_node) =>\n _node.data.layer\n ? {\n ..._node,\n data: {\n label: createLayerNodeIcon(\n _node.data.layer,\n false,\n '',\n isValidLayer(_node.data.layer) ? '' : 'invalid'\n ),\n layer: _node.data.layer,\n lKey: _node.data.layer.key,\n },\n style: {\n border: isValidLayer(_node.data.layer)\n ? '1px solid #000'\n : '1px solid lightcoral',\n color: isValidLayer(_node.data.layer) ? '#000' : 'lightcoral',\n },\n }\n : _node\n );\n};\n\n/**\n * buildFlowElements\n *\n * @param {Object} props\n * @return {Object} Returns a flow object.\n */\nexport const buildFlowElements = (props) => {\n const { properties, propertiesRelease, flowType = 'default' } = props;\n const { flow, flowObject, layers } = propertiesRelease;\n const { nodes, edges, viewport } = flowObject\n ? cloneDeep(flowObject)\n : splitFlowElements(flow);\n\n if (flowType !== 'default') {\n // if properties is an empty object, use propertiesRelease\n const flowProperties =\n Object.keys(properties).length === 0 ? propertiesRelease : properties;\n const arrangedElements = arrangedFlowElements(nodes, flowProperties);\n return {\n nodes: arrangedElements.nodes,\n edges: arrangedElements.edges,\n viewport: {\n x: 0,\n y: 0,\n zoom: 1,\n },\n };\n }\n\n // NOTE: disable extendFlowElements part for now\n // const extendElements = extendFlowElements(nodes, layers, properties);\n const updatedNodes = updateDataProperties(nodes, layers, properties);\n // updatedNodes.push(...extendElements.nodes);\n // edges.push(...extendElements.edges);\n return { nodes: updatedNodes, edges, viewport };\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState, useRef, useCallback, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactFlow, {\n ReactFlowProvider,\n addEdge,\n useNodesState,\n useEdgesState,\n Controls,\n ConnectionMode,\n MarkerType,\n} from 'reactflow';\nimport { Button } from 'react-bootstrap';\nimport { useDrop } from 'react-dnd';\nimport FIcons from '@components/icons/FIcons';\nimport DnDSidebar from '@components/flow/DnDSidebar';\nimport LayerNode from '@components/flow/LayerNode';\nimport {\n buildDefaultNode,\n buildFlowElements,\n} from '@utils/flow/build-flow-elements';\n\nconst nodeTypes = { selectorNode: LayerNode };\n\nconst DnDFlow = props => {\n const { element, fnSave } = props;\n const propertiesTemplate = element.properties_template;\n const reactFlowWrapper = useRef(null);\n const [elements, setElements] = useState(() =>\n buildFlowElements({\n properties: propertiesTemplate,\n propertiesRelease: propertiesTemplate,\n })\n );\n const [reactFlowInstance, setReactFlowInstance] = useState(null);\n const [nodes, setNodes, onNodesChange] = useNodesState(elements.nodes);\n const [edges, setEdges, onEdgesChange] = useEdgesState(elements.edges);\n\n const onConnect = useCallback(\n params =>\n setEdges(eds =>\n addEdge(\n {\n ...params,\n animated: true,\n markerEnd: { type: MarkerType.ArrowClosed },\n label: 'next',\n // labelStyle: { fill: 'red', fontWeight: 700 },\n },\n eds\n )\n ),\n []\n );\n\n const onSave = useCallback(() => {\n if (reactFlowInstance) {\n const flowObject = reactFlowInstance.toObject();\n // flowObject.elements = storeFlow(flowObject);\n fnSave({ flowObject });\n }\n }, [reactFlowInstance]);\n\n const addNode = (node, monitor) => {\n if (reactFlowInstance) {\n const clientOffset = monitor.getClientOffset();\n const reactFlowBounds = reactFlowWrapper.current.getBoundingClientRect();\n let position = {\n x: clientOffset.x - reactFlowBounds.left,\n y: clientOffset.y - reactFlowBounds.top,\n };\n position = reactFlowInstance.project(position);\n const newNode = buildDefaultNode({\n layer: node,\n position,\n // position: {\n // // x: clientOffset.x - reactFlowBounds.left + 30,\n // // y: clientOffset.y - reactFlowBounds.top - 230,\n // },\n });\n setNodes(nds => nds.concat(newNode));\n }\n };\n\n const [{ isOver, canDrop }, drop] = useDrop({\n accept: 'lim-dnd-type',\n drop: (item, monitor) => {\n addNode(item, monitor);\n // if (reactFlowInstance) {\n // const clientOffset = monitor.getClientOffset();\n // const reactFlowBounds =\n // reactFlowWrapper.current.getBoundingClientRect();\n // const sidebarBounds = reactSidebar.current.getBoundingClientRect();\n // let position = {\n // x: clientOffset.x - reactFlowBounds.left, // - sidebarBounds.left,\n // y: clientOffset.y - reactFlowBounds.top, // - sidebarBounds.top,\n // };\n // position = reactFlowInstance.project(position);\n // const newNode = buildDefaultNode({\n // layer: item,\n // position,\n // // position: {\n // // x: -32, // 0, // clientOffset.x, // - reactFlowBounds.left - sidebarBounds.left,\n // // y: -79, // 0, // clientOffset.y, // - reactFlowBounds.top - sidebarBounds.top,\n // // // x: clientOffset.x - reactFlowBounds.left + 30,\n // // // y: clientOffset.y - reactFlowBounds.top - 230,\n // // },\n // });\n // setNodes(nds => nds.concat(newNode));\n // }\n },\n collect: monitor => {\n return { isOver: monitor.isOver(), canDrop: monitor.canDrop() };\n },\n });\n\n useEffect(() => {\n setElements(\n buildFlowElements({\n properties: propertiesTemplate,\n propertiesRelease: propertiesTemplate,\n })\n );\n }, [propertiesTemplate]);\n\n return (\n <>\n <div ref={drop} className=\"dndflow\">\n <ReactFlowProvider>\n <div className=\"reactflow-wrapper\" ref={reactFlowWrapper}>\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onConnect={onConnect}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n onInit={setReactFlowInstance}\n connectionMode={ConnectionMode.Loose}\n nodeTypes={nodeTypes}\n deleteKeyCode={['Delete', 'Backspace']}\n fitView\n >\n <div className=\"save__controls\">\n <Button size=\"sm\" onClick={onSave}>\n {FIcons.faFloppyDisk}&nbsp;Save to draft\n </Button>\n </div>\n <Controls />\n </ReactFlow>\n </div>\n <DnDSidebar element={element} />\n </ReactFlowProvider>\n </div>\n </>\n );\n};\n\nDnDFlow.propTypes = {\n element: PropTypes.object.isRequired,\n fnSave: PropTypes.func.isRequired,\n};\n\nexport default DnDFlow;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport Constants from '@components/tools/Constants';\nimport { LWf } from '@components/shared/LCom';\nimport LTooltip from '@components/shared/LTooltip';\nimport WorkflowModal from '@components/elements/WorkflowModal';\nimport DnDFlow from '@components/flow/DnDFlow';\nimport Response from '@utils/response';\nimport { notifySuccess } from '@utils/template/designer-message';\n\nconst WorkflowDesignBtn = (props) => {\n const { element, fnSave, genericType, btnCls } = props;\n const [show, setShow] = useState(false);\n\n if (\n ![\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n ].includes(genericType)\n ) {\n return null;\n }\n\n const handleSaveFlow = (_flowObject) => {\n const flow = _flowObject.flowObject;\n flow['nodes'] = flow['nodes'].map((_node) => {\n if (!_node.data) return _node;\n if (_node.type === 'default') delete _node.data.label;\n return _node;\n });\n\n element.properties_template.flowObject = flow;\n delete element.properties_template.flow;\n fnSave(new Response(notifySuccess(), element));\n setShow(false);\n };\n\n return (\n <>\n <LTooltip idf=\"design_flow\">\n <Button\n onClick={() => setShow(true)}\n variant=\"light\"\n size=\"sm\"\n className={btnCls}\n >\n <LWf wf /> Workflow\n </Button>\n </LTooltip>\n <WorkflowModal genericType={genericType} showProps={{ show, setShow }}>\n <DnDFlow element={element} fnSave={handleSaveFlow} />\n </WorkflowModal>\n </>\n );\n};\n\nWorkflowDesignBtn.propTypes = {\n element: PropTypes.object.isRequired,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n fnSave: PropTypes.func.isRequired,\n btnCls: PropTypes.string,\n};\n\nWorkflowDesignBtn.defaultProps = {\n btnCls: '',\n};\n\nexport default WorkflowDesignBtn;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Dropzone from 'react-dropzone';\nimport { Modal } from 'react-bootstrap';\nimport cloneDeep from 'lodash/cloneDeep';\nimport Constants from '@components/tools/Constants';\nimport { handleTemplateUploading } from '@utils/template/action-handler';\n\nconst UploadTemplateModal = (props) => {\n const { data, fnUpload, genericType, showProps } = props;\n const { show, setShow } = showProps;\n const handleReaderLoaded = (e) => {\n const verify = handleTemplateUploading(e, genericType);\n if (verify.notify.isSuccess) {\n const newData = cloneDeep(data);\n\n if (Object.prototype.hasOwnProperty.call(verify.element, 'metadata')) {\n newData.metadata = cloneDeep(verify.element.metadata);\n } else {\n delete newData.metadata;\n }\n\n const properties = cloneDeep(verify.element);\n delete properties.metadata;\n newData.properties_template = properties;\n\n verify.element = newData;\n }\n fnUpload(verify);\n setShow(false);\n };\n\n const handleUploadTemplate = (file) => {\n const reader = new FileReader();\n reader.onload = handleReaderLoaded;\n reader.readAsText(file[0]);\n };\n\n return (\n <Modal centered show={show} onHide={() => setShow(false)}>\n <Modal.Header closeButton>\n <Modal.Title>Upload template to Work Area</Modal.Title>\n </Modal.Header>\n <Modal.Body style={{ overflow: 'auto' }}>\n <Dropzone\n onDrop={(attach) => handleUploadTemplate(attach)}\n className=\"lu-drop-zone\"\n style={{ height: 50 }}\n >\n <div style={{ paddingTop: 12 }}>Drop File, or Click to Select.</div>\n </Dropzone>\n </Modal.Body>\n </Modal>\n );\n};\n\nUploadTemplateModal.propTypes = {\n data: PropTypes.object.isRequired,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n fnUpload: PropTypes.func.isRequired,\n showProps: PropTypes.shape({\n show: PropTypes.bool.isRequired,\n setShow: PropTypes.func.isRequired,\n }).isRequired,\n};\n\nexport default UploadTemplateModal;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport Constants from '@components/tools/Constants';\nimport UploadTemplateModal from '@components/elements/UploadTemplateModal';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\n\nconst UploadTemplateBtn = (props) => {\n const { data, fnUpload, genericType, btnCls } = props;\n const [show, setShow] = useState(false);\n\n return (\n <>\n <LTooltip idf=\"imp_temp_to_area\">\n <Button\n onClick={() => setShow(true)}\n variant=\"outline-secondary\"\n size=\"sm\"\n className={btnCls}\n >\n {FIcons.faArrowRightToBracket}&nbsp;Import template into Work Area\n </Button>\n </LTooltip>\n {show && (\n <UploadTemplateModal\n data={data}\n fnUpload={fnUpload}\n genericType={genericType}\n showProps={{ show, setShow }}\n />\n )}\n </>\n );\n};\n\nUploadTemplateBtn.propTypes = {\n data: PropTypes.object.isRequired,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n fnUpload: PropTypes.func.isRequired,\n btnCls: PropTypes.string,\n};\n\nUploadTemplateBtn.defaultProps = {\n btnCls: '',\n};\n\nexport default UploadTemplateBtn;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState, useRef, useCallback, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport FIcons from '@components/icons/FIcons';\n\nconst ResizeIndicator = ({ position, fontSize = '10px' }) => {\n const getPositionStyles = () => {\n switch (position) {\n case 'top':\n return {\n top: '20px',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n };\n case 'center':\n return {\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n };\n case 'bottom':\n return {\n bottom: '20px',\n left: '50%',\n transform: 'translate(-50%, 50%)',\n };\n default:\n return {};\n }\n };\n\n return (\n <div\n style={{\n position: 'absolute',\n color: '#6c757d',\n backgroundColor: 'rgba(108, 117, 125, 0.1)',\n opacity: 0.8,\n fontSize,\n height: '24px',\n width: '6px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '2px',\n ...getPositionStyles(),\n }}\n >\n {FIcons.faGripLinesVertical}\n </div>\n );\n};\n\nResizeIndicator.propTypes = {\n position: PropTypes.oneOf(['top', 'center', 'bottom']).isRequired,\n fontSize: PropTypes.string,\n};\n\nconst ResizablePanel = ({\n leftPanel,\n rightPanel,\n defaultLeftWidth = 66.67,\n minLeftWidth = 50,\n minRightWidth = 20,\n className = '',\n style = {},\n minHeightForMultipleIndicators = 200,\n}) => {\n const [leftWidth, setLeftWidth] = useState(defaultLeftWidth);\n const [isDragging, setIsDragging] = useState(false);\n const [showMultipleIndicators, setShowMultipleIndicators] = useState(false);\n const containerRef = useRef(null);\n const resizeHandleRef = useRef(null);\n\n const handleMouseDown = useCallback((e) => {\n e.preventDefault();\n setIsDragging(true);\n }, []);\n\n const handleMouseMove = useCallback(\n (e) => {\n if (!isDragging || !containerRef.current) return;\n\n const containerRect = containerRef.current.getBoundingClientRect();\n const containerWidth = containerRect.width;\n const mouseX = e.clientX - containerRect.left;\n\n let newLeftWidth = (mouseX / containerWidth) * 100;\n\n newLeftWidth = Math.max(minLeftWidth, newLeftWidth);\n newLeftWidth = Math.min(100 - minRightWidth, newLeftWidth);\n\n setLeftWidth(newLeftWidth);\n },\n [isDragging, minLeftWidth, minRightWidth]\n );\n\n const handleMouseUp = useCallback(() => {\n setIsDragging(false);\n }, []);\n\n const checkIndicatorVisibility = useCallback(() => {\n if (resizeHandleRef.current) {\n const handleHeight = resizeHandleRef.current.offsetHeight;\n setShowMultipleIndicators(handleHeight >= minHeightForMultipleIndicators);\n }\n }, [minHeightForMultipleIndicators]);\n\n useEffect(() => {\n checkIndicatorVisibility();\n\n const resizeObserver = new ResizeObserver(() => {\n checkIndicatorVisibility();\n });\n\n if (resizeHandleRef.current) {\n resizeObserver.observe(resizeHandleRef.current);\n }\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [checkIndicatorVisibility]);\n\n useEffect(() => {\n if (isDragging) {\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n };\n }\n }, [isDragging, handleMouseMove, handleMouseUp]);\n\n const rightWidth = 100 - leftWidth;\n\n return (\n <div\n ref={containerRef}\n className={`d-flex ${className}`}\n style={{\n height: '100%',\n overflow: 'hidden',\n ...style,\n }}\n >\n {/* Left Panel */}\n <div\n style={{\n width: `${leftWidth}%`,\n overflow: 'hidden',\n paddingRight: '4px',\n }}\n >\n {leftPanel}\n </div>\n {/* Resize Handle */}\n <div\n ref={resizeHandleRef}\n onMouseDown={handleMouseDown}\n style={{\n width: '8px',\n backgroundColor: isDragging ? '#6c757d' : '#dee2e6',\n cursor: 'col-resize',\n borderLeft: '1px solid #dee2e6',\n borderRight: '1px solid #dee2e6',\n position: 'relative',\n flexShrink: 0,\n transition: isDragging ? 'none' : 'background-color 0.2s ease',\n }}\n onMouseEnter={(e) => {\n if (!isDragging) {\n e.target.style.backgroundColor = '#adb5bd';\n }\n }}\n onMouseLeave={(e) => {\n if (!isDragging) {\n e.target.style.backgroundColor = '#dee2e6';\n }\n }}\n >\n {showMultipleIndicators && <ResizeIndicator position=\"top\" fontSize=\"10px\" />}\n <ResizeIndicator position=\"center\" fontSize=\"12px\" />\n {showMultipleIndicators && <ResizeIndicator position=\"bottom\" fontSize=\"10px\" />}\n </div>\n {/* Right Panel */}\n <div\n style={{\n width: `${rightWidth}%`,\n overflow: 'hidden',\n paddingLeft: '4px',\n }}\n >\n {rightPanel}\n </div>\n </div>\n );\n};\n\nResizablePanel.propTypes = {\n leftPanel: PropTypes.node.isRequired,\n rightPanel: PropTypes.node.isRequired,\n defaultLeftWidth: PropTypes.number,\n minLeftWidth: PropTypes.number,\n minRightWidth: PropTypes.number,\n className: PropTypes.string,\n style: PropTypes.object,\n minHeightForMultipleIndicators: PropTypes.number,\n};\n\nexport default ResizablePanel;\n","/* eslint-disable react/require-default-props */\n/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Card } from 'react-bootstrap';\nimport PropLayers from '@components/designer/template/PropLayers';\nimport SelectOptionLayer from '@components/admin/SelectOptionLayer';\nimport ButtonTooltip from '@components/fields/ButtonTooltip';\nimport WorkflowDesignBtn from '@components/designer/WorkflowDesignBtn';\nimport UploadTemplateBtn from '@components/designer/UploadTemplateBtn';\nimport ResizablePanel from '@components/shared/ResizablePanel';\nimport Constants from '@components/tools/Constants';\nimport fbc from '@components/tools/ui-styles';\n\nconst headerText = (genericType, data) => {\n const { name, label, desc } = data;\n let txt = '';\n switch (genericType) {\n case Constants.GENERIC_TYPES.ELEMENT:\n txt = `${genericType} Template: ${label} (${name})`;\n break;\n case Constants.GENERIC_TYPES.SEGMENT:\n txt = `${genericType} Template: ${desc} (${label})`;\n break;\n case Constants.GENERIC_TYPES.DATASET:\n txt = `${genericType} Template: ${label}`;\n break;\n default:\n break;\n }\n return txt;\n};\n\nconst TemplateProps = (props) => {\n // const { data, vocabularies, fnUpdate, fnSubmit, genericType, innerAction } = props;\n const { data, vocabularies, fnSubmit, genericType, innerAction } = props;\n\n return (\n <div>\n <Card>\n <Card.Header\n className={`fs-5 fw-bold ${fbc}`}\n >\n {headerText(genericType, data)}\n <span className=\"button-right d-flex gap-1\">\n <UploadTemplateBtn\n data={data}\n fnUpload={innerAction}\n genericType={genericType}\n btnCls=\"fw-medium\"\n />\n <WorkflowDesignBtn\n element={data}\n fnSave={innerAction}\n genericType={genericType}\n btnCls=\"fw-medium\"\n />\n <ButtonTooltip\n txt=\"Save and Release (Major)\"\n idf=\"tpl_save_rel_major\"\n fnClick={fnSubmit}\n element={{ data, release: 'major' }}\n fa=\"faFloppyDisk\"\n place=\"top\"\n bs=\"success\"\n size=\"sm\"\n btnCls=\"fw-medium\"\n />\n <ButtonTooltip\n txt=\"Save and Release (Minor)\"\n idf=\"tpl_save_rel_minor\"\n fnClick={fnSubmit}\n element={{ data, release: 'minor' }}\n fa=\"faFloppyDisk\"\n place=\"top\"\n bs=\"success\"\n size=\"sm\"\n btnCls=\"fw-medium\"\n />\n <ButtonTooltip\n txt=\"Save as draft\"\n idf=\"tpl_save_draft\"\n fnClick={fnSubmit}\n element={{ data, release: 'draft' }}\n fa=\"faFloppyDisk\"\n place=\"top\"\n bs=\"primary\"\n size=\"sm\"\n btnCls=\"fw-medium\"\n />\n </span>\n </Card.Header>\n <Card.Body>\n <div style={{ maxWidth: '2000px', margin: 'auto', height: '100%' }}>\n <ResizablePanel\n defaultLeftWidth={66.67}\n minLeftWidth={50}\n minRightWidth={20}\n leftPanel={\n <PropLayers\n data={data}\n vocabularies={vocabularies}\n fnDerive={innerAction}\n fnUpdate={innerAction}\n genericType={genericType}\n />\n }\n rightPanel={\n <div>\n <SelectOptionLayer generic={data} fnChange={innerAction} />\n </div>\n }\n />\n </div>\n </Card.Body>\n </Card>\n </div>\n );\n};\n\nTemplateProps.propTypes = {\n data: PropTypes.object,\n vocabularies: PropTypes.array,\n fnSubmit: PropTypes.func.isRequired,\n // fnUpdate: PropTypes.func.isRequired, // update element with new element\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n innerAction: PropTypes.func.isRequired,\n};\n\nTemplateProps.defaultProps = { vocabularies: [] };\n\nexport default TemplateProps;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Form from 'react-bootstrap/Form';\nimport { fnToggle } from '@ui/common/fnToggle';\nimport { FN_ID } from '@ui/common/fnConstants';\n\nconst RevisionSelector = ({\n isSelected,\n onChange,\n className = \"me-2\"\n}) => {\n return (\n <Form.Check\n type=\"checkbox\"\n checked={isSelected}\n onChange={onChange}\n className={className}\n />\n );\n};\n\nRevisionSelector.fnId = FN_ID.FN_DIFF;\n\nRevisionSelector.propTypes = {\n isSelected: PropTypes.bool.isRequired,\n onChange: PropTypes.func.isRequired,\n className: PropTypes.string,\n};\n\nRevisionSelector.defaultProps = {\n className: \"me-2\",\n};\n\nexport default fnToggle(RevisionSelector);\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport ButtonGroup from 'react-bootstrap/ButtonGroup';\nimport ButtonConfirm from '@components/fields/ButtonConfirm';\nimport ButtonTooltip from '@components/fields/ButtonTooltip';\nimport RevisionSelector from '@components/designer/preview/RevisionSelector';\nimport { buildString } from '@utils/pureUtils';\n\nconst formatDate = (date) => {\n return moment(date, 'DD.MM.YYYY, HH:mm').format('YYYY-MM-DD HH:mm');\n};\n\nconst VersionBlock = ({\n download,\n idxSelect,\n rev,\n src,\n fnDelete,\n fnRetrieve,\n fnView,\n isSelected,\n onSelectionChange,\n}) => {\n const {\n id,\n uuid,\n released_at: releasedAt,\n created_at: createdAt,\n properties,\n properties_release: propertiesRelease,\n version,\n } = rev;\n\n const { canDL, fnDownload } = download;\n const [idxStr, compareUUID] = idxSelect.split(':');\n const parsedIdx = parseInt(idxStr, 10);\n const idx = !isNaN(parsedIdx) ? parsedIdx : 0;\n const selectedClass =\n buildString([uuid, id]) === compareUUID\n ? 'border-info border-3'\n : 'border-1';\n\n let at = '';\n let verBase = '';\n let verID = '';\n if (src === 'properties_release') {\n at = releasedAt ? `Released at: ${formatDate(releasedAt)} (UTC)` : '(In Progress)';\n verBase = version && (releasedAt ? `v${version}` : '');\n verID = `ID: ${uuid || ''}`;\n }\n if (src === 'properties') {\n at = `Saved at: ${formatDate(createdAt)} (UTC)`;\n verBase = `v${properties.version}`;\n verID = `Template ID: ${properties.klass_uuid || ''}`;\n }\n\n const del =\n releasedAt && idx > 1 ? (\n <ButtonConfirm\n msg=\"Delete this version permanently?\"\n fnClick={fnDelete}\n fnParams={{ id }}\n />\n ) : null;\n const ret = releasedAt ? (\n <ButtonConfirm\n msg=\"Retrieve this version?\"\n fnClick={fnRetrieve}\n fnParams={{ id }}\n fa=\"faReply\"\n />\n ) : null;\n const dl = canDL ? (\n <ButtonTooltip\n idf=\"ver_download\"\n fnClick={fnDownload}\n element={{ id }}\n fa=\"faDownload\"\n place=\"top\"\n />\n ) : null;\n\n const handleSelectionChange = (e) => {\n if (onSelectionChange) {\n onSelectionChange(rev, e.target.checked, { verID, verBase });\n }\n };\n\n return (\n <div className={`d-block p-2 m-1 fs-5 border ${selectedClass}`} key={uuid}>\n <div className=\"d-flex flex-nowrap gap-2 align-items-center\">\n <RevisionSelector\n isSelected={isSelected}\n onChange={handleSelectionChange}\n />\n <div className=\"flex-grow-1\">{verID}</div>\n <div className=\"fs-6 fw-bold text-primary\">\n {verBase}\n </div>\n <div className=\"fs-6\"> #{idx + 1}</div>\n </div>\n <div className=\"d-flex flex-nowrap gap-2\">\n <div className=\"w-100\">{at}</div>\n <ButtonGroup size=\"sm\" className=\"gap-1\">\n {del}\n {dl}\n {ret}\n <ButtonTooltip\n idf=\"ver_view\"\n fnClick={fnView}\n element={{ uuid, id }}\n fa=\"faEye\"\n place=\"top\"\n />\n </ButtonGroup>\n </div>\n </div>\n );\n};\n\nVersionBlock.propTypes = {\n download: PropTypes.shape({\n canDL: PropTypes.bool,\n fnDownload: PropTypes.func,\n }).isRequired,\n idxSelect: PropTypes.string.isRequired,\n rev: PropTypes.object.isRequired,\n src: PropTypes.oneOf(['properties_release', 'properties']),\n fnDelete: PropTypes.func,\n fnRetrieve: PropTypes.func,\n fnView: PropTypes.func.isRequired,\n isSelected: PropTypes.bool,\n onSelectionChange: PropTypes.func,\n};\n\nVersionBlock.defaultProps = {\n fnRetrieve: () => {},\n fnDelete: () => {},\n src: 'properties_release',\n isSelected: false,\n onSelectionChange: null,\n};\nexport default VersionBlock;\n","import React, { useState } from \"react\";\nimport { create } from \"jsondiffpatch\";\nimport { diffChars } from \"diff\";\n\n// Initialize jsondiffpatch with array handling\nconst jsondiffpatch = create({\n objectHash: (obj) => obj?.key || JSON.stringify(obj), // Match array items by \"key\"\n arrays: { detectMove: true },\n});\n\nconst colorMap = {\n added: \"#d4edda\",\n removed: \"#f8d7da\",\n modified: \"#fff3cd\",\n};\n\n// Inline string diff\nconst InlineDiff = ({ oldStr = \"\", newStr = \"\" }) => {\n const changes = diffChars(oldStr, newStr);\n return (\n <span>\n {changes.map((part, index) => {\n const style = {\n backgroundColor: part.added\n ? colorMap.added\n : part.removed\n ? colorMap.removed\n : \"transparent\",\n };\n return (\n <span key={index} style={style}>\n {part.value}\n </span>\n );\n })}\n </span>\n );\n};\n\n// Single row renderer\nconst DiffRow = ({\n keyName,\n oldValue,\n newValue,\n delta,\n level = 0,\n showOnlyChanges,\n}) => {\n const [collapsed, setCollapsed] = useState(false);\n const toggleCollapse = () => setCollapsed(!collapsed);\n\n const isComplex = (val) => val && typeof val === \"object\";\n\n const changed = oldValue !== newValue || !!delta;\n if (showOnlyChanges && !changed) return null;\n\n // Handle primitive values\n if (!isComplex(oldValue) && !isComplex(newValue)) {\n return (\n <tr>\n <td style={{ paddingLeft: level * 16, padding: \"8px\" }}>{keyName}</td>\n <td\n style={{\n backgroundColor: oldValue !== newValue ? colorMap.removed : \"transparent\",\n padding: \"8px\",\n wordBreak: \"break-word\"\n }}\n >\n {typeof oldValue === \"string\" && oldValue !== newValue ? (\n <InlineDiff oldStr={oldValue} newStr=\"\" />\n ) : (\n JSON.stringify(oldValue)\n )}\n </td>\n <td\n style={{\n backgroundColor: oldValue !== newValue ? colorMap.added : \"transparent\",\n padding: \"8px\",\n wordBreak: \"break-word\"\n }}\n >\n {typeof newValue === \"string\" && oldValue !== newValue ? (\n <InlineDiff oldStr=\"\" newStr={newValue} />\n ) : (\n JSON.stringify(newValue)\n )}\n </td>\n </tr>\n );\n }\n\n // Handle arrays or objects\n const oldKeys = Array.isArray(oldValue)\n ? oldValue.map((_, i) => i)\n : Object.keys(oldValue || {});\n const newKeys = Array.isArray(newValue)\n ? newValue.map((_, i) => i)\n : Object.keys(newValue || {});\n const allKeys = Array.from(new Set([...oldKeys, ...newKeys]));\n\n const hasNestedChanges = allKeys.some(\n (key) => oldValue?.[key] !== newValue?.[key]\n );\n if (showOnlyChanges && !hasNestedChanges) return null;\n\n return (\n <>\n <tr>\n <td\n style={{\n paddingLeft: level * 16,\n fontWeight: \"bold\",\n cursor: \"pointer\",\n padding: \"8px\"\n }}\n onClick={toggleCollapse}\n >\n {collapsed ? \"▶\" : \"▼\"} {keyName}\n </td>\n <td colSpan={2} style={{ padding: \"8px\" }}></td>\n </tr>\n {!collapsed &&\n allKeys.map((key) => (\n <DiffRow\n key={key}\n keyName={key}\n oldValue={oldValue?.[key]}\n newValue={newValue?.[key]}\n delta={delta?.[key]}\n level={level + 1}\n showOnlyChanges={showOnlyChanges}\n />\n ))}\n </>\n );\n};\n\nconst JsonDiffCompact = ({ oldJson, newJson, showOnlyChanges = false }) => {\n const delta = jsondiffpatch.diff(oldJson, newJson);\n\n return (\n <div style={{\n overflow: \"auto\",\n fontFamily: \"monospace\",\n maxHeight: \"100%\",\n border: \"1px solid #dee2e6\",\n borderRadius: \"0.375rem\"\n }}>\n <table style={{ borderCollapse: \"collapse\", width: \"100%\" }}>\n <thead style={{ position: \"sticky\", top: 0, backgroundColor: \"#f8f9fa\" }}>\n <tr>\n <th style={{ textAlign: \"left\", borderBottom: \"1px solid #ccc\", padding: \"8px\" }}>Key</th>\n <th style={{ textAlign: \"left\", borderBottom: \"1px solid #ccc\", padding: \"8px\" }}>Old</th>\n <th style={{ textAlign: \"left\", borderBottom: \"1px solid #ccc\", padding: \"8px\" }}>New</th>\n </tr>\n </thead>\n <tbody>\n {Object.keys({ ...oldJson, ...newJson }).map((key) => (\n <DiffRow\n key={key}\n keyName={key}\n oldValue={oldJson[key]}\n newValue={newJson[key]}\n delta={delta?.[key]}\n showOnlyChanges={showOnlyChanges}\n />\n ))}\n </tbody>\n </table>\n </div>\n );\n};\n\nexport default JsonDiffCompact;\n","// Color scheme for different types of changes\nexport const DIFF_COLORS = {\n added: '#d4edda',\n removed: '#f8d7da',\n modified: '#fff3cd',\n};\n\n// First-level removal during JSON preprocessing\nexport const PROPS_TO_REMOVE = [\n 'pkg',\n 'uuid',\n 'klass',\n 'identifier',\n '_versionDisplay',\n 'id',\n];\n\n// Layer-specific removal\nexport const LAYER_PROPS_TO_REMOVE = ['key', 'wf_position', 'wf_uuid', 'timeRecord'];\n\n// Global renaming map\nexport const PROPS_TO_RENAME = {\n wf: 'workflow',\n cols: 'columns_per_row',\n color: 'header_color',\n label: 'display_name',\n cond_fields: 'restriction_setting',\n select_options: 'selection_list',\n option_layers: 'selection',\n description: 'hover_information',\n hasOwnRow: 'has_its_own_row',\n col_name: 'column_heading',\n sub_fields: 'content',\n style: 'text_style',\n // value_system: 'default_value'\n};\n\n// Field-specific removal based on field type\nexport const FIELD_PROPS_TO_REMOVE = {\n text: ['position'],\n textarea: ['position', 'place_holder'],\n table: ['position', 'default', 'required', 'text_sub_fields', 'value_system'],\n checkbox: ['position'],\n upload: ['position'],\n datetime: ['position'],\n select: ['position'],\n number: ['position'],\n dummy: ['field'],\n};\n\n// Base required for field\nconst BASE_REQUIRED_PROPS = ['label', 'type', 'description', 'ontology'];\n\n// Type-specific required based on field type\nconst TYPE_SPECIFIC_REQUIRED_PROPS = {\n text: ['field', 'cols', 'hasOwnRow', 'placeholder', 'readonly', 'required'],\n textarea: ['field', 'cols', 'hasOwnRow'],\n checkbox: ['field', 'cols', 'hasOwnRow'],\n upload: ['field', 'cols', 'hasOwnRow'],\n datetime: ['field', 'cols', 'hasOwnRow'],\n 'datetime-range': ['field', 'cols', 'hasOwnRow'],\n 'drag-molecule': ['field', 'cols', 'hasOwnRow'],\n 'drag-sample': ['field', 'cols', 'hasOwnRow'],\n 'drag-element': ['field', 'cols', 'hasOwnRow'],\n 'formula-field': [\n 'field',\n 'cols',\n 'hasOwnRow',\n 'formula',\n 'decimal',\n 'canAdjust',\n ],\n 'input-group': ['field', 'cols', 'hasOwnRow', 'sub_fields'],\n integer: ['field', 'cols', 'hasOwnRow', 'placeholder', 'required'],\n select: ['field', 'cols', 'hasOwnRow', 'option_layers'],\n 'select-multi': ['field', 'cols', 'hasOwnRow', 'option_layers'],\n 'system-defined': ['field', 'cols', 'hasOwnRow', 'option_layers'],\n table: ['field', 'cols', 'sub_fields'],\n dummy: ['cols'],\n // sub_fields\n number: ['value'],\n};\n\n// Function to generate final required properties for each field type\nconst generateFinalRequiredProps = (base, typeSpecific) => {\n const result = {};\n Object.entries(typeSpecific).forEach(([type, specificProps]) => {\n const merged = ['field', ...base, ...specificProps]\n .filter((item, index, self) => self.indexOf(item) === index); // remove duplicates\n result[type] = merged;\n });\n return result;\n};\n\n// Pre-computed final required properties for each field type\nexport const REQUIRED_PROPS = generateFinalRequiredProps(BASE_REQUIRED_PROPS, TYPE_SPECIFIC_REQUIRED_PROPS);\n\n// Transformations for display\nexport const TYPE_TRANSFORMS = {\n 'select-multi': 'select (multiple)',\n 'input-group': 'input group',\n 'text-formula': 'text formula',\n 'datetime-range': 'datetime range',\n 'drag-molecule': 'drag molecule',\n 'drag-sample': 'drag sample',\n 'drag-element': 'drag element',\n 'formula-field': 'formula field',\n 'system-defined': 'system defined',\n};\n\nexport const HEADER_COLOR_TRANSFORMS = {\n 'primary': 'Ocean Blue',\n 'info': 'Sky Blue',\n 'success': 'Fresh Green',\n 'default': 'Grey',\n 'danger': 'Crimson',\n 'warning': 'Amber',\n};\n\nexport const HEADER_TEXT_STYLE_TRANSFORMS = {\n 'panel_generic_heading': 'bold',\n 'panel_generic_heading_bu': 'bold + underline',\n 'panel_generic_heading_bui': 'bold + underline + italic',\n};\n\n// Grid configuration\nexport const GRID_CONFIG = {\n defaultColDef: {\n sortable: false,\n filter: false,\n },\n animateRows: true,\n height: 500,\n indentSize: 20, // pixels per level for tree indentation\n};\n","/**\n * JSON preprocessing utilities for diff comparison\n * Handles property removal, renaming, and structure transformation\n */\n\nimport sortBy from 'lodash/sortBy';\nimport {\n PROPS_TO_REMOVE,\n PROPS_TO_RENAME,\n LAYER_PROPS_TO_REMOVE,\n REQUIRED_PROPS\n} from '@ui/diff/diffConstants.js';\n\n/**\n * Keep only required properties for each field type\n * @param {Object} field - Field object to filter\n * @returns {Object} Filtered field object\n */\nexport const keepRequiredFieldProperties = (field) => {\n if (!field || typeof field !== 'object' || !field.type) {\n return field;\n }\n\n // Get pre-computed required properties for this field type\n const requiredProps = REQUIRED_PROPS[field.type] || [];\n\n // Create new object with only required properties\n const filteredField = {};\n requiredProps.forEach(prop => {\n if (prop in field) {\n // Special handling for ontology object - only keep 'iri' property\n if (prop === 'ontology' && field[prop] && typeof field[prop] === 'object') {\n filteredField[prop] = { iri: field[prop].iri };\n } else {\n filteredField[prop] = field[prop];\n }\n }\n });\n\n return filteredField;\n};\n\n/**\n * Process table type fields with sub_fields preprocessing\n * @param {Object} field - Table field to process\n * @param {Array} layerOrder - Layer ordering for consistency\n * @returns {Object} Processed field\n */\nexport const processTableField = (field, layerOrder = null) => {\n if (!field || typeof field !== 'object') {\n return field;\n }\n\n const fieldCopy = { ...field };\n\n // Process sub_fields array if it exists\n if (fieldCopy.sub_fields && Array.isArray(fieldCopy.sub_fields)) {\n fieldCopy.sub_fields = fieldCopy.sub_fields.map(subField => {\n if (subField && typeof subField === 'object') {\n // Apply property filtering to sub-field\n let processedSubField = keepRequiredFieldProperties(subField);\n\n return preprocessJson(processedSubField, layerOrder);\n }\n return preprocessJson(subField, layerOrder);\n });\n }\n\n return preprocessJson(fieldCopy, layerOrder);\n};\n\n/**\n * Main JSON preprocessing function\n * Removes specified properties and renames others throughout the structure\n * @param {Object|Array} json - JSON to preprocess\n * @param {Array} layerOrder - Optional layer ordering for consistency\n * @returns {Object|Array} Preprocessed JSON\n */\nexport const preprocessJson = (json, layerOrder = null) => {\n if (!json || typeof json !== 'object') return json;\n\n // Handle arrays\n if (Array.isArray(json)) {\n return json.map((item) => preprocessJson(item, layerOrder));\n }\n\n // Sort layers by position if layers exist, or use provided layer order\n if (json.layers && typeof json.layers === 'object' && !Array.isArray(json.layers)) {\n if (layerOrder && layerOrder.length > 0) {\n // Use provided layer order (from newJson)\n const orderedLayers = {};\n\n // First, add layers in the provided order\n layerOrder.forEach(layerKey => {\n if (json.layers[layerKey]) {\n orderedLayers[layerKey] = json.layers[layerKey];\n }\n });\n\n // Then add any remaining layers that weren't in the provided order\n Object.keys(json.layers).forEach(layerKey => {\n if (!(layerKey in orderedLayers)) {\n orderedLayers[layerKey] = json.layers[layerKey];\n }\n });\n\n json = { ...json, layers: orderedLayers };\n } else {\n // Default: sort by position\n const sortedEntries = sortBy(Object.entries(json.layers), '[1].position');\n json = { ...json, layers: Object.fromEntries(sortedEntries) };\n }\n }\n\n const cleaned = {};\n\n for (const [key, value] of Object.entries(json)) {\n // Skip properties that should be removed (only at first level)\n if (PROPS_TO_REMOVE.includes(key)) {\n continue;\n }\n\n // Determine the new key name (rename if needed)\n const newKey = PROPS_TO_RENAME[key] || key;\n\n if (key === 'select_options' && value && typeof value === 'object' && !Array.isArray(value)) {\n // Transform select_options structure\n cleaned[newKey] = transformSelectOptions(value, layerOrder);\n } else if (key === 'layers' && value && typeof value === 'object' && !Array.isArray(value)) {\n // Transform layers structure\n cleaned[newKey] = transformLayers(value, layerOrder);\n } else {\n // Recursively process nested objects/arrays and rename properties\n cleaned[newKey] = preprocessJson(value, layerOrder);\n }\n }\n\n return cleaned;\n};\n\n/**\n * Transform select_options structure\n * @param {Object} selectOptions - Select options to transform\n * @param {Array} layerOrder - Layer ordering\n * @returns {Object} Transformed select options\n */\nconst transformSelectOptions = (selectOptions, layerOrder) => {\n const transformedSelectOptions = {};\n\n for (const [optionKey, optionValue] of Object.entries(selectOptions)) {\n if (optionValue && typeof optionValue === 'object' && optionValue.options && Array.isArray(optionValue.options)) {\n // Extract the options array directly and recursively process it\n transformedSelectOptions[optionKey] = preprocessJson(optionValue.options, layerOrder);\n } else {\n // Keep as-is but recursively process if it's an object/array\n transformedSelectOptions[optionKey] = preprocessJson(optionValue, layerOrder);\n }\n }\n\n return transformedSelectOptions;\n};\n\n/**\n * Transform layers structure\n * @param {Object} layers - Layers to transform\n * @param {Array} layerOrder - Layer ordering\n * @returns {Object} Transformed layers\n */\nconst transformLayers = (layers, layerOrder) => {\n const transformedLayers = {};\n\n for (const [layerKey, layerValue] of Object.entries(layers)) {\n if (layerValue && typeof layerValue === 'object' && !Array.isArray(layerValue)) {\n // Remove specified properties from layer object and recursively process\n const layerCopy = { ...layerValue };\n LAYER_PROPS_TO_REMOVE.forEach((prop) => {\n if (prop in layerCopy) delete layerCopy[prop];\n });\n\n // Process fields array if it exists\n if (layerCopy.fields && Array.isArray(layerCopy.fields)) {\n layerCopy.fields = layerCopy.fields.map(field => {\n if (field && typeof field === 'object' && field.type) {\n // Step 1: Keep only required properties based on field type\n let processedField = keepRequiredFieldProperties(field);\n\n // Step 2: Apply table-specific processing if type is 'table'\n if (['input-group', 'table'].includes(field.type)) {\n return processTableField(processedField, layerOrder);\n }\n\n return preprocessJson(processedField, layerOrder);\n }\n return preprocessJson(field, layerOrder);\n });\n }\n\n transformedLayers[layerKey] = preprocessJson(layerCopy, layerOrder);\n } else {\n // Keep as-is but recursively process if it's an object/array\n transformedLayers[layerKey] = preprocessJson(layerValue, layerOrder);\n }\n }\n\n return transformedLayers;\n};\n","/**\n * Utilities for transforming values to user-friendly display formats\n */\n\nimport { TYPE_TRANSFORMS, HEADER_COLOR_TRANSFORMS, HEADER_TEXT_STYLE_TRANSFORMS } from '@ui/diff/diffConstants.js';\n\n/**\n * Transformations for display\n * @param {any} value - The value to transform\n * @param {string} key - The property key\n * @param {string} fullKey - The full property path\n * @returns {any} Transformed value for display\n */\nexport const transformValueForDisplay = (value, key, fullKey) => {\n if (key === 'type' && typeof value === 'string') {\n return TYPE_TRANSFORMS[value] || value;\n }\n\n if (key === 'header_color' && typeof value === 'string') {\n return HEADER_COLOR_TRANSFORMS[value] || value;\n }\n\n if (key === 'text_style' && typeof value === 'string') {\n return HEADER_TEXT_STYLE_TRANSFORMS[value] || value;\n }\n\n if (key === 'workflow' && typeof value === 'boolean') {\n return value ? 'enabled' : 'disabled';\n }\n\n if (['has_its_own_row', 'required'].includes(key) && typeof value === 'boolean') {\n return value ? 'yes' : 'no';\n }\n\n // Add more transformations here as needed based on renamed properties\n // Note: Use the renamed property names (after propsToRename transformation)\n\n return value;\n};\n\n/**\n * Format values for display in the grid\n * @param {any} val - Value to format\n * @param {boolean} isPrimitive - Whether the value is primitive\n * @param {string} key - Property key\n * @param {string} parentKey - Parent property key\n * @returns {string} Formatted value\n */\nexport const formatValue = (val, isPrimitive, key, parentKey) => {\n if (!isPrimitive) return '';\n if (val === null) return 'null';\n if (val === undefined) return '';\n\n // Special handling for layer objects - don't show the object content as a value\n if (parentKey === 'layers' && typeof val === 'object' && val !== null) {\n return '';\n }\n\n // Apply the same transformations as transformValueForDisplay\n const transformedValue = transformValueForDisplay(val, key, parentKey);\n\n if (typeof transformedValue === 'string') return transformedValue;\n return String(transformedValue);\n};\n","/**\n * Diff calculation utilities using jsondiffpatch\n * Handles flattening nested JSON into grid-compatible rows\n */\n\nimport { create } from 'jsondiffpatch';\nimport { formatValue } from '@ui/diff/valueTransforms.js';\n\n// Initialize jsondiffpatch with array handling\nconst jsondiffpatch = create({\n objectHash: (obj) => obj?.key || JSON.stringify(obj), // Match array items by \"key\"\n arrays: { detectMove: true },\n});\n\n/**\n * Determine if a change should be treated as a container\n * @param {string} change - Change type ('added', 'removed', 'modified')\n * @param {boolean} oldIsPrimitive - Whether old value is primitive\n * @param {boolean} newIsPrimitive - Whether new value is primitive\n * @param {string} parentKey - Parent property key\n * @param {string} key - Current property key\n * @param {any} oldVal - Old value\n * @param {any} newVal - New value\n * @returns {boolean} Whether this should be treated as a container\n */\nconst shouldTreatAsContainer = (change, oldIsPrimitive, newIsPrimitive, parentKey, key, oldVal, newVal) => {\n // Only apply container logic to added/removed non-primitive items\n if ((change !== 'added' && change !== 'removed') || (oldIsPrimitive && newIsPrimitive)) {\n return false;\n }\n\n // Treat all non-primitive values (objects and arrays) as containers\n return !oldIsPrimitive || !newIsPrimitive;\n};\n\n/**\n * Determine change type for a property\n * @param {any} oldVal - Old value\n * @param {any} newVal - New value\n * @param {any} keyDelta - jsondiffpatch delta for this key\n * @param {boolean} oldIsPrimitive - Whether old value is primitive\n * @param {boolean} newIsPrimitive - Whether new value is primitive\n * @param {string} parentKey - Parent property key\n * @param {string} key - Current property key\n * @returns {string} Change type: 'same', 'added', 'removed', or 'modified'\n */\nconst determineChangeType = (oldVal, newVal, keyDelta, oldIsPrimitive, newIsPrimitive, parentKey, key) => {\n let change = 'same';\n\n if (keyDelta !== undefined) {\n // There is a delta, so there are changes\n if (oldVal === undefined) {\n change = 'added';\n } else if (newVal === undefined) {\n change = 'removed';\n } else {\n change = 'modified';\n }\n } else if (oldVal !== newVal) {\n // No delta but primitive values are different (for primitive types)\n if (oldIsPrimitive && newIsPrimitive) {\n // Both are primitives and different\n if (oldVal === undefined) {\n change = 'added';\n } else if (newVal === undefined) {\n change = 'removed';\n } else {\n change = 'modified';\n }\n }\n // For objects/arrays, if no delta exists, they are considered the same\n }\n\n // Special handling for container objects/arrays: treat them as containers, not as added/removed items\n if (shouldTreatAsContainer(change, oldIsPrimitive, newIsPrimitive, parentKey, key, oldVal, newVal)) {\n change = 'modified';\n }\n\n return change;\n};\n\n/**\n * Flatten nested JSON into flat rows with indentation using jsondiffpatch\n * @param {Object} oldObj - Old JSON object\n * @param {Object} newObj - New JSON object\n * @param {string} parentKey - Parent key path\n * @param {number} level - Current nesting level\n * @returns {Array} Flat array of row data for the grid\n */\nexport const buildFlatData = (oldObj, newObj, parentKey = '', level = 0) => {\n const rows = [];\n const delta = jsondiffpatch.diff(oldObj || {}, newObj || {});\n\n // Preserve order: use newObj keys first (which should be ordered), then add any oldObj keys not in newObj\n const newObjKeys = Object.keys(newObj || {});\n const oldObjKeys = Object.keys(oldObj || {});\n const remainingOldKeys = oldObjKeys.filter(key => !newObjKeys.includes(key));\n const allKeys = [...newObjKeys, ...remainingOldKeys];\n\n allKeys.forEach((k) => {\n const oldVal = oldObj?.[k];\n const newVal = newObj?.[k];\n const fullKey = parentKey ? `${parentKey}.${k}` : k;\n const keyDelta = delta?.[k];\n\n // Check if both values are primitive (non-object)\n const oldIsPrimitive = oldVal === null || oldVal === undefined || typeof oldVal !== 'object';\n const newIsPrimitive = newVal === null || newVal === undefined || typeof newVal !== 'object';\n\n // Determine change type\n const change = determineChangeType(oldVal, newVal, keyDelta, oldIsPrimitive, newIsPrimitive, parentKey, k);\n\n // Create row data\n const row = {\n id: fullKey,\n key: k,\n parentKey: parentKey,\n fullKey: fullKey,\n level: level,\n oldValue: formatValue(oldVal, oldIsPrimitive, k, parentKey),\n newValue: formatValue(newVal, newIsPrimitive, k, parentKey),\n change,\n isParent: !oldIsPrimitive || !newIsPrimitive,\n // Store raw values for inline diff\n rawOldValue: oldVal,\n rawNewValue: newVal,\n };\n\n rows.push(row);\n\n // Handle nested object or array - only add children if values are objects\n if (!oldIsPrimitive || !newIsPrimitive) {\n if (Array.isArray(oldVal) || Array.isArray(newVal)) {\n // Handle arrays\n const maxLength = Math.max(\n Array.isArray(oldVal) ? oldVal.length : 0,\n Array.isArray(newVal) ? newVal.length : 0,\n );\n\n for (let i = 0; i < maxLength; i++) {\n const oldItem = Array.isArray(oldVal) ? oldVal[i] : undefined;\n const newItem = Array.isArray(newVal) ? newVal[i] : undefined;\n rows.push(\n ...buildFlatData(\n { [i]: oldItem },\n { [i]: newItem },\n fullKey,\n level + 1,\n ),\n );\n }\n } else {\n // Handle objects\n rows.push(\n ...buildFlatData(oldVal || {}, newVal || {}, fullKey, level + 1),\n );\n }\n }\n });\n\n return rows;\n};\n","import React from 'react';\nimport { diffChars } from 'diff';\nimport FIcons from '@components/icons/FIcons';\nimport { DIFF_COLORS, GRID_CONFIG } from '@ui/diff/diffConstants.js';\nimport { transformValueForDisplay } from '@ui/diff/valueTransforms.js';\n\n/**\n * Inline string diff component for showing character-level differences\n * @param {Object} props - Component props\n * @param {string} props.oldStr - Old string value\n * @param {string} props.newStr - New string value\n * @returns {JSX.Element} Inline diff component\n */\nexport const InlineDiff = ({ oldStr = '', newStr = '' }) => {\n const changes = diffChars(oldStr, newStr);\n return (\n <span>\n {changes.map((part, index) => {\n const style = {\n backgroundColor: part.added\n ? DIFF_COLORS.added\n : part.removed\n ? DIFF_COLORS.removed\n : 'transparent',\n };\n return (\n <span key={index} style={style}>\n {part.value}\n </span>\n );\n })}\n </span>\n );\n};\n\n/**\n * Transform key for display (e.g., convert array indices to 1-based with parent context)\n * @param {string} key - The original key\n * @param {string} parentKey - The parent key for context\n * @returns {string} Transformed key for display\n */\nconst transformKeyForDisplay = (key, parentKey) => {\n // Check if this is a numeric array index (0, 1, 2, etc.)\n if (/^\\d+$/.test(key)) {\n const displayIndex = parseInt(key, 10) + 1;\n return String(displayIndex); // Show just the number\n // Show with parent context if available\n // return parentKey ? `${parentKey}(${displayIndex})` : String(displayIndex);\n }\n return key;\n};\n\n/**\n * Custom cell renderer for indented keys showing tree structure\n * @param {Object} params - AG Grid cell renderer params\n * @returns {JSX.Element} Key cell renderer\n */\nexport const KeyCellRenderer = (params) => {\n const { data } = params;\n const indent = data.level * GRID_CONFIG.indentSize;\n\n // Transform key for display (convert array indices to 1-based)\n const displayKey = transformKeyForDisplay(data.key, data.parentKey);\n\n return (\n <div\n style={{\n paddingLeft: `${indent}px`,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n {data.isParent && (\n <span style={{ marginRight: '5px', color: '#666' }}>\n {FIcons.faMinus}\n </span>\n )}\n <span>{displayKey}</span>\n </div>\n );\n};\n\n/**\n * Custom cell renderer for old values with diff highlighting\n * @param {Object} params - AG Grid cell renderer params\n * @returns {JSX.Element} Old value cell renderer\n */\nexport const OldValueCellRenderer = (params) => {\n const { data } = params;\n const { rawOldValue, rawNewValue, change } = data;\n\n // Show inline diff for primitive value changes (string, number, boolean)\n if (\n change === 'modified' &&\n (typeof rawOldValue === 'string' || typeof rawOldValue === 'number' || typeof rawOldValue === 'boolean') &&\n (typeof rawNewValue === 'string' || typeof rawNewValue === 'number' || typeof rawNewValue === 'boolean')\n ) {\n // Convert to string for diff display with transformations\n const oldStr = String(transformValueForDisplay(rawOldValue, data.key, data.fullKey));\n const newStr = String(transformValueForDisplay(rawNewValue, data.key, data.fullKey));\n return <InlineDiff oldStr={oldStr} newStr=\"\" />;\n }\n\n // Value is already transformed by formatValue in diffCalculator\n const displayValue = params.value;\n\n // Show background color for removed values\n if (change === 'removed') {\n return (\n <span style={{\n backgroundColor: DIFF_COLORS.removed,\n padding: '2px 4px',\n borderRadius: '3px'\n }}>\n {displayValue}\n </span>\n );\n }\n\n return <span>{displayValue}</span>;\n};\n\n/**\n * Custom cell renderer for new values with diff highlighting\n * @param {Object} params - AG Grid cell renderer params\n * @returns {JSX.Element} New value cell renderer\n */\nexport const NewValueCellRenderer = (params) => {\n const { data } = params;\n const { rawOldValue, rawNewValue, change } = data;\n\n // Show inline diff for primitive value changes (string, number, boolean)\n if (\n change === 'modified' &&\n (typeof rawOldValue === 'string' || typeof rawOldValue === 'number' || typeof rawOldValue === 'boolean') &&\n (typeof rawNewValue === 'string' || typeof rawNewValue === 'number' || typeof rawNewValue === 'boolean')\n ) {\n // Convert to string for diff display with transformations\n const oldStr = String(transformValueForDisplay(rawOldValue, data.key, data.fullKey));\n const newStr = String(transformValueForDisplay(rawNewValue, data.key, data.fullKey));\n return <InlineDiff oldStr=\"\" newStr={newStr} />;\n }\n\n // Value is already transformed by formatValue in diffCalculator\n const displayValue = params.value;\n\n // Show background color for added values\n if (change === 'added') {\n return (\n <span style={{\n backgroundColor: DIFF_COLORS.added,\n padding: '2px 4px',\n borderRadius: '3px'\n }}>\n {displayValue}\n </span>\n );\n }\n\n return <span>{displayValue}</span>;\n};\n","import { GRID_CONFIG } from '@ui/diff/diffConstants.js';\nimport { KeyCellRenderer, OldValueCellRenderer, NewValueCellRenderer } from '@ui/diff/CellRenderers.js';\n\n/**\n * Create column definitions for the diff grid\n * @param {string} oldVersionId - ID/label for the old version\n * @param {string} newVersionId - ID/label for the new version\n * @returns {Array} Column definitions for AG Grid\n */\nexport const createColumnDefs = (oldVersionId, newVersionId) => [\n {\n field: 'key',\n headerName: 'Key',\n cellRenderer: KeyCellRenderer,\n flex: 2,\n minWidth: 300,\n pinned: 'left', // Pin the Key column to the left\n },\n {\n field: 'oldValue',\n headerName: `${oldVersionId || 'Old Value'} (baseline)`,\n cellRenderer: OldValueCellRenderer,\n flex: 1,\n minWidth: 200,\n },\n {\n field: 'newValue',\n headerName: newVersionId || 'New Value',\n cellRenderer: NewValueCellRenderer,\n flex: 1,\n minWidth: 200,\n },\n {\n field: 'change',\n headerName: 'Change',\n width: 100,\n minWidth: 100,\n },\n];\n\n/**\n * Get the default column definition for the grid\n * @returns {Object} Default column definition\n */\nexport const getDefaultColDef = () => GRID_CONFIG.defaultColDef;\n\n/**\n * Get row styling function for the grid\n * @returns {Function} Row styling function\n */\nexport const getRowStyle = () => (params) => ({\n backgroundColor: params.data.change === 'same' ? 'transparent' : '#f8f9fa', // Very light gray for changes\n});\n","/**\n * JsonDiffTreeAgGrid Component\n *\n * A comprehensive JSON diff viewer built with AG Grid that displays differences\n * between two JSON objects in a tree structure with visual highlighting.\n *\n * Features:\n * - Side-by-side comparison of JSON objects\n * - Tree-like indentation for nested structures\n * - Color-coded diff highlighting (added, removed, modified)\n * - Character-level inline diffs for string changes\n * - Container handling for layers, fields, and arrays\n * - User-friendly value transformations\n * - Toggle for showing only changes vs. all data\n */\n\nimport React, { useMemo, useState } from 'react';\nimport { AgGridReact } from 'ag-grid-react';\nimport { Form } from 'react-bootstrap';\nimport sortBy from 'lodash/sortBy';\nimport Constants from '@components/tools/Constants';\n\n// Import refactored utilities and components\nimport { preprocessJson } from '@ui/diff/jsonPreprocessor.js';\nimport { buildFlatData } from '@ui/diff/diffCalculator.js';\nimport { createColumnDefs, getDefaultColDef, getRowStyle } from '@ui/diff/gridConfig.js';\nimport { GRID_CONFIG } from '@ui/diff/diffConstants.js';\n\n/**\n * Main JsonDiffTreeAgGrid Component\n *\n * @param {Object} props - Component props\n * @param {Object} props.oldJson - The baseline/old JSON object to compare\n * @param {Object} props.newJson - The new JSON object to compare against\n * @param {string} props.oldVersionId - Display label for the old version column\n * @param {string} props.newVersionId - Display label for the new version column\n * @returns {JSX.Element} The JSON diff tree grid component\n */\nexport default function JsonDiffTreeAgGrid({\n oldJson,\n newJson,\n oldVersionId,\n newVersionId\n}) {\n // State for controlling whether to show only changes or all data\n const [showChangesOnly, setShowChangesOnly] = useState(true);\n\n /**\n * Preprocess both JSON objects for consistent comparison\n * - Establishes layer ordering from newJson for consistency\n * - Applies property filtering and renaming\n * - Handles special structures like layers and fields\n */\n const { preprocessedOldJson, preprocessedNewJson } = useMemo(() => {\n // Extract layer order from newJson to maintain consistent ordering\n let newJsonLayerOrder = null;\n if (newJson?.layers && typeof newJson.layers === 'object' && !Array.isArray(newJson.layers)) {\n const sortedEntries = sortBy(Object.entries(newJson.layers), '[1].position');\n newJsonLayerOrder = sortedEntries.map(([key]) => key);\n }\n\n // Preprocess both JSONs with the same layer order for consistency\n return {\n preprocessedOldJson: preprocessJson(oldJson, newJsonLayerOrder),\n preprocessedNewJson: preprocessJson(newJson, newJsonLayerOrder)\n };\n }, [oldJson, newJson]);\n\n /**\n * Build flat data structure from preprocessed JSONs\n * - Uses jsondiffpatch to calculate differences\n * - Flattens nested structure into grid-compatible rows\n * - Preserves hierarchy information for tree display\n */\n const allRowData = useMemo(\n () => buildFlatData(preprocessedOldJson, preprocessedNewJson),\n [preprocessedOldJson, preprocessedNewJson],\n );\n\n /**\n * Filter data based on showChangesOnly setting\n * - When enabled, shows only rows with changes (added, removed, modified)\n * - When disabled, shows all rows including unchanged ones\n */\n const rowData = useMemo(() => {\n if (showChangesOnly) {\n return allRowData.filter(row => row.change !== 'same');\n }\n return allRowData;\n }, [allRowData, showChangesOnly]);\n\n /**\n * Handle toggle for show changes only checkbox\n * @param {Event} e - Checkbox change event\n */\n const handleShowChangesToggle = (e) => {\n setShowChangesOnly(e.target.checked);\n };\n\n // Grid configuration\n const columnDefs = createColumnDefs(oldVersionId, newVersionId);\n const defaultColDef = getDefaultColDef();\n const getRowStyleFunc = getRowStyle();\n\n return (\n <div style={{ width: '100%' }}>\n {/* Controls Section */}\n <div className=\"mb-3\">\n <Form.Check\n type=\"checkbox\"\n id=\"showChangesOnly\"\n label=\"Show changes only\"\n checked={showChangesOnly}\n onChange={handleShowChangesToggle}\n />\n </div>\n\n {/* Grid Section */}\n <div\n className={Constants.GRID_THEME.QUARTZ.VALUE}\n style={{ height: GRID_CONFIG.height, width: '100%' }}\n >\n <AgGridReact\n rowData={rowData}\n columnDefs={columnDefs}\n defaultColDef={defaultColDef}\n animateRows={GRID_CONFIG.animateRows}\n getRowStyle={getRowStyleFunc}\n />\n </div>\n </div>\n );\n}\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Modal, Form } from 'react-bootstrap';\nimport JsonDiffCompact from '@ui/diff/JsonDiffCompact';\nimport JsonDiffTreeGrid from '@ui/diff/JsonDiffTreeGrid';\nimport JsonDiffTree from '@ui/diff/JsonDiffTree';\nimport JsonDiffAgGrid from '@ui/diff/JsonDiffAgGrid';\nimport JsonDiffTreeAgGrid from '@ui/diff/JsonDiffTreeAgGrid';\n\nconst CompareModal = ({ showProps, selectedRevisions }) => {\n const { show, setShow } = showProps;\n const [showOnlyChanges, setShowOnlyChanges] = useState(true);\n\n if (!show) return null;\n\n // Get the first two selected revisions for comparison\n const revisionsToCompare = selectedRevisions.slice(0, 2);\n\n // Parse version string (e.g., \"v1.2\" -> [1, 2])\n const parseVersion = (versionStr) => {\n if (!versionStr || versionStr === '(In Progress)') {\n return null; // In Progress is not a valid version for comparison\n }\n\n const match = versionStr.match(/^v(\\d+)\\.(\\d+)$/);\n if (!match) return null;\n\n return [parseInt(match[1], 10), parseInt(match[2], 10)];\n };\n\n // Compare versions: returns -1 if a < b, 1 if a > b, 0 if equal\n const compareVersions = (versionA, versionB) => {\n if (!versionA && !versionB) return 0;\n if (!versionA) return 1; // a is invalid/in-progress, so b is smaller\n if (!versionB) return -1; // b is invalid/in-progress, so a is smaller\n\n const [aMajor, aMinor] = versionA;\n const [bMajor, bMinor] = versionB;\n\n if (aMajor !== bMajor) return aMajor - bMajor;\n return aMinor - bMinor;\n };\n\n // Get version IDs for comparison\n const firstVersionId = revisionsToCompare[0]?._versionDisplay?.verBase || '(In Progress)';\n const secondVersionId = revisionsToCompare[1]?._versionDisplay?.verBase || '(In Progress)';\n\n // Parse versions\n const firstVersion = parseVersion(firstVersionId);\n const secondVersion = parseVersion(secondVersionId);\n\n // Determine which should be base (older/smaller version)\n const comparison = compareVersions(firstVersion, secondVersion);\n\n let oldJson, newJson, oldVersionId, newVersionId;\n\n if (comparison <= 0) {\n // First selection has smaller/equal version or is the only valid version\n oldJson = revisionsToCompare[0] || {}; // First = base (older)\n newJson = revisionsToCompare[1] || {}; // Second = comparison target (newer)\n oldVersionId = firstVersionId;\n newVersionId = secondVersionId;\n } else {\n // Second selection has smaller version\n oldJson = revisionsToCompare[1] || {}; // Second = base (older)\n newJson = revisionsToCompare[0] || {}; // First = comparison target (newer)\n oldVersionId = secondVersionId;\n newVersionId = firstVersionId;\n }\n\n const handleClose = () => {\n setShow(false);\n };\n\n const handleShowOnlyChangesToggle = (e) => {\n setShowOnlyChanges(e.target.checked);\n };\n\n return (\n <>\n <style>\n {`\n .modal-90w {\n --bs-modal-width: 90vw;\n max-width: 90vw;\n }\n .modal-90w .modal-dialog {\n width: 90vw;\n max-width: 90vw;\n margin: auto;\n display: flex;\n align-items: center;\n min-height: calc(100vh - 3.5rem);\n }\n `}\n </style>\n <Modal\n aria-labelledby=\"contained-modal-title-vcenter\"\n show={show}\n onHide={handleClose}\n // fullscreen\n backdrop=\"static\"\n dialogClassName=\"modal-90w\"\n centered\n >\n <Modal.Header closeButton>\n <Modal.Title>\n Compare Revisions\n {revisionsToCompare.length === 2 && (\n <small className=\"text-muted ms-2\">\n (Showing differences between selected versions)\n </small>\n )}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body\n style={{\n maxHeight: '70vh',\n overflow: 'auto',\n padding: '1rem'\n }}\n >\n {revisionsToCompare.length < 2 ? (\n <div className=\"text-center p-4\">\n <p className=\"text-muted\">\n Please select exactly 2 revisions to compare.\n </p>\n <p className=\"text-muted\">\n Currently selected: {selectedRevisions.length} revision(s)\n </p>\n </div>\n ) : (\n <div>\n <JsonDiffTreeAgGrid\n oldJson={oldJson}\n newJson={newJson}\n oldVersionId={oldVersionId}\n newVersionId={newVersionId}\n />\n {/* <JsonDiffTree oldJson={oldJson} newJson={newJson} /> */}\n {/* <JsonDiffTreeGrid oldJson={oldJson} newJson={newJson} /> */}\n {/* <div className=\"mb-3\">\n <Form.Check\n type=\"checkbox\"\n id=\"showOnlyChanges\"\n label=\"Show only changes\"\n checked={showOnlyChanges}\n onChange={handleShowOnlyChangesToggle}\n />\n </div>\n <JsonDiffCompact\n oldJson={oldJson}\n newJson={newJson}\n showOnlyChanges={showOnlyChanges}\n /> */}\n </div>\n )}\n </Modal.Body>\n <Modal.Footer className=\"justify-content-start\">\n <Button variant=\"secondary\" onClick={handleClose}>\n Close\n </Button>\n </Modal.Footer>\n </Modal>\n </>\n );\n};\n\nCompareModal.propTypes = {\n showProps: PropTypes.shape({\n show: PropTypes.bool.isRequired,\n setShow: PropTypes.func.isRequired,\n }).isRequired,\n selectedRevisions: PropTypes.array.isRequired,\n};\n\nexport default CompareModal;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from 'react-bootstrap/Button';\nimport { fnToggle } from '@ui/common/fnToggle';\nimport { FN_ID } from '@ui/common/fnConstants';\n\nconst CompareButton = ({\n onClick,\n disabled = false,\n selectedCount = 0\n}) => {\n return (\n <Button\n variant=\"primary\"\n size=\"sm\"\n onClick={onClick}\n disabled={disabled}\n title={\n selectedCount !== 2\n ? 'Select exactly 2 revisions to compare'\n : 'Compare selected revisions'\n }\n >\n Compare ({selectedCount})\n </Button>\n );\n};\n\nCompareButton.fnId = FN_ID.FN_DIFF;\n\nCompareButton.propTypes = {\n onClick: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n selectedCount: PropTypes.number,\n};\n\nCompareButton.defaultProps = {\n disabled: false,\n selectedCount: 0,\n};\n\nexport default fnToggle(CompareButton);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from 'react-bootstrap/Button';\nimport FIcons from '@components/icons/FIcons';\n\nconst FULL_SCREEN_CONFIG = new Map([\n [\n false,\n {\n idf: 'scn_full',\n fa: 'faUpRightAndDownLeftFromCenter',\n label: 'Full Screen',\n },\n ],\n [\n true,\n {\n idf: 'scn_full_exit',\n fa: 'faDownLeftAndUpRightToCenter',\n label: 'Exit Full Screen',\n },\n ],\n]);\n\nconst FullScreenToggle = ({ isFullScreen, onToggle }) => {\n const config = FULL_SCREEN_CONFIG.get(isFullScreen);\n\n return (\n <Button onClick={onToggle} size=\"sm\" variant=\"light\">\n {FIcons[config?.fa]} {config?.label}\n </Button>\n );\n};\n\nFullScreenToggle.propTypes = {\n isFullScreen: PropTypes.bool.isRequired,\n onToggle: PropTypes.func.isRequired,\n};\n\nexport default FullScreenToggle;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from 'react-bootstrap/Button';\nimport FIcons from '@components/icons/FIcons';\nimport { fnToggle } from '@ui/common/fnToggle';\nimport { FN_ID } from '@ui/common/fnConstants';\n\nconst ContributeTemplateButton = ({ onClick, disabled = false, text = '' }) => {\n return (\n <Button\n onClick={onClick}\n size=\"sm\"\n variant=\"primary\"\n disabled={disabled}\n className=\"me-2\"\n >\n {FIcons.faPaperPlane} Contribute to Template Hub {text}\n </Button>\n );\n};\n\nContributeTemplateButton.fnId = FN_ID.FN_CONTRIBUTE_TEMPLATE;\n\nContributeTemplateButton.propTypes = {\n onClick: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n text: PropTypes.string,\n};\n\nContributeTemplateButton.defaultProps = {\n disabled: false,\n text: '',\n};\n\nexport default fnToggle(ContributeTemplateButton);\n","import React, { useState } from 'react';\nimport { Alert, Button } from 'react-bootstrap';\nimport FIcons from '@components/icons/FIcons';\n\n/**\n * PreviewNote Component\n * An alert that informs users about template default values.\n */\nconst PreviewNote = () => {\n const [open, setOpen] = useState(true);\n\n const toggle = () => {\n setOpen(!open);\n };\n\n return (\n <div className=\"d-flex flex-row align-items-stretch\">\n <Button\n title=\"Important Note for Preview\"\n variant=\"danger\"\n size=\"sm\"\n onClick={toggle}\n className={`d-flex align-items-center px-3 z-1 border-danger text-nowrap ${\n open ? 'rounded-start border-end-0' : 'rounded'\n }`}\n >\n <span className=\"me-2\">{FIcons.faExclamationCircle}</span>\n <span className=\"me-2\">Important</span>\n {open ? FIcons.faCaretLeft : FIcons.faCaretRight}\n </Button>\n\n {open && (\n <Alert\n variant=\"danger\"\n className=\"mb-0 py-0 px-3 border-start-0 d-flex align-items-center rounded-0 rounded-end text-nowrap\"\n >\n <span style={{ fontSize: '0.875rem' }}>\n Data entered here will be used as the default value of the template.\n </span>\n <span\n onClick={() => setOpen(false)}\n style={{ cursor: 'pointer', opacity: 0.6 }}\n className=\"ms-2 opacity-50\"\n title=\"Close\"\n >\n {FIcons.faTimes}\n </span>\n </Alert>\n )}\n </div>\n );\n};\n\nexport default PreviewNote;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal, Form, Button, Alert } from 'react-bootstrap';\nimport { userData } from '@components/tools/utils';\nimport Api from '@utils/api';\n\nconst ContributeTemplateModal = ({ showProps, data, currentUser, onSubmitSuccess }) => {\n const { show, setShow } = showProps;\n const formRef = useRef();\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [submitMessage, setSubmitMessage] = useState({ type: '', content: '' });\n const [emailValidation, setEmailValidation] = useState({ isValid: true, message: '' });\n\n const handleClose = () => {\n setShow(false);\n setSubmitMessage({ type: '', content: '' });\n setEmailValidation({ isValid: true, message: '' });\n };\n\n const validateEmail = (email) => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n };\n\n const handleEmailChange = (e) => {\n const email = e.target.value.trim();\n\n if (email === '') {\n setEmailValidation({ isValid: true, message: '' });\n } else if (!validateEmail(email)) {\n setEmailValidation({\n isValid: false,\n message: 'Please enter a valid email address (e.g., user@example.com)'\n });\n } else {\n setEmailValidation({ isValid: true, message: '' });\n }\n };\n\n const handleEmailKeyPress = (e) => {\n if (e.key === 'Enter') {\n const email = e.target.value.trim();\n if (email !== '' && !validateEmail(email)) {\n setEmailValidation({\n isValid: false,\n message: 'Please enter a valid email address (e.g., user@example.com)'\n });\n }\n }\n };\n\n const validateForm = () => {\n const form = formRef.current;\n if (!form) return false;\n\n const nameInput = form.querySelector('[name=\"contributorName\"]');\n const contributorEmailInput = form.querySelector('[name=\"contributorEmail\"]');\n const emailInput = form.querySelector('[name=\"contactEmail\"]');\n const applicationInput = form.querySelector('[name=\"application\"]');\n const messageInput = form.querySelector('[name=\"message\"]');\n\n const name = nameInput ? nameInput.value.trim() : '';\n const contributorEmail = contributorEmailInput ? contributorEmailInput.value.trim() : '';\n const email = emailInput ? emailInput.value.trim() : '';\n const application = applicationInput ? applicationInput.value.trim() : '';\n const message = messageInput ? messageInput.value.trim() : '';\n\n if (!name || !contributorEmail || !email || !application || !message) {\n setSubmitMessage({\n type: 'danger',\n content: 'All fields are required. Please fill in all the fields.',\n });\n return false;\n }\n\n // Basic email validation\n if (!validateEmail(email)) {\n setSubmitMessage({\n type: 'danger',\n content: 'Please enter a valid email address.',\n });\n return false;\n }\n\n return true;\n };\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n\n if (!validateForm()) {\n return;\n }\n\n setIsSubmitting(true);\n setSubmitMessage({ type: '', content: '' });\n\n try {\n const form = formRef.current;\n const emailInput = form.querySelector('[name=\"contactEmail\"]');\n const applicationInput = form.querySelector('[name=\"application\"]');\n const messageInput = form.querySelector('[name=\"message\"]');\n const templateKlass = data?.properties_release?.klass;\n const submissionData = {\n contact_email: emailInput ? emailInput.value.trim() : '',\n application: applicationInput ? applicationInput.value.trim() : '',\n message: messageInput ? messageInput.value.trim() : '',\n klass: templateKlass || '',\n id: data?.id,\n templateUuid: data?.uuid,\n };\n\n const response = await Api.execApiData(\n submissionData,\n 'labimotion_hub/submit',\n 'POST'\n );\n\n if (response.mc === 'se00') {\n setSubmitMessage({\n type: 'danger',\n content: response.msg || 'Failed to submit template contribution.',\n });\n } else {\n setSubmitMessage({\n type: 'success',\n content: 'Template contribution submitted successfully! Thank you for your contribution.',\n });\n\n // Clear form after successful submission\n form.reset();\n setEmailValidation({ isValid: true, message: '' });\n\n // Update the data to mark as submitted\n if (onSubmitSuccess) {\n onSubmitSuccess();\n }\n }\n } catch (error) {\n setSubmitMessage({\n type: 'danger',\n content: 'An error occurred while submitting. Please try again.',\n });\n } finally {\n setIsSubmitting(false);\n }\n };\n\n if (!show) return null;\n\n return (\n <Modal\n show={show}\n onHide={handleClose}\n backdrop=\"static\"\n keyboard={false}\n centered\n size=\"lg\"\n >\n <Modal.Header closeButton>\n <Modal.Title>Contribute this template to Template Hub</Modal.Title>\n </Modal.Header>\n\n <Modal.Body>\n {submitMessage.content && (\n <Alert variant={submitMessage.type} className=\"mb-3\">\n {submitMessage.content}\n </Alert>\n )}\n\n <Form ref={formRef} onSubmit={handleSubmit}>\n <Form.Group className=\"mb-3\">\n <Form.Label>\n Registered Name <span className=\"text-danger\">*</span>\n </Form.Label>\n <Form.Control\n type=\"text\"\n name=\"contributorName\"\n placeholder=\"Enter your full name\"\n required\n disabled\n defaultValue={userData(currentUser).name || ''}\n />\n </Form.Group>\n\n <Form.Group className=\"mb-3\">\n <Form.Label>\n Registered E-Mail <span className=\"text-danger\">*</span>\n </Form.Label>\n <Form.Control\n type=\"email\"\n name=\"contributorEmail\"\n placeholder=\"Enter your email address\"\n required\n disabled\n defaultValue={userData(currentUser).email || ''}\n />\n </Form.Group>\n\n <Form.Group className=\"mb-3\">\n <Form.Label>\n Contact E-Mail <span className=\"text-danger\">*</span>\n </Form.Label>\n <Form.Control\n type=\"email\"\n name=\"contactEmail\"\n placeholder=\"Enter your email address\"\n required\n onChange={handleEmailChange}\n onKeyPress={handleEmailKeyPress}\n isInvalid={!emailValidation.isValid}\n />\n {!emailValidation.isValid && (\n <Form.Control.Feedback type=\"invalid\">\n {emailValidation.message}\n </Form.Control.Feedback>\n )}\n </Form.Group>\n\n <Form.Group className=\"mb-3\">\n <Form.Label>\n Application <span className=\"text-danger\">*</span>\n </Form.Label>\n <Form.Control\n type=\"text\"\n name=\"application\"\n placeholder=\"Enter the application name or context\"\n required\n />\n </Form.Group>\n\n <Form.Group className=\"mb-3\">\n <Form.Label>\n Leave a message <span className=\"text-danger\">*</span>\n </Form.Label>\n <Form.Control\n as=\"textarea\"\n rows={4}\n name=\"message\"\n placeholder=\"Please describe your template, its purpose, and why it would be valuable for the template hub...\"\n required\n />\n </Form.Group>\n\n <div className=\"text-muted small mb-3\">\n <strong>Template Information:</strong>\n <br />\n ID: {data?.uuid || 'N/A'}\n <br />\n Version: {data?.version || 'N/A'}\n </div>\n </Form>\n </Modal.Body>\n\n <Modal.Footer className=\"justify-content-start\">\n <Button variant=\"secondary\" onClick={handleClose} disabled={isSubmitting}>\n Cancel\n </Button>\n <Button\n variant=\"primary\"\n onClick={handleSubmit}\n disabled={isSubmitting}\n >\n {isSubmitting ? 'Submitting...' : 'Submit to Template Hub'}\n </Button>\n </Modal.Footer>\n </Modal>\n );\n};\n\nContributeTemplateModal.propTypes = {\n showProps: PropTypes.shape({\n show: PropTypes.bool.isRequired,\n setShow: PropTypes.func.isRequired,\n }).isRequired,\n data: PropTypes.object,\n onSubmitSuccess: PropTypes.func,\n};\n\nContributeTemplateModal.defaultProps = {\n data: {},\n onSubmitSuccess: null,\n};\n\nexport default ContributeTemplateModal;\n","/* eslint-disable camelcase */\n/* eslint-disable react/forbid-prop-types */\nimport React, { useState, useEffect, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport Badge from 'react-bootstrap/Badge';\nimport Col from 'react-bootstrap/Col';\nimport Row from 'react-bootstrap/Row';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { downloadFile, FieldTypes } from 'generic-ui-core';\nimport GenInterface from '@components/details/GenInterface';\nimport Constants from '@components/tools/Constants';\nimport { responseExt } from '@utils/template/action-handler';\nimport { notifySuccess } from '@utils/template/designer-message';\nimport VersionBlock from '@components/designer/preview/VersionBlock';\nimport CompareModal from '@components/designer/preview/CompareModal';\nimport CompareButton from '@components/designer/preview/CompareButton';\nimport FullScreenToggle from '@components/designer/preview/FullScreenToggle';\nimport ContributeTemplateButton from '@components/designer/preview/ContributeTemplateButton';\nimport PreviewNote from '@/components/designer/preview/PreviewNote';\nimport ContributeTemplateModal from '@components/designer/preview/ContributeTemplateModal';\nimport { buildString } from '@utils/pureUtils';\nimport VerManager from '@utils/verMgr';\n\n// Configuration constants\nconst PREVIEW_CONFIG = {\n MAX_REVISIONS_DISPLAY: 10,\n DEFAULT_COMPARE_UUID: 'none',\n LAYOUT: {\n REVISION_LIST_COLS: 4,\n PREVIEW_COLS_NORMAL: 8,\n PREVIEW_COLS_FULLSCREEN: 12,\n MIN_PREVIEW_HEIGHT: '50vh',\n },\n SOURCES: {\n PROPERTIES: 'properties',\n PROPERTIES_RELEASE: 'properties_release',\n },\n};\n\n// API action mappings for different source types\nconst API_ACTIONS = {\n [PREVIEW_CONFIG.SOURCES.PROPERTIES]: {\n fetch: 'revisions',\n delete: 'deleteRevision',\n },\n [PREVIEW_CONFIG.SOURCES.PROPERTIES_RELEASE]: {\n fetch: 'klassRevisions',\n delete: 'deleteKlassRevision',\n },\n};\n\n// Parameter builders for different API endpoints\nconst buildApiParams = (src, data, type) => {\n switch (src) {\n case PREVIEW_CONFIG.SOURCES.PROPERTIES:\n return { id: data.id, type: type.toLowerCase() };\n case PREVIEW_CONFIG.SOURCES.PROPERTIES_RELEASE:\n return { id: data.id, klass: `${type}Klass` };\n default:\n return {};\n }\n};\n\nconst buildDeleteParams = (src, data, type, params) => {\n switch (src) {\n case PREVIEW_CONFIG.SOURCES.PROPERTIES:\n return {\n id: params.id,\n element_id: data.id,\n klass: type,\n };\n case PREVIEW_CONFIG.SOURCES.PROPERTIES_RELEASE:\n return {\n id: params.id,\n klass_id: data.id,\n klass: `${type}Klass`,\n };\n default:\n return {};\n }\n};\n\n// Data transformation functions\nconst prepareRevisions = (src, list, data) => {\n if (src === PREVIEW_CONFIG.SOURCES.PROPERTIES) {\n return (list || []).map((r) => ({\n ...r,\n released_at: r.created_at,\n }));\n }\n\n // For properties_release, include current template as first revision\n const currentRevision = {\n metadata: { ...data.metadata },\n properties_release: { ...data.properties_template },\n uuid: data.properties_template.uuid,\n version: data.properties_template.version,\n klass_id: data.id,\n id: 0,\n };\n\n return [currentRevision, ...(list || [])];\n};\n\n// Initialize the compareUUID based on the source type and data\nconst getInitialCompareUUID = (src, data) => {\n if (\n src === PREVIEW_CONFIG.SOURCES.PROPERTIES_RELEASE &&\n data?.properties_template\n ) {\n return buildString([\n data.properties_template.uuid,\n data.properties_template.id || 0,\n ]);\n }\n return PREVIEW_CONFIG.DEFAULT_COMPARE_UUID;\n};\n\nconst PreviewFunctional = ({\n genericType,\n data = {},\n refSource = { currentUser: {} },\n fnRetrieve = () => {},\n src = PREVIEW_CONFIG.SOURCES.PROPERTIES_RELEASE,\n canDL = false,\n}) => {\n const [revisions, setRevisions] = useState([]);\n const [selectedRevisions, setSelectedRevisions] = useState([]);\n const [showCompareModal, setShowCompareModal] = useState(false);\n const [showContributeModal, setShowContributeModal] = useState(false);\n const [compareUUID, setCompareUUID] = useState(() =>\n getInitialCompareUUID(src, data),\n );\n const [fullScreen, setFullScreen] = useState(false);\n\n const fetchRevisions = () => {\n if (data?.id) {\n VerManager[API_ACTIONS[src].fetch](\n buildApiParams(src, data, genericType),\n ).then((response) => {\n if (response.notify.isSuccess) {\n setRevisions(\n prepareRevisions(\n src,\n response.element?.data?.revisions || [],\n data,\n ),\n );\n }\n });\n }\n };\n\n const delRevision = useCallback(\n (params) => {\n VerManager[API_ACTIONS[src].delete](\n buildDeleteParams(src, data, genericType, params),\n ).then((response) => {\n if (response.notify.isSuccess) {\n fetchRevisions();\n }\n });\n },\n [src, data],\n );\n\n useEffect(() => {\n fetchRevisions();\n }, []);\n\n const handleChanged = useCallback(\n (el) => {\n let selected = (revisions || []).find(\n (r) => buildString([r.uuid, r.id]) === compareUUID,\n );\n if (selected && selected[src]) {\n selected = el;\n setRevisions([...revisions]);\n }\n },\n [compareUUID, revisions, src],\n );\n\n const compare = useCallback(\n (params) => {\n setCompareUUID(buildString([params.uuid, params.id]));\n },\n [revisions],\n );\n\n const retrieveRevision = useCallback(\n (params) => {\n const deep = cloneDeep(revisions.find((r) => r.id === params.id));\n if (src === PREVIEW_CONFIG.SOURCES.PROPERTIES_RELEASE) {\n data.properties_template = deep[src];\n data.metadata = deep.metadata;\n fnRetrieve(responseExt(notifySuccess(), data, { active: 'w' }));\n } else {\n fnRetrieve({ metadata: deep.metadata, [src]: deep[src] }, () => {});\n }\n },\n [fnRetrieve, revisions, src, data],\n );\n\n const dlRevision = useCallback(\n (params) => {\n const revision = revisions.find((r) => r.id === params.id);\n const exportData = cloneDeep(revision.properties_release);\n exportData.klass = revision.properties_release.klass;\n exportData.released_at = revision.released_at || '';\n exportData.metadata = revision.metadata || {};\n\n const href = `data:text/json;charset=utf-8,${encodeURIComponent(\n JSON.stringify(exportData),\n )}`;\n downloadFile({\n contents: href,\n name: `${exportData.klass}_${data.label}_${revision.uuid}.json`,\n });\n },\n [data, revisions],\n );\n\n const handleSelectionChange = useCallback(\n (revision, isSelected, { verID, verBase }) => {\n setSelectedRevisions((prev) => {\n if (isSelected) {\n // Add revision if not already selected (limit to 2)\n if (\n prev.length < 2 &&\n !prev.some(\n (r) =>\n buildString([r.uuid, r.id]) ===\n buildString([revision.uuid, revision.id]),\n )\n ) {\n return [\n ...prev,\n {\n ...revision[src],\n // Preserve revision identifiers for comparison\n uuid: revision.uuid,\n id: revision.id,\n // Store the ver info for headers\n _versionDisplay: { verID, verBase } || 'Unknown Version',\n },\n ];\n }\n return prev;\n } else {\n // Remove revision\n return prev.filter((r) => {\n const currentId = buildString([r.uuid, r.id]);\n const revisionId = buildString([revision.uuid, revision.id]);\n return currentId !== revisionId;\n });\n }\n });\n },\n [src],\n );\n\n const handleCompareClick = useCallback(() => {\n setShowCompareModal(true);\n }, []);\n\n const isRevisionSelected = useCallback(\n (revision) => {\n return selectedRevisions.some((r) => {\n const selectedId = buildString([r.uuid, r.id]);\n const revisionId = buildString([revision.uuid, revision.id]);\n return selectedId === revisionId;\n });\n },\n [selectedRevisions],\n );\n\n const toggleScreen = useCallback(() => {\n setFullScreen((prev) => !prev); // safer toggle\n }, []);\n\n const handleContributeTemplate = useCallback(() => {\n setShowContributeModal(true);\n }, []);\n\n const handleSubmitSuccess = useCallback(() => {\n // Refresh revisions from DB to get updated data (including submitted flag)\n // The compareUUID will ensure the same revision remains selected\n fetchRevisions();\n }, []);\n\n // Early return if no revisions\n if (revisions.length < 1) return null;\n\n const options = [];\n const selected =\n (revisions || []).find(\n (r) => buildString([r.uuid, r.id]) === compareUUID,\n ) || {};\n const selectOptions =\n (selected && selected[src] && selected[src].select_options) || {};\n\n // Calculate submission status text\n const submittedCount = selected.submitted || 0;\n const getSubmissionText = () => {\n if (submittedCount === 0) return '';\n if (submittedCount === 1) return '(1 time)';\n return `(${submittedCount} times)`;\n };\n\n if (selected.name) {\n options.push({\n generic: selected,\n type: FieldTypes.F_TEXT,\n isEditable: true,\n isRequire: false,\n field: 'name',\n });\n }\n\n selected[src] = selected[src] || {};\n selected[src].layers = selected[src].layers || {};\n if (src === PREVIEW_CONFIG.SOURCES.PROPERTIES) {\n selected.properties_release = { select_options: selectOptions };\n } else {\n selected.properties = selected.properties_release;\n }\n\n const layersLayout = (\n <GenInterface\n generic={selected || {}}\n fnChange={handleChanged}\n extLayers={options}\n genId={selected.uuid || 0}\n isPreview={src === PREVIEW_CONFIG.SOURCES.PROPERTIES_RELEASE}\n editMode={src === PREVIEW_CONFIG.SOURCES.PROPERTIES_RELEASE}\n isActiveWF={false}\n genericType={genericType}\n />\n );\n\n return (\n <Row className=\"g-0\">\n {!fullScreen && (\n <Col md={PREVIEW_CONFIG.LAYOUT.REVISION_LIST_COLS}>\n <div className=\"d-flex align-items-center justify-content-between mb-2\">\n <b>\n Only show the latest {PREVIEW_CONFIG.MAX_REVISIONS_DISPLAY}{' '}\n revisions.\n </b>\n <CompareButton\n onClick={handleCompareClick}\n disabled={selectedRevisions.length !== 2}\n selectedCount={selectedRevisions.length}\n />\n </div>\n {revisions.map((rev, idx) => (\n <VersionBlock\n key={buildString([rev.uuid, rev.id])}\n data={data}\n download={{ canDL, fnDownload: dlRevision }}\n idxSelect={`${idx}:${compareUUID}`}\n rev={rev}\n src={src}\n fnDelete={delRevision}\n fnRetrieve={retrieveRevision}\n fnView={compare}\n isSelected={isRevisionSelected(rev)}\n onSelectionChange={handleSelectionChange}\n />\n ))}\n </Col>\n )}\n <Col\n md={\n fullScreen\n ? PREVIEW_CONFIG.LAYOUT.PREVIEW_COLS_FULLSCREEN\n : PREVIEW_CONFIG.LAYOUT.PREVIEW_COLS_NORMAL\n }\n >\n <div className=\"d-flex align-items-center justify-content-between ms-1 mb-2\">\n <div className=\"d-flex align-items-center\">\n <div className=\"me-2\">\n {selected.version && selected.released_at && (\n <Badge bg=\"info\" className=\"fs-6\">\n {`v${selected.version}`}\n </Badge>\n )}\n {!selected.version && <span />}\n </div>\n {src === PREVIEW_CONFIG.SOURCES.PROPERTIES_RELEASE && <PreviewNote />}\n </div>\n <div className=\"d-flex align-items-center\">\n <ContributeTemplateButton\n onClick={handleContributeTemplate}\n disabled={\n !selected.id || !selected.version || !refSource.currentUser?.id\n }\n text={getSubmissionText()}\n />\n <FullScreenToggle\n isFullScreen={fullScreen}\n onToggle={toggleScreen}\n />\n </div>\n </div>\n {Object.keys(selected).length !== 0 && (\n <div\n style={{\n width: '100%',\n minHeight: PREVIEW_CONFIG.LAYOUT.MIN_PREVIEW_HEIGHT,\n }}\n >\n {layersLayout}\n </div>\n )}\n </Col>\n <CompareModal\n showProps={{\n show: showCompareModal,\n setShow: setShowCompareModal,\n }}\n selectedRevisions={selectedRevisions}\n />\n <ContributeTemplateModal\n showProps={{\n show: showContributeModal,\n setShow: setShowContributeModal,\n }}\n data={selected}\n currentUser={refSource.currentUser}\n onSubmitSuccess={handleSubmitSuccess}\n />\n </Row>\n );\n};\n\nPreviewFunctional.propTypes = {\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n data: PropTypes.object,\n fnRetrieve: PropTypes.func,\n canDL: PropTypes.bool,\n src: PropTypes.oneOf([\n PREVIEW_CONFIG.SOURCES.PROPERTIES_RELEASE,\n PREVIEW_CONFIG.SOURCES.PROPERTIES,\n ]),\n};\n\nPreviewFunctional.defaultProps = {\n data: {},\n fnRetrieve: () => {},\n src: PREVIEW_CONFIG.SOURCES.PROPERTIES_RELEASE,\n canDL: false,\n};\n\nexport default PreviewFunctional;\n","/* eslint-disable react/require-default-props */\n/* eslint-disable react/forbid-prop-types */\nimport React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport TemplateBar from '@components/designer/template/TemplateBar';\nimport TemplateProps from '@components/designer/template/TemplateProps';\nimport Constants from '@components/tools/Constants';\nimport PreviewFunctional from '@components/designer/preview/PreviewFunctional';\nimport { handleSaveSorting } from '@utils/template/sorting-handler';\n\nconst Template = (props) => {\n const {\n data: inputData,\n vocabularies,\n fnSubmit,\n genericType,\n refSource,\n } = props;\n\n const [opData, setOpData] = useState({\n data: inputData,\n notify: null,\n active: 'w',\n });\n\n useEffect(() => {\n setOpData((prevOpData) => {\n return {\n ...prevOpData,\n data: inputData,\n notify: null,\n active: 'w',\n };\n });\n }, [inputData]);\n\n if (!inputData || Object.keys(inputData).length === 0) return null;\n\n const innerAction = (_result) => {\n const { element: newElement, notify: newNotify, additional } = _result;\n if (newNotify.isSuccess) {\n setOpData((prevState) => {\n return {\n ...prevState,\n data: newElement,\n notify: newNotify,\n active: additional?.active ? additional?.active : prevState.active,\n };\n });\n } else {\n setOpData((prevState) => {\n return {\n ...prevState,\n notify: newNotify,\n };\n });\n }\n };\n\n const onSwitch = (_page) => {\n setOpData((prevState) => {\n return {\n ...prevState,\n active: _page,\n };\n });\n };\n\n const handleSubmit = (_e) => {\n const { data, release } = _e;\n const sortedData = handleSaveSorting(data);\n fnSubmit(sortedData, release);\n };\n\n return (\n <div>\n <TemplateBar\n notify={opData.notify}\n active={opData.active}\n fnSwitch={onSwitch}\n />\n <div\n className=\"mt-3\"\n style={{ overflowY: 'auto', maxHeight: '58vh', height: '58vh' }}\n >\n {opData.active === 'w' && (\n <TemplateProps\n data={opData.data}\n vocabularies={vocabularies}\n genericType={genericType}\n innerAction={innerAction}\n fnSubmit={handleSubmit}\n />\n )}\n {opData.active === 'p' && (\n <PreviewFunctional\n genericType={genericType}\n data={opData.data}\n refSource={refSource}\n fnRetrieve={innerAction}\n canDL\n />\n )}\n </div>\n </div>\n );\n};\n\nTemplate.propTypes = {\n data: PropTypes.object,\n fnSubmit: PropTypes.func.isRequired,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n vocabularies: PropTypes.array,\n refSource: PropTypes.object,\n};\n\nTemplate.defaultProps = {\n vocabularies: [],\n refSource: {},\n};\n\nexport default Template;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Dropzone from 'react-dropzone';\nimport { Modal } from 'react-bootstrap';\nimport Constants from '@components/tools/Constants';\nimport { handleKlassUploading } from '@utils/template/action-handler';\n\nconst UploadKlassModal = props => {\n const { genericType, fnUpload, showProps } = props;\n const { show, setShow } = showProps;\n\n const handleReaderLoaded = e => {\n const verify = handleKlassUploading(e, genericType);\n fnUpload(verify);\n setShow(false);\n };\n\n const handleUploadTemplate = file => {\n const reader = new FileReader();\n reader.onload = handleReaderLoaded;\n reader.readAsText(file[0]);\n };\n\n return (\n <Modal size=\"lg\" centered show={show} onHide={() => setShow(false)}>\n <Modal.Header closeButton>\n <Modal.Title>{`Import ${genericType} and its template`}</Modal.Title>\n </Modal.Header>\n <Modal.Body style={{ overflow: 'auto' }}>\n <Dropzone\n onDrop={attach => handleUploadTemplate(attach)}\n className=\"lu-drop-zone\"\n style={{ height: 50 }}\n >\n <div style={{ paddingTop: 12 }}>Drop File, or Click to Select.</div>\n </Dropzone>\n </Modal.Body>\n </Modal>\n );\n};\n\nUploadKlassModal.propTypes = {\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n fnUpload: PropTypes.func.isRequired,\n showProps: PropTypes.shape({\n show: PropTypes.bool.isRequired,\n setShow: PropTypes.func.isRequired,\n }).isRequired,\n};\n\nexport default UploadKlassModal;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport Constants from '@components/tools/Constants';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\nimport UploadKlassModal from '@components/elements/UploadKlassModal';\n\nfunction AttrUploadBtn(props) {\n const { fnUpload, genericType } = props;\n const [show, setShow] = useState(false);\n\n if (genericType === Constants.GENERIC_TYPES.DATASET) return null;\n\n return (\n <>\n <LTooltip idf={`imp_${genericType.toLowerCase()}_n_temp`}>\n <Button\n onClick={() => setShow(true)}\n variant=\"outline-secondary\"\n className=\"gu-btn-outline-secondary\"\n >\n {FIcons.faFileImport}&nbsp;Import\n </Button>\n </LTooltip>\n <UploadKlassModal\n fnUpload={fnUpload}\n genericType={genericType}\n showProps={{ show, setShow }}\n />\n </>\n );\n}\n\nAttrUploadBtn.propTypes = {\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n fnUpload: PropTypes.func,\n};\n\nAttrUploadBtn.defaultProps = { fnUpload: () => {} };\n\nexport default AttrUploadBtn;\n","import React from 'react';\nimport ButtonTooltip from '@components/fields/ButtonTooltip';\n\nconst RepoRenderer = (params) => {\n const { data, fnApi, node } = params;\n\n const onCall = (e) => {\n node.setSelected(true, true);\n fnApi(e);\n };\n\n return (\n <span>\n <ButtonTooltip\n idf=\"tpl_fetch\"\n fa=\"faArrowsRotate\"\n element={data}\n fnClick={onCall}\n />\n </span>\n );\n};\n\nexport default RepoRenderer;\n","import ApiExecutor from '@utils/apiExecutor';\nimport Constants from '@components/tools/Constants';\n\nconst API_DISP = {\n [Constants.GENERIC_TYPES.ELEMENT]: 'generic_elements',\n [Constants.GENERIC_TYPES.SEGMENT]: 'segments',\n [Constants.GENERIC_TYPES.DATASET]: 'generic_dataset',\n};\n\nclass ExternalManager {\n // a private static method\n static #exec = ApiExecutor.exec;\n static #execRaw = ApiExecutor.execRaw;\n\n static deleteVersion = (data) =>\n ExternalManager.#exec(\n `${API_DISP[Constants.GENERIC_TYPES.ELEMENT]}/delete_revision`,\n 'POST',\n data\n );\n\n static getVersions = (disp, params) =>\n ExternalManager.#exec(\n `${API_DISP[Constants.GENERIC_TYPES.ELEMENT]}/${disp}_revisions.json`,\n 'GET',\n null,\n params\n );\n\n static saveTemplate = (disp, data = {}) =>\n ExternalManager.#exec(`${API_DISP[disp]}/create_repo_klass`, 'POST', data);\n\n static getAllTemplates = (disp) =>\n ExternalManager.#exec(`${API_DISP[disp]}/fetch_repo`);\n\n static exportAsFile = (params) =>\n ExternalManager.#execRaw(\n `${API_DISP[Constants.GENERIC_TYPES.ELEMENT]}/export.json`,\n 'GET',\n null,\n params\n );\n}\n\nexport default ExternalManager;\n","import React, { useCallback, useMemo, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { AgGridReact } from 'ag-grid-react';\nimport RepoRenderer from '@components/details/renderers/RepoRenderer';\nimport Constants from '@components/tools/Constants';\nimport ExternalManager from '@utils/extMgr';\n\nfunction RepoGridDs({ fnApi }) {\n const [rowData, setRowData] = useState([]);\n const [loading, setLoading] = useState(true);\n const defaultColDef = useMemo(\n () => ({\n minWidth: 100,\n flex: 1,\n }),\n [],\n );\n\n const onGridReady = useCallback(() => {\n const fetchTemplates = async () => {\n setLoading(true);\n const res = await ExternalManager.getAllTemplates(\n Constants.GENERIC_TYPES.DATASET,\n );\n if (res.error) {\n console.error(res.error);\n } else {\n setRowData(res.element.data || []);\n }\n setLoading(false);\n };\n fetchTemplates();\n }, []);\n\n const columnDefs = [\n {\n hide: true,\n headerName: '#',\n sortable: false,\n },\n {\n headerName: 'Action',\n cellRenderer: RepoRenderer,\n cellRendererParams: { fnApi },\n },\n {\n headerName: 'Chemical Methods Ontology',\n field: 'label',\n flex: 3,\n },\n { headerName: 'Version', field: 'version' },\n { headerName: 'Released at', minWidth: 120, field: 'released_at', flex: 2 },\n { headerName: 'Identifier', minWidth: 120, field: 'identifier' },\n ];\n\n return (\n <div\n className={Constants.GRID_THEME.QUARTZ.VALUE}\n style={{ height: '600px', width: '100%', overflow: 'auto' }}\n >\n <AgGridReact\n loading={loading}\n onGridReady={onGridReady}\n columnDefs={columnDefs}\n defaultColDef={defaultColDef}\n rowData={rowData}\n domLayout=\"normal\"\n suppressAutoSize\n />\n </div>\n );\n}\n\nRepoGridDs.propTypes = {\n fnApi: PropTypes.func.isRequired,\n};\n\nexport default RepoGridDs;\n","import React, { useCallback, useMemo, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { AgGridReact } from 'ag-grid-react';\nimport RepoRenderer from '@components/details/renderers/RepoRenderer';\nimport Constants from '@components/tools/Constants';\nimport ExternalManager from '@utils/extMgr';\n\nfunction BelongsToRenderer(params) {\n const { data } = params;\n return (\n <>\n {data.element_klass?.label}\n &nbsp;\n <i className={data.element_klass?.icon_name} aria-hidden=\"true\" />\n </>\n );\n}\n\nfunction RepoGridSg({ fnApi }) {\n const [rowData, setRowData] = useState([]);\n const [loading, setLoading] = useState(true);\n const defaultColDef = useMemo(\n () => ({\n minWidth: 100,\n flex: 1,\n }),\n [],\n );\n\n const onGridReady = useCallback(() => {\n const fetchTemplates = async () => {\n setLoading(true);\n const res = await ExternalManager.getAllTemplates(\n Constants.GENERIC_TYPES.SEGMENT,\n );\n if (res.error) {\n console.error(res.error);\n } else {\n setRowData(res.element.data || []);\n }\n setLoading(false);\n };\n fetchTemplates();\n }, []);\n\n const columnDefs = [\n {\n hide: true,\n headerName: '#',\n sortable: false,\n },\n {\n headerName: 'Action',\n cellRenderer: RepoRenderer,\n cellRendererParams: { fnApi },\n },\n {\n headerName: 'Label',\n field: 'label',\n flex: 2,\n },\n {\n headerName: 'Belongs to',\n field: 'element_klass.name',\n cellRenderer: BelongsToRenderer,\n flex: 2,\n },\n { headerName: 'Version', field: 'version' },\n { headerName: 'Released at', field: 'released_at', flex: 2 },\n { headerName: 'Identifier', field: 'identifier' },\n ];\n\n return (\n <div\n className={Constants.GRID_THEME.QUARTZ.VALUE}\n style={{ height: '600px', width: '100%', overflow: 'auto' }}\n >\n <AgGridReact\n loading={loading}\n onGridReady={onGridReady}\n columnDefs={columnDefs}\n defaultColDef={defaultColDef}\n rowData={rowData}\n domLayout=\"normal\"\n suppressAutoSize\n />\n </div>\n );\n}\n\nRepoGridSg.propTypes = {\n fnApi: PropTypes.func.isRequired,\n};\n\nexport default RepoGridSg;\n","import React, { useCallback, useMemo, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { AgGridReact } from 'ag-grid-react';\nimport RepoRenderer from '@components/details/renderers/RepoRenderer';\nimport Constants from '@components/tools/Constants';\nimport ExternalManager from '@utils/extMgr';\n\nfunction RepoGridEl({ fnApi }) {\n const [rowData, setRowData] = useState([]);\n const [loading, setLoading] = useState(true);\n const defaultColDef = useMemo(\n () => ({\n minWidth: 100,\n flex: 1,\n }),\n [],\n );\n\n const onGridReady = useCallback(() => {\n const fetchTemplates = async () => {\n setLoading(true);\n const res = await ExternalManager.getAllTemplates(\n Constants.GENERIC_TYPES.ELEMENT,\n );\n if (res.error) {\n console.error(res.error);\n } else {\n setRowData(res.element?.data || []);\n }\n setLoading(false);\n };\n fetchTemplates();\n }, []);\n\n const columnDefs = [\n {\n hide: true,\n headerName: '#',\n sortable: false,\n },\n {\n headerName: 'Action',\n cellRenderer: RepoRenderer,\n cellRendererParams: { fnApi },\n },\n {\n headerName: 'Name',\n field: 'name',\n },\n {\n headerName: 'Element Label',\n field: 'label',\n flex: 2,\n },\n {\n headerName: 'Description',\n field: 'description',\n flex: 2,\n },\n { headerName: 'Version', field: 'version' },\n { headerName: 'Released at', field: 'released_at', flex: 2 },\n { headerName: 'Identifier', field: 'identifier' },\n ];\n\n return (\n <div\n className={Constants.GRID_THEME.QUARTZ.VALUE}\n style={{ height: '600px', width: '100%', overflow: 'auto' }}\n >\n <AgGridReact\n loading={loading}\n onGridReady={onGridReady}\n columnDefs={columnDefs}\n defaultColDef={defaultColDef}\n rowData={rowData}\n domLayout=\"normal\"\n suppressAutoSize\n />\n </div>\n );\n}\n\nRepoGridEl.propTypes = {\n fnApi: PropTypes.func.isRequired,\n};\n\nexport default RepoGridEl;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal } from 'react-bootstrap';\nimport RepoGridDs from '@components/repo/RepoGridDs';\nimport RepoGridSg from '@components/repo/RepoGridSg';\nimport RepoGridEl from '@components/repo/RepoGridEl';\n\nconst contentComponents = {\n Dataset: RepoGridDs,\n Segment: RepoGridSg,\n Element: RepoGridEl,\n};\n\nfunction RepoNewModal({ showModal, fnClose, fnCreate, content }) {\n const ContentComponent = contentComponents[content];\n if (!ContentComponent) return null;\n\n const title = `Generic ${content} Templates`;\n\n return (\n <Modal\n centered\n backdrop=\"static\"\n size=\"lg\"\n show={showModal}\n onHide={fnClose}\n dialogClassName=\"gu_modal-68w\"\n >\n <Modal.Header closeButton>\n <Modal.Title>{title}</Modal.Title>\n </Modal.Header>\n <Modal.Body style={{ overflow: 'auto' }}>\n <ContentComponent fnApi={fnCreate} />\n </Modal.Body>\n </Modal>\n );\n}\n\nRepoNewModal.propTypes = {\n showModal: PropTypes.bool.isRequired,\n content: PropTypes.string.isRequired,\n fnClose: PropTypes.func.isRequired,\n fnCreate: PropTypes.func.isRequired,\n};\n\nexport default RepoNewModal;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport LTooltip from '@components/shared/LTooltip';\nimport FIcons from '@components/icons/FIcons';\nimport RepoNewModal from '@components/repo/RepoNewModal';\nimport Constants from '@components/tools/Constants';\nimport ExternalManager from '@utils/extMgr';\nimport Response from '@utils/response';\nimport { notifyError } from '@utils/template/designer-message';\n\nfunction SyncBtn(props) {\n const { fnRefresh, genericType, fnCallback } = props;\n const [show, setShow] = useState(false);\n\n const handleShow = () => setShow(true);\n const handleClose = () => setShow(false);\n const handleCreate = async (params) => {\n try {\n const response = await ExternalManager.saveTemplate(genericType, {\n identifier: params.identifier,\n });\n if (response.notify.isSuccess) {\n fnRefresh();\n } else {\n fnCallback(new Response(response.notify, []));\n }\n } catch (error) {\n console.error('Error creating template:', error);\n fnCallback(\n new Response(notifyError(`Error creating template: ${error}`), []),\n );\n } finally {\n setShow(false);\n }\n };\n\n return (\n <>\n <LTooltip idf=\"tpl_view_hub\">\n <Button variant=\"primary\" onClick={handleShow}>\n {FIcons.faArrowsRotate}&nbsp;Fetch from LabIMotion Hub\n </Button>\n </LTooltip>\n <RepoNewModal\n content={genericType}\n fnClose={handleClose}\n fnCreate={handleCreate}\n showModal={show}\n />\n </>\n );\n}\n\nSyncBtn.propTypes = {\n fnRefresh: PropTypes.func.isRequired,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n fnCallback: PropTypes.func,\n};\n\nSyncBtn.defaultProps = { fnCallback: () => {} };\n\nexport default SyncBtn;\n","import React, { useEffect, useState, useRef, useCallback, useMemo } from 'react';\nimport {\n Button,\n ButtonToolbar,\n Tooltip,\n OverlayTrigger,\n Form,\n Row,\n Col,\n} from 'react-bootstrap';\nimport cloneDeep from 'lodash/cloneDeep';\nimport sortBy from 'lodash/sortBy';\nimport AttrNewBtn from '@components/designer/AttrNewBtn';\nimport GridToolbar from '@components/designer/GridToolbar';\nimport Constants from '@components/tools/Constants';\nimport GenGridEl from '@components/details/GenGridEl';\nimport GenGridSg from '@components/details/GenGridSg';\nimport GenGridDs from '@components/details/GenGridDs';\nimport getPageSizeForTheme from '@utils/grid';\nimport Template from '@components/designer/template/Template';\nimport AttrUploadBtn from '@components/designer/AttrUploadBtn';\nimport DocuConst from '@components/tools/DocuConst';\nimport FIcons from '@components/icons/FIcons';\nimport DesignerContext, { DesignerProvider } from '@components/designer/DesignerContext';\nimport SyncBtn from '@components/repo/SyncButton';\n\nconst ContentComponents = {\n [Constants.GENERIC_TYPES.ELEMENT]: 'Generic Elements Designer',\n [Constants.GENERIC_TYPES.SEGMENT]: 'Generic Segments Designer',\n [Constants.GENERIC_TYPES.DATASET]: 'Generic Datasets Designer',\n};\n\nconst FNLocation = (type) => {\n const text = ContentComponents[type];\n return (\n <div className=\"col-auto\">\n <span>You&apos;re in the </span>\n <span className=\"fw-bold\">{text}</span>\n </div>\n );\n};\n\nconst Designer = (_props) => {\n const {\n fnCopy,\n fnCreate,\n fnUpload,\n fnDelete,\n fnSubmit,\n fnActive,\n fnDownload,\n fnUpdate,\n fnRefresh,\n genericType,\n gridData = [],\n klasses,\n preview,\n refSource = { currentUser: {} },\n } = _props;\n const [theme, setTheme] = useState(Constants.GRID_THEME.QUARTZ.VALUE);\n const [data, setData] = useState(null);\n const [filterText, setFilterText] = useState('');\n const qfRef = useRef();\n const setAutoHeightRef = useRef();\n const clearSelectionRef = useRef();\n\n const sortedKlasses = useMemo(\n () => sortBy(klasses || [], ['label']),\n [klasses]\n );\n\n useEffect(() => {\n if (gridData.length > 0 && data) {\n const updatedData = gridData.find((e) => e.id === data.id);\n if (\n updatedData &&\n updatedData.properties_template?.uuid !== data.properties_release?.uuid\n ) {\n setData(cloneDeep(updatedData));\n }\n }\n }, [gridData]);\n\n const onDataSelected = (_data) => {\n if (_data) {\n const updatedData = cloneDeep(_data);\n setData(updatedData);\n }\n };\n\n const onFilterTextBoxChanged = useCallback(() => {\n setFilterText(qfRef.current.value);\n }, []);\n\n const onSetAutoHeight = useCallback((setAutoHeightFn) => {\n setAutoHeightRef.current = setAutoHeightFn;\n }, []);\n\n const onClearSelection = useCallback((clearSelectionFn) => {\n clearSelectionRef.current = clearSelectionFn;\n }, []);\n\n const handleFullListClick = useCallback(() => {\n // Reset data to initial state (this will clear the grid selection)\n setData(null);\n // Clear filter text\n setFilterText('');\n // Clear the filter input field\n if (qfRef.current) {\n qfRef.current.value = '';\n }\n // Clear grid selection\n if (clearSelectionRef.current) {\n clearSelectionRef.current();\n }\n // Set grid height to full (80vh)\n if (setAutoHeightRef.current) {\n setAutoHeightRef.current();\n }\n }, []);\n\n const genGrid = () => {\n switch (genericType) {\n case Constants.GENERIC_TYPES.ELEMENT:\n return (\n <GenGridEl\n fnCopyKlass={fnCopy}\n fnDeActivateKlass={fnActive}\n fnDownloadKlass={fnDownload}\n fnDeleteKlass={fnDelete}\n fnEditKlass={fnUpdate}\n fnShowProp={onDataSelected}\n // fnShowPropJson={() => {}}\n gridData={gridData}\n pageSize={getPageSizeForTheme(theme)}\n theme={theme}\n rowSelected={data !== null}\n filterText={filterText}\n onSetAutoHeight={onSetAutoHeight}\n onClearSelection={onClearSelection}\n />\n );\n case Constants.GENERIC_TYPES.SEGMENT:\n return (\n <GenGridSg\n fnCopyKlass={fnCopy}\n fnDeActivateKlass={fnActive}\n fnDownloadKlass={fnDownload}\n fnDeleteKlass={fnDelete}\n fnEditKlass={fnUpdate}\n fnShowProp={onDataSelected}\n // fnShowPropJson={() => {}}\n gridData={gridData}\n pageSize={getPageSizeForTheme(theme)}\n theme={theme}\n rowSelected={data !== null}\n filterText={filterText}\n onSetAutoHeight={onSetAutoHeight}\n onClearSelection={onClearSelection}\n />\n );\n case Constants.GENERIC_TYPES.DATASET:\n return (\n <GenGridDs\n fnCopyKlass={fnCopy}\n fnDeActivateKlass={fnActive}\n fnDownloadKlass={fnDownload}\n fnEditKlass={fnUpdate}\n fnShowProp={onDataSelected}\n // fnShowPropJson={() => {}}\n gridData={gridData}\n pageSize={getPageSizeForTheme(theme)}\n theme={theme}\n rowSelected={data !== null}\n filterText={filterText}\n onSetAutoHeight={onSetAutoHeight}\n onClearSelection={onClearSelection}\n />\n );\n default:\n return <>Undefined Data.</>;\n }\n };\n\n return (\n <DesignerProvider value={{ klasses: sortedKlasses, genericType }}>\n <Row className=\"mb-2 align-items-center\">\n <Col xs=\"auto\">\n <ButtonToolbar style={{ display: 'inline-block' }}>\n <SyncBtn fnRefresh={fnRefresh} genericType={genericType} />\n <GridToolbar\n btnNew={\n <AttrNewBtn\n fnCreate={fnCreate}\n genericType={genericType}\n />\n }\n btnUpload={\n <AttrUploadBtn fnUpload={fnUpload} genericType={genericType} />\n }\n fnClickLarge={() => setTheme(Constants.GRID_THEME.QUARTZ.VALUE)}\n fnClickSmall={() => setTheme(Constants.GRID_THEME.BALHAM.VALUE)}\n >\n <Button\n variant=\"outline-secondary\"\n onClick={handleFullListClick}\n className=\"gu-btn-outline-secondary\"\n >\n Full List\n </Button>\n </GridToolbar>\n </ButtonToolbar>\n </Col>\n <Col>\n <div className=\"d-flex gap-2\">\n <div className=\"position-relative flex-grow-1\">\n <span className=\"position-absolute top-50 translate-middle-y ms-2 text-muted\">\n {FIcons.faMagnifyingGlass}\n </span>\n <Form.Control\n ref={qfRef}\n type=\"text\"\n placeholder=\"Enter text to filter...\"\n style={{ paddingLeft: '2rem' }}\n onChange={onFilterTextBoxChanged}\n />\n </div>\n <OverlayTrigger\n delayShow={1000}\n placement=\"top\"\n overlay={\n <Tooltip id=\"_field_docsite_tooltip\">Learn more</Tooltip>\n }\n >\n <Button\n variant=\"link\"\n href={[DocuConst.DOC_SITE, 'designer'].join('/')}\n target=\"_blank\"\n onClick={(e) => e.stopPropagation()}\n >\n {FIcons.faCircleQuestion}\n </Button>\n </OverlayTrigger>\n </div>\n </Col>\n {FNLocation(genericType)}\n </Row>\n {genGrid()}\n {data ? (\n <Template\n data={data}\n fnSubmit={fnSubmit}\n // fnDelete={fnDelete}\n // fnDerive={innerAction}\n // fnDerive={fnDerive}\n // fnSaveFlow={fnSaveFlow}\n fnUpdate={fnUpdate}\n genericType={genericType}\n preview={preview}\n refSource={refSource}\n />\n ) : (\n <></>\n )}\n </DesignerProvider>\n );\n};\n\nexport default Designer;\n","import React, {\n forwardRef,\n useImperativeHandle,\n useState,\n useRef,\n useEffect,\n} from 'react';\nimport Col from 'react-bootstrap/Col';\nimport Row from 'react-bootstrap/Row';\nimport Badge from 'react-bootstrap/Badge';\nimport sortBy from 'lodash/sortBy';\nimport { isLayerVisible } from 'generic-ui-core';\nimport FIcons from '@components/icons/FIcons';\nimport DragLayer from '@components/dnd/DragLayer';\nimport DnD from '@components/dnd/DnD';\nimport { bgColor } from '@components/tools/format-utils';\nimport { LHText } from '@components/shared/LCom';\nimport {\n defaultLayersContent,\n definedLayerHeader,\n} from '@components/shared/arrangeUtils';\nimport { reorderPositions } from '@utils/template/sorting-handler';\n\nconst ArrangeContent = forwardRef(({ element }, ref) => {\n const layers = element?.properties?.layers || {};\n\n const initialMetadata = element?.metadata || { groups: [], restrict: {} };\n\n const [newLayers, setNewLayers] = useState(layers);\n const [newMetadata, setNewMetadata] = useState(initialMetadata);\n const scrollableContainerRef = useRef(null);\n\n // Initialize positions on mount\n useEffect(() => {\n const reordered = reorderPositions(layers, initialMetadata);\n setNewLayers(reordered.layers);\n setNewMetadata(reordered.metadata);\n }, []); // Empty deps - only run on mount\n\n // Expose method to get current state\n useImperativeHandle(ref, () => ({\n getUpdates: () => ({\n layers: newLayers,\n metadata: newMetadata,\n }),\n }));\n\n if (!element?.properties?.layers) return defaultLayersContent;\n\n const layerValues = Object.values(layers);\n if (layerValues.length === 0) return defaultLayersContent;\n\n // Organize layers by groups - creates a mixed list of groups and ungrouped layers\n const organizeLayersByGroups = (layersObj, metadata) => {\n const groups = metadata.groups || [];\n const allLayers = Object.values(layersObj);\n\n // Get layers that belong to groups\n const groupedLayersSet = new Set();\n groups.forEach((group) => {\n group.layers?.forEach((layerKey) => groupedLayersSet.add(layerKey));\n });\n\n // Get ungrouped layers\n const ungroupedLayers = allLayers.filter(\n (layer) => !groupedLayersSet.has(layer.key),\n );\n\n // Create a mixed array of groups and ungrouped layers, sorted by position\n const items = [\n ...groups.map((group) => ({\n type: 'group',\n data: group,\n position: group.position || 0,\n })),\n ...ungroupedLayers.map((layer) => ({\n type: 'layer',\n data: layer,\n position: layer.position || 0,\n })),\n ];\n\n const sortedItems = sortBy(items, 'position');\n\n return {\n items: sortedItems,\n allLayers: layersObj,\n };\n };\n\n const currentOrganized = organizeLayersByGroups(layers, initialMetadata);\n const newOrganized = organizeLayersByGroups(newLayers, newMetadata);\n\n // Handle layer move within the same group (for grouped layers only)\n const handleLayerMove = (sourceKey, targetKey, groupId) => {\n // For grouped layers, reorder within the group's layers array\n // DO NOT change position values to avoid affecting top-level sorting\n const updatedGroups = [...(newMetadata.groups || [])];\n const groupIndex = updatedGroups.findIndex((g) => g.id === groupId);\n\n if (groupIndex === -1) return;\n\n const group = updatedGroups[groupIndex];\n const layersArray = group.layers || [];\n\n const sourceIndex = layersArray.indexOf(sourceKey);\n const targetIndex = layersArray.indexOf(targetKey);\n\n if (sourceIndex === -1 || targetIndex === -1) return;\n\n // Reorder the array\n const newLayersArray = [...layersArray];\n const [removed] = newLayersArray.splice(sourceIndex, 1);\n newLayersArray.splice(targetIndex, 0, removed);\n\n updatedGroups[groupIndex] = {\n ...group,\n layers: newLayersArray,\n };\n\n setNewMetadata({\n ...newMetadata,\n groups: updatedGroups,\n });\n };\n\n // Handle top-level item move (groups and ungrouped layers)\n const handleTopLevelMove = (sourceKeyOrId, targetKeyOrId) => {\n // Find the source and target items from newOrganized\n const sourceIndex = newOrganized.items.findIndex(\n (item) =>\n (item.type === 'group' && item.data.id === sourceKeyOrId) ||\n (item.type === 'layer' && item.data.key === sourceKeyOrId),\n );\n\n const targetIndex = newOrganized.items.findIndex(\n (item) =>\n (item.type === 'group' && item.data.id === targetKeyOrId) ||\n (item.type === 'layer' && item.data.key === targetKeyOrId),\n );\n\n if (sourceIndex === -1 || targetIndex === -1) return;\n\n // Reorder the items array by moving source to target position\n const reorderedItems = [...newOrganized.items];\n const [movedItem] = reorderedItems.splice(sourceIndex, 1);\n reorderedItems.splice(targetIndex, 0, movedItem);\n\n // Reassign sequential positions to all items based on new order\n const updatedGroups = [...(newMetadata.groups || [])];\n const updatedLayers = { ...newLayers };\n\n reorderedItems.forEach((item, index) => {\n if (item.type === 'group') {\n const groupIndex = updatedGroups.findIndex(\n (g) => g.id === item.data.id,\n );\n if (groupIndex !== -1) {\n updatedGroups[groupIndex] = {\n ...updatedGroups[groupIndex],\n position: index,\n };\n // Update grouped layers to have the same position as their group\n updatedGroups[groupIndex].layers?.forEach((layerKey) => {\n if (updatedLayers[layerKey]) {\n updatedLayers[layerKey] = {\n ...updatedLayers[layerKey],\n position: index,\n };\n }\n });\n }\n } else if (item.type === 'layer') {\n const layerKey = item.data.key;\n if (updatedLayers[layerKey]) {\n updatedLayers[layerKey] = {\n ...updatedLayers[layerKey],\n position: index,\n };\n }\n }\n });\n\n // Update both states\n setNewMetadata({\n ...newMetadata,\n groups: updatedGroups,\n });\n setNewLayers(updatedLayers);\n };\n\n const block = (obj, isNew = false, groupId = null) => {\n const {\n label,\n color,\n style = 'panel_generic_heading',\n wf,\n key,\n fields,\n } = obj;\n const isVisible = isLayerVisible(obj, isNew ? newLayers : layers);\n if (!isVisible) return null;\n\n const content = (\n <div\n className={`${bgColor(color)} p-3 rounded`}\n style={{ userSelect: 'none' }}\n >\n {definedLayerHeader(style, label, key, fields, wf)}\n </div>\n );\n\n // If it's current view or workflow layer, return non-draggable content\n if ((!isNew && !groupId) || wf) {\n return (\n <div\n key={`${key}-${isNew ? 'new' : 'current'}`}\n className=\"w-100 p-2 m-2\"\n >\n <div>{content}</div>\n </div>\n );\n }\n\n // For grouped layers, only allow DnD within the same group\n if (groupId) {\n return (\n <DnD\n key={`${key}-${isNew ? 'new' : 'current'}`}\n type={`layer-in-group-${groupId}`}\n layer={obj}\n field=\"position\"\n handleMove={(sourceKey, targetKey) =>\n handleLayerMove(sourceKey, targetKey, groupId)\n }\n canDrag\n >\n {content}\n </DnD>\n );\n }\n\n // For ungrouped layers at top level, use top-level type\n return (\n <DnD\n key={`${key}-${isNew ? 'new' : 'current'}`}\n type=\"top-level-item\"\n layer={{ type: 'layer', key, label, position: obj.position }}\n field=\"position\"\n handleMove={(sourceKey, targetKey) =>\n handleTopLevelMove(sourceKey, targetKey)\n }\n canDrag\n >\n {content}\n </DnD>\n );\n };\n\n // Render individual layer block\n const renderLayer = (layer, isNew = false, groupId = null) =>\n block(layer, isNew, groupId);\n\n // Render group with its layers\n const renderGroup = (group, isNew = false) => {\n const groupLayers =\n group.layers\n ?.map(\n (layerKey) =>\n (isNew ? newOrganized : currentOrganized).allLayers[layerKey],\n )\n .filter(Boolean) || [];\n\n const groupContent = (\n <div\n className=\"border border-2 border-secondary rounded p-2 mb-2\"\n key={`group-${group.id}-${isNew ? 'new' : 'current'}`}\n style={{ userSelect: 'none' }}\n >\n <div className=\"d-flex align-items-center mb-2\">\n <Badge bg=\"secondary\" className=\"me-2\">\n {FIcons.faLayerGroup}\n </Badge>\n <strong>{group.label}</strong>\n {/* <span className=\"ms-auto text-muted small\">\n (pos: {group.position})\n </span> */}\n </div>\n <div>\n {groupLayers.map((layer) => renderLayer(layer, isNew, group.id))}\n {groupLayers.length === 0 && (\n <div className=\"text-muted fst-italic\">No layers in this group</div>\n )}\n </div>\n </div>\n );\n\n if (!isNew) {\n return (\n <div key={`group-${group.id}-current`} className=\"w-100 p-2 m-2\">\n {groupContent}\n </div>\n );\n }\n\n // Groups are draggable at top level\n return (\n <DnD\n key={`group-${group.id}-new`}\n type=\"top-level-item\"\n layer={{\n type: 'group',\n id: group.id,\n label: group.label,\n key: group.id,\n position: group.position,\n }}\n field=\"position\"\n handleMove={(sourceKey, targetKey) =>\n handleTopLevelMove(sourceKey, targetKey)\n }\n canDrag\n >\n {groupContent}\n </DnD>\n );\n };\n\n // Render current arrangement - mixed list of groups and layers\n const renderCurrentArrangement = () => {\n const { items } = currentOrganized;\n\n return (\n <>\n {items.map((item) => {\n if (item.type === 'group') {\n return renderGroup(item.data, false);\n }\n return renderLayer(item.data, false, null);\n })}\n </>\n );\n };\n\n // Render new arrangement - mixed list of groups and layers\n const renderNewArrangement = () => {\n const { items } = newOrganized;\n\n return (\n <>\n {items.map((item) => {\n if (item.type === 'group') {\n return renderGroup(item.data, true);\n }\n return renderLayer(item.data, true, null);\n })}\n </>\n );\n };\n\n return (\n <div className=\"d-flex flex-column h-100\">\n <Row className=\"mx-0 p-3\">\n <Col md={6}>\n <LHText title=\"Current Arrangement\">The existing arrangement</LHText>\n </Col>\n <Col md={6} className=\"text-primary\">\n <LHText title=\"New Arrangement\">\n Drag ({FIcons.faArrowsUpDownLeftRight}) groups and layers to\n reorder. Layers within groups can only be reordered within their\n group.\n </LHText>\n </Col>\n </Row>\n <div\n ref={scrollableContainerRef}\n className=\"flex-grow-1\"\n style={{\n overflowY: 'auto',\n overflowX: 'hidden',\n minHeight: 0,\n position: 'relative',\n }}\n >\n <Row className=\"mx-0 h-100\">\n <Col md={6} style={{ position: 'relative' }}>\n {renderCurrentArrangement()}\n </Col>\n <Col md={6} style={{ position: 'relative' }}>\n {renderNewArrangement()}\n </Col>\n </Row>\n </div>\n <DragLayer scrollableContainerRef={scrollableContainerRef} />\n </div>\n );\n});\n\nArrangeContent.displayName = 'ArrangeContent';\n\nexport default ArrangeContent;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport cloneDeep from 'lodash/cloneDeep';\nimport ArrangeContent from '@components/actions/ArrangeContent';\nimport ArrangeModal from '@components/actions/ArrangeModal';\nimport Constants from '@components/tools/Constants';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\n\nfunction ButtonArrange({ generic = {}, genericType, fnSave = () => {} }) {\n const [show, setShow] = useState(false);\n const arrangeContentRef = useRef(null);\n if (generic?.is_new) return null;\n if (\n Object.keys(generic.properties).length === 0 ||\n genericType === Constants.GENERIC_TYPES.DATASET\n )\n return null;\n\n const handleSave = (updatedData) => {\n const updates = cloneDeep(generic);\n updates.properties.layers = updatedData.layers;\n\n const groups = updatedData.metadata?.groups || [];\n if (groups.length === 0) {\n updates.metadata = {};\n } else {\n updates.metadata = {\n groups,\n restrict: updatedData.metadata?.restrict || {},\n };\n }\n updates.changed = true;\n fnSave(updates);\n };\n\n return (\n <>\n <LTooltip idf=\"arrange_layer\">\n <Button size=\"sm\" variant=\"primary\" onClick={() => setShow(true)}>\n {FIcons.faBars} Arrange\n </Button>\n </LTooltip>\n <ArrangeModal\n genericType={genericType}\n showProps={{ show, setShow }}\n onSave={handleSave}\n >\n <ArrangeContent\n ref={arrangeContentRef}\n element={cloneDeep(generic || {})}\n />\n </ArrangeModal>\n </>\n );\n}\n\nButtonArrange.propTypes = {\n generic: PropTypes.object,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n ]).isRequired,\n fnSave: PropTypes.func,\n};\nButtonArrange.defaultProps = {\n generic: {},\n fnSave: () => {},\n};\nexport default ButtonArrange;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState, useRef, useCallback, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactFlow, {\n ReactFlowProvider,\n addEdge,\n applyNodeChanges,\n applyEdgeChanges,\n Controls,\n ConnectionMode,\n MarkerType,\n} from 'reactflow';\nimport { useDrop } from 'react-dnd';\nimport sortBy from 'lodash/sortBy';\nimport DnDNodes from '@components/flow/DnDNodes';\nimport LayerNode from '@components/flow/LayerNode';\nimport {\n buildDefaultNode,\n decorateNodes,\n removeReactionLayers,\n removeGroupedLayers,\n} from '@utils/flow/build-flow-elements';\n\nconst nodeTypes = { selectorNode: LayerNode };\n\nconst getValidLayers = (properties, metadata) => {\n const layers = removeReactionLayers(properties?.layers || {});\n return removeGroupedLayers(layers, metadata);\n};\n\nconst Sidebar = ({ properties = {}, metadata = {}, nodes = [] }) => {\n if (!properties || Object.keys(properties).length < 1) {\n return null;\n }\n\n const newLayers = getValidLayers(properties, metadata);\n const sortedLayers = sortBy(newLayers, l => l.position) || [];\n const layersInFlow = nodes.map(n => n.data.lKey);\n const layersNotInFlow = sortedLayers.filter(\n l => !layersInFlow.includes(l.key)\n );\n\n return (\n <aside>\n <div className=\"description\">\n You can drag the nodes listed below to the left pane to design your\n flow.\n </div>\n <div className=\"description\">\n To remove the node from the pane, click on the node and press\n &apos;Del&apos; button.\n </div>\n <DnDNodes nodes={layersNotInFlow} />\n </aside>\n );\n};\n\nconst FlowDesigner = ({ element, fnSave }) => {\n const { properties, metadata } = element;\n const [flow] = useState(properties?.u?.draw || {});\n const reactFlowWrapper = useRef(null);\n const [reactFlowInstance, setReactFlowInstance] = useState(null);\n const [nodes, setNodes] = useState(\n decorateNodes(flow.nodes || [], Object.keys(getValidLayers(properties, metadata)))\n );\n const [edges, setEdges] = useState(flow.edges || []);\n const [changed, setChanged] = useState(false);\n\n const onSave = useCallback(() => {\n if (reactFlowInstance) {\n const draw = reactFlowInstance.toObject();\n fnSave({ draw });\n }\n }, [reactFlowInstance, fnSave]);\n\n useEffect(() => {\n if (changed) {\n onSave();\n setChanged(false);\n }\n }, [changed, onSave]);\n\n const onNodesChange = useCallback(changes => {\n setNodes(nds => applyNodeChanges(changes, nds));\n setChanged(true);\n }, []);\n\n const onEdgesChange = useCallback(changes => {\n setEdges(eds => applyEdgeChanges(changes, eds));\n setChanged(true);\n }, []);\n\n const onConnect = useCallback(params => {\n setEdges(eds =>\n addEdge(\n {\n ...params,\n animated: true,\n markerEnd: { type: MarkerType.ArrowClosed },\n label: 'next',\n },\n eds\n )\n );\n setChanged(true);\n }, []);\n\n const addNode = (node, monitor) => {\n if (reactFlowInstance) {\n const clientOffset = monitor.getClientOffset();\n const reactFlowBounds = reactFlowWrapper.current.getBoundingClientRect();\n let position = {\n x: clientOffset.x - reactFlowBounds.left,\n y: clientOffset.y - reactFlowBounds.top,\n };\n position = reactFlowInstance.project(position);\n const newNode = buildDefaultNode({ layer: node, position });\n setNodes(nds => nds.concat(newNode));\n }\n };\n\n const [, drop] = useDrop({\n accept: 'lim-dnd-type',\n drop: (item, monitor) => {\n addNode(item, monitor);\n },\n collect: monitor => {\n return { isOver: monitor.isOver(), canDrop: monitor.canDrop() };\n },\n });\n\n useEffect(() => {\n const initFlow = properties?.u?.draw || {};\n if (Object.keys(initFlow).length === 0) return;\n setNodes(\n decorateNodes(\n initFlow.nodes || [],\n Object.keys(getValidLayers(properties, metadata))\n )\n );\n setEdges(initFlow.edges || []);\n }, [properties]);\n\n return (\n <div ref={drop} className=\"dndflow\">\n <ReactFlowProvider>\n <div className=\"reactflow-wrapper\" ref={reactFlowWrapper}>\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onConnect={onConnect}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n onInit={setReactFlowInstance}\n connectionMode={ConnectionMode.Loose}\n nodeTypes={nodeTypes}\n deleteKeyCode={['Delete', 'Backspace']}\n fitView\n >\n <Controls />\n </ReactFlow>\n </div>\n <Sidebar properties={properties} metadata={metadata} nodes={nodes} />\n </ReactFlowProvider>\n </div>\n );\n};\n\nFlowDesigner.propTypes = {\n element: PropTypes.object.isRequired,\n fnSave: PropTypes.func.isRequired,\n};\n\nexport default FlowDesigner;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport Button from 'react-bootstrap/Button';\nimport cloneDeep from 'lodash/cloneDeep';\nimport Constants from '@components/tools/Constants';\nimport WorkflowModal from '@components/elements/WorkflowModal';\nimport FlowDesigner from '@components/flow/FlowDesigner';\nimport FIcons from '@components/icons/FIcons';\nimport { LWf } from '@components/shared/LCom';\nimport LTooltip from '@components/shared/LTooltip';\n\nfunction ButtonDraw({ generic = {}, genericType, fnSave = () => {} }) {\n const [show, setShow] = useState(false);\n if (generic?.is_new) return null;\n if (\n Object.keys(generic.properties).length === 0 ||\n genericType !== Constants.GENERIC_TYPES.ELEMENT\n )\n return null;\n\n const handleSave = ({ draw }) => {\n const updates = cloneDeep(generic || {});\n let { nodes } = draw;\n const drawCopy = { ...draw };\n if (updates.properties) {\n if (nodes.length === 0) {\n delete updates.properties.u;\n } else {\n nodes = nodes.map((node) => {\n if (node.type === Constants.NODE_TYPES.DEFAULT) {\n const { label, ...restData } = node.data;\n return { ...node, data: restData };\n }\n return node;\n });\n drawCopy.nodes = nodes;\n Object.assign(updates.properties, { u: { draw: drawCopy } });\n }\n updates.changed = true;\n fnSave(updates);\n }\n };\n\n return (\n <>\n <LTooltip idf=\"draw_flow\">\n <Button size=\"sm\" variant=\"primary\" onClick={() => setShow(true)}>\n <LWf wf /> {FIcons.faPaintbrush}&nbsp;Workflow (Custom)\n </Button>\n </LTooltip>\n <WorkflowModal genericType={genericType} showProps={{ show, setShow }}>\n <FlowDesigner element={cloneDeep(generic || {})} fnSave={handleSave} />\n </WorkflowModal>\n </>\n );\n}\n\nButtonDraw.propTypes = {\n generic: PropTypes.object,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n ]).isRequired,\n fnSave: PropTypes.func,\n};\nButtonDraw.defaultProps = {\n generic: {},\n fnSave: () => {},\n};\nexport default ButtonDraw;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport ReactFlow, {\n Controls,\n ReactFlowProvider,\n useNodesState,\n useEdgesState,\n} from 'reactflow';\nimport LayerNode from '@components/flow/LayerNode';\nimport { buildFlowElements } from '@utils/flow/build-flow-elements';\n\nconst nodeTypes = { selectorNode: LayerNode };\n\nconst FlowView = ({ properties, propertiesRelease }) => {\n const reactFlowWrapper = useRef(null);\n const [, setReactFlowInstance] = useState(null);\n const [elements, setElements] = useState(() =>\n buildFlowElements({ properties, propertiesRelease })\n );\n const [nodes, , onNodesChange] = useNodesState(elements.nodes);\n const [edges, , onEdgesChange] = useEdgesState(elements.edges || []);\n\n useEffect(() => {\n setElements(buildFlowElements({ properties, propertiesRelease }));\n }, [properties, propertiesRelease]);\n\n return (\n <div className=\"dndflow\">\n <ReactFlowProvider>\n <div className=\"reactflow-wrapper\" ref={reactFlowWrapper}>\n <ReactFlow\n nodes={nodes}\n edges={edges || []}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n onInit={setReactFlowInstance}\n nodeTypes={nodeTypes}\n fitView\n >\n <Controls />\n </ReactFlow>\n </div>\n </ReactFlowProvider>\n </div>\n );\n};\n\nFlowView.propTypes = {\n properties: PropTypes.object.isRequired,\n propertiesRelease: PropTypes.object.isRequired,\n};\nexport default FlowView;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport Button from 'react-bootstrap/Button';\nimport { LWf } from '@components/shared/LCom';\nimport LTooltip from '@components/shared/LTooltip';\nimport WorkflowModal from '@components/elements/WorkflowModal';\nimport FlowView from '@components/flow/FlowView';\n\nconst FlowViewerBtn = ({ generic }) => {\n const [show, setShow] = useState(false);\n const properties = generic.properties || {};\n const propertiesRelease = generic.properties_release || {};\n\n if (generic?.is_new) return null;\n if (Object.keys(propertiesRelease || {}).length < 1) return null;\n\n const hasFlow =\n (Object.keys(propertiesRelease.flow || {}).length > 0 &&\n propertiesRelease.flow?.elements?.length > 2) ||\n false;\n const hasFlowObject =\n (Object.keys(propertiesRelease.flowObject || {}).length > 0 &&\n propertiesRelease.flowObject?.nodes?.length > 2) ||\n false;\n\n if (!hasFlow && !hasFlowObject) return null;\n\n return (\n <>\n <LTooltip idf=\"fl_view\">\n <Button size=\"sm\" variant=\"primary\" onClick={() => setShow(true)}>\n <LWf wf /> Workflow (Predefined)\n </Button>\n </LTooltip>\n <WorkflowModal showProps={{ show, setShow }}>\n <FlowView\n properties={properties}\n propertiesRelease={propertiesRelease}\n />\n </WorkflowModal>\n </>\n );\n};\n\nFlowViewerBtn.propTypes = {\n generic: PropTypes.object.isRequired,\n};\n\nexport default FlowViewerBtn;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport Constants from '@components/tools/Constants';\nimport FIcons from '@components/icons/FIcons';\nimport TooltipButton from '@ui/common/TooltipButton';\nimport ExternalManager from '@utils/extMgr';\nimport { downloadResponseAsFile } from '@utils/fileUtils';\n\n/**\n * FileExportButton - A button component that exports a generic object as a file\n */\nconst FileExportButton = ({ generic, variant, size }) => {\n const [isLoading, setIsLoading] = useState(false);\n\n if (generic?.is_new) return null;\n if (\n ![\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ].includes(generic.properties?.klass)\n )\n return null;\n\n const handleExport = async () => {\n try {\n setIsLoading(true);\n\n const response = await ExternalManager.exportAsFile({\n id: generic.id,\n klass: generic.properties?.klass,\n export_format: 'docx',\n });\n\n await downloadResponseAsFile(response);\n } catch (error) {\n console.error('Error exporting file:', error);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <TooltipButton\n tooltipId=\"export_docx\"\n size={size}\n variant={variant}\n onClick={handleExport}\n disabled={isLoading}\n >\n {isLoading ? FIcons.faSpinner : FIcons.faFileWord} Export\n </TooltipButton>\n );\n};\n\nFileExportButton.propTypes = {\n generic: PropTypes.object,\n variant: PropTypes.string,\n size: PropTypes.string,\n};\n\nFileExportButton.defaultProps = {\n generic: {},\n variant: 'primary',\n size: 'sm',\n};\n\nexport default FileExportButton;\n","import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faSpinner } from '@fortawesome/free-solid-svg-icons';\n\nfunction LoadingSpinner() {\n return (\n <div>\n <FontAwesomeIcon icon={faSpinner} spin size=\"2x\" />\n <p>Loading...</p>\n </div>\n );\n}\n\nexport default LoadingSpinner;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal } from 'react-bootstrap';\nimport Constants from '@components/tools/Constants';\nimport PreviewFunctional from '@components/designer/preview/PreviewFunctional';\nimport LoadingSpinner from '@components/icons/LoadingSpinner';\n\nconst VersionModal = ({ show, fnClose, fnRetrieve, element, genericType }) => {\n const [loading, setLoading] = useState(false);\n\n if (\n ![\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ].includes(genericType)\n )\n return null;\n\n const handleClose = () => {\n fnClose();\n };\n\n const retrieveRevision = (revision, cb) => {\n fnRetrieve(revision, cb);\n };\n\n return (\n <Modal\n centered\n show={show}\n onHide={handleClose}\n fullscreen\n backdrop=\"static\"\n >\n <Modal.Header closeButton>\n <Modal.Title>Previous Versions</Modal.Title>\n </Modal.Header>\n <Modal.Body\n className=\"d-flex flex-column\"\n style={{ height: 'calc(100vh - 56px)' }}\n >\n {loading ? (\n <div className=\"d-flex justify-content-center align-items-center flex-grow-1\">\n <LoadingSpinner />\n </div>\n ) : (\n <div className=\"flex-grow-1 overflow-auto\">\n <PreviewFunctional\n genericType={genericType}\n data={element}\n fnRetrieve={retrieveRevision}\n src=\"properties\"\n />\n </div>\n )}\n </Modal.Body>\n </Modal>\n );\n};\n\nVersionModal.propTypes = {\n show: PropTypes.bool.isRequired,\n fnClose: PropTypes.func.isRequired,\n fnRetrieve: PropTypes.func,\n element: PropTypes.object,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n};\n\nVersionModal.defaultProps = { element: {}, fnRetrieve: () => {} };\n\nexport default VersionModal;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { v4 as uuid } from 'uuid';\nimport { Button, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport Constants from '@components/tools/Constants';\nimport VersionModal from '@components/designer/preview/VersionModal';\nimport FIcons from '@components/icons/FIcons';\n\nconst VisionListBtn = ({ generic, genericType, fnRetrieve }) => {\n const [show, setShow] = useState(false);\n\n if (\n ![\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ].includes(genericType)\n )\n return null;\n\n if (generic?.is_new)\n return (\n <Button onClick={() => {}} size=\"sm\" variant=\"primary\" disabled>\n {FIcons.faClockRotateLeft}&nbsp;No Revision\n </Button>\n );\n\n const handleRetrieve = (revision, cb) => {\n setShow(false);\n fnRetrieve(revision, cb);\n };\n\n return (\n <>\n <OverlayTrigger\n delayShow={1000}\n placement=\"top\"\n overlay={<Tooltip id={uuid()}>View the revisions</Tooltip>}\n >\n <Button onClick={() => setShow(!show)} size=\"sm\" variant=\"primary\">\n {FIcons.faClockRotateLeft}&nbsp;Revision\n </Button>\n </OverlayTrigger>\n {show && (\n <VersionModal\n fnRetrieve={handleRetrieve}\n show={show || false}\n fnClose={() => setShow(false)}\n element={generic}\n genericType={genericType}\n />\n )}\n </>\n );\n};\n\nVisionListBtn.propTypes = {\n generic: PropTypes.object.isRequired,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n fnRetrieve: PropTypes.func,\n};\n\nVisionListBtn.defaultProps = { fnRetrieve: () => {} };\n\nexport default VisionListBtn;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport cloneDeep from 'lodash/cloneDeep';\nimport sortBy from 'lodash/sortBy';\nimport { orgLayerObject } from 'generic-ui-core';\nimport { importReaction, remodel } from '@utils/template/remodel-handler';\nimport { reorderPositions } from '@utils/template/sorting-handler';\nimport FIcons from '@components/icons/FIcons';\nimport LTooltip from '@components/shared/LTooltip';\n\n// current generic value, new klass value\nfunction ButtonReload(props) {\n const { klass, generic, fnReload } = props;\n if (\n generic &&\n (typeof generic.klass_uuid === 'undefined' ||\n generic.klass_uuid === klass.uuid ||\n generic.is_new)\n ) {\n return null;\n }\n\n const handleReload = () => {\n const original = cloneDeep(generic);\n let outGeneric = generic;\n const output = remodel(generic, klass);\n if (output[1]) {\n outGeneric.properties = output[1];\n outGeneric.properties_release = klass.properties_release;\n outGeneric.metadata = klass.metadata || {};\n outGeneric.changed = true;\n\n // Import reaction layers from original if they exist\n const importResult = importReaction(original, outGeneric);\n if (importResult[0]) {\n outGeneric = importResult[1];\n\n // Sort layers (NEW template layers + imported reactions) by position and wf_position\n const sortedLayers = sortBy(\n Object.values(outGeneric.properties.layers),\n ['position', 'wf_position'],\n );\n\n // Convert array back to object and reorder positions considering NEW template's groups\n const layersObj = orgLayerObject(sortedLayers);\n const reordered = reorderPositions(layersObj, outGeneric.metadata);\n\n outGeneric.properties.layers = reordered.layers;\n outGeneric.metadata = reordered.metadata;\n }\n } else {\n outGeneric = output[1];\n }\n fnReload(outGeneric);\n };\n\n return (\n <LTooltip idf=\"reload_temp\">\n <Button size=\"sm\" variant=\"primary\" onClick={() => handleReload()}>\n {FIcons.faArrowsRotate} Reload\n </Button>\n </LTooltip>\n );\n}\n\nButtonReload.propTypes = {\n klass: PropTypes.object,\n generic: PropTypes.object,\n fnReload: PropTypes.func,\n};\nButtonReload.defaultProps = {\n klass: {},\n generic: {},\n fnReload: () => {},\n};\n\nexport default ButtonReload;\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport Button from 'react-bootstrap/Button';\nimport ButtonToolbar from 'react-bootstrap/ButtonToolbar';\nimport Constants from '@components/tools/Constants';\nimport ButtonArrange from '@components/actions/ButtonArrange';\nimport ButtonDraw from '@components/actions/ButtonDraw';\nimport FlowViewerBtn from '@components/flow/FlowViewerBtn';\nimport FileExportButton from '@ui/common/FileExportButton';\nimport VersionListBtn from '@components/designer/preview/VersionListBtn';\n// import SourceBtn from '@components/fields/SourceBtn';\nimport ButtonReload from '@components/fields/ButtonReload';\nimport FIcons from '@components/icons/FIcons';\nimport { editable } from '@utils/pureUtils';\nimport { useGenUIContext } from '@components/details/GenUIContext';\n\nconst LToolbar = ({\n generic,\n genericType,\n klass,\n fnReload,\n fnRetrieve,\n onExpandAll,\n editMode,\n}) => {\n const { showOverview, toggleOverview, isProviderPresent } = useGenUIContext();\n const [isExpanded, setIsExpanded] = useState(false);\n\n const handleExpandToggle = () => {\n const newExpandState = !isExpanded;\n setIsExpanded(newExpandState);\n onExpandAll(newExpandState);\n };\n\n if (\n ![\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ].includes(genericType)\n )\n return null;\n\n const canEdit = editable(editMode, true);\n\n if (genericType === Constants.GENERIC_TYPES.DATASET) {\n return canEdit ? (\n <ButtonToolbar className=\"p-1 gap-1\">\n <ButtonReload klass={klass} generic={generic} fnReload={fnReload} />\n </ButtonToolbar>\n ) : null;\n }\n\n return (\n <ButtonToolbar className=\"p-1 gap-1 d-flex\">\n {isProviderPresent && (\n <Button\n variant=\"primary\"\n size=\"sm\"\n onClick={toggleOverview}\n title={showOverview ? 'Hide Overview Map' : 'Show Overview Map'}\n >\n {FIcons.faChartBar}{' '}\n {showOverview ? 'Hide Overview' : 'Show Overview'}\n </Button>\n )}\n <Button\n variant=\"primary\"\n size=\"sm\"\n onClick={handleExpandToggle}\n title={isExpanded ? 'Collapse all Layers' : 'Expand all Layers'}\n style={{ minWidth: '80px' }}\n >\n {isExpanded ? FIcons.faAnglesUp : FIcons.faAnglesDown}{' '}\n {isExpanded ? 'Collapse' : 'Expand'}\n </Button>\n {canEdit && (\n <ButtonArrange\n generic={generic}\n genericType={genericType}\n fnSave={fnReload}\n />\n )}\n {Constants.GENERIC_TYPES.ELEMENT && canEdit && (\n <ButtonDraw\n generic={generic}\n genericType={genericType}\n fnSave={fnReload}\n />\n )}\n {canEdit && <FlowViewerBtn generic={generic} />}\n <FileExportButton generic={generic} />\n <VersionListBtn\n generic={generic}\n fnRetrieve={fnRetrieve}\n genericType={genericType}\n />\n {canEdit && (\n <ButtonReload klass={klass} generic={generic} fnReload={fnReload} />\n )}\n {/* <SourceBtn generic={generic} fnRetrieve={fnRetrieve} /> */}\n </ButtonToolbar>\n );\n};\n\nLToolbar.propTypes = {\n generic: PropTypes.object.isRequired,\n genericType: PropTypes.oneOf([\n Constants.GENERIC_TYPES.ELEMENT,\n Constants.GENERIC_TYPES.SEGMENT,\n Constants.GENERIC_TYPES.DATASET,\n ]).isRequired,\n klass: PropTypes.object.isRequired,\n fnReload: PropTypes.func,\n fnRetrieve: PropTypes.func,\n onExpandAll: PropTypes.func,\n editMode: PropTypes.bool,\n};\n\nLToolbar.defaultProps = {\n fnReload: () => {},\n fnRetrieve: () => {},\n onExpandAll: () => {},\n editMode: true,\n};\n\nexport default LToolbar;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Card, Modal } from 'react-bootstrap';\nimport Draggable from 'react-draggable';\nimport FlowView from '@components/flow/FlowView';\nimport FIcons from '@components/icons/FIcons';\n\nconst FlowViewerModal = (props) => {\n const { show, data, fnHide } = props;\n if (!show) return null;\n const {\n properties_release: propertiesRelease,\n properties,\n shortLabel,\n flowType,\n } = data;\n if (Object.keys(propertiesRelease || {}).length < 1) return null;\n\n const hasFlow =\n (Object.keys(propertiesRelease.flow || {}).length > 0 &&\n propertiesRelease.flow?.elements?.length > 2) ||\n false;\n const hasFlowObject =\n (Object.keys(propertiesRelease.flowObject || {}).length > 0 &&\n propertiesRelease.flowObject?.nodes?.length > 2) ||\n false;\n\n if (!hasFlow && !hasFlowObject) {\n return (\n <Modal centered show={show} size=\"sm\" onHide={fnHide}>\n <Modal.Header closeButton>\n <Modal.Title>{`${shortLabel} workflow`}</Modal.Title>\n </Modal.Header>\n <Modal.Body>No defined workflow</Modal.Body>\n </Modal>\n );\n }\n\n return (\n <Draggable handle=\".layer_header\" bounds=\"body\">\n <div className=\"flow_view_draggable\">\n <Card variant=\"info\">\n <Card.Header className=\"layer_header\">\n {`${shortLabel} workflow`}\n <Button\n size=\"sm\"\n variant=\"danger\"\n className=\"gu_button_right\"\n onClick={fnHide}\n >\n {FIcons.faTimes}\n </Button>\n </Card.Header>\n <Card.Body>\n <div className=\"body_bg\">\n <div className=\"body_canvas\">\n <FlowView\n properties={properties}\n propertiesRelease={propertiesRelease}\n flowType={flowType}\n />\n </div>\n </div>\n </Card.Body>\n </Card>\n </div>\n </Draggable>\n );\n};\n\nFlowViewerModal.propTypes = {\n show: PropTypes.bool.isRequired,\n data: PropTypes.shape({\n properties_release: PropTypes.object,\n properties: PropTypes.object,\n shortLabel: PropTypes.string,\n flowType: PropTypes.string,\n }).isRequired,\n fnHide: PropTypes.func.isRequired,\n};\n\nexport default FlowViewerModal;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport DnDFlow from '@components/flow/DnDFlow';\n\nconst Workflow = props => {\n const { element, fnSaveFlow } = props;\n if (Object.keys(element).length < 1) return null;\n return <DnDFlow element={element} fnSave={fnSaveFlow} />;\n};\n\nWorkflow.propTypes = {\n element: PropTypes.object.isRequired,\n fnSaveFlow: PropTypes.func.isRequired,\n};\n\nexport default Workflow;\n","import cloneDeep from 'lodash/cloneDeep';\nimport Constants from '@components/tools/Constants';\n\n/**\n * Factory function to create a Generic Dataset class with injected dependency\n */\nexport function createDataset(Element) {\n return class GenDataset extends Element {\n static buildEmpty(klass, containerId) {\n const metadata = klass && klass.metadata ? cloneDeep(klass.metadata) : {};\n const template =\n klass && klass.properties_release\n ? cloneDeep(klass.properties_release)\n : {};\n return new GenDataset({\n dataset_klass_id: this.dataset_klass_id || (klass && klass.id),\n element_type: Constants.MODEL_TYPES.CONTAINER,\n element_id: containerId,\n metadata,\n properties: template,\n properties_release: template,\n klass_ols: klass?.ols_term_id,\n klass_label: klass?.label,\n changed: false,\n });\n }\n\n serialize() {\n return super.serialize({\n dataset_klass_id: this.dataset_klass_id,\n element_type: Constants.MODEL_TYPES.CONTAINER,\n element_id: this.element_id,\n metadata: this.metadata,\n properties: this.properties,\n properties_release: this.properties_release,\n });\n }\n\n get datasetKlassId() {\n return this.dataset_klass_id;\n }\n\n set datasetKlassId(datasetKlassId) {\n this.dataset_klass_id = datasetKlassId;\n }\n\n get klassOls() {\n return this.klass_ols;\n }\n\n set klassOls(klassOls) {\n this.klass_ols = klassOls;\n }\n\n get klassLabel() {\n return this.klass_label;\n }\n\n set klassLabel(klassLabel) {\n this.klass_label = klassLabel;\n }\n };\n}\n\nexport default createDataset;\n","/* eslint-disable no-underscore-dangle */\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEmpty from 'lodash/isEmpty';\nimport { resetProperties, showProperties, FieldTypes } from 'generic-ui-core';\nimport Constants from '@components/tools/Constants';\nimport { buildInitWF } from '@components/tools/orten';\nimport { organizeLayersForDisplay } from '@utils/template/group-handler';\nimport {\n isFieldEffectivelyVisible,\n isItemEffectivelyVisible,\n} from '@utils/template/visibility-handler';\n\n/**\n * Factory function to create a Generic Element class with injected dependencies\n */\nexport function createElement(Element, Container, Segment) {\n return class GenElement extends Element {\n static buildEmpty(collectionId, klass, currentUser) {\n const metadata = klass && klass.metadata ? cloneDeep(klass.metadata) : {};\n const template =\n klass && klass.properties_release\n ? cloneDeep(klass.properties_release)\n : {};\n return new GenElement({\n collection_id: collectionId,\n type: klass.name,\n element_klass_id: this.element_klass_id || (klass && klass.id),\n short_label: GenElement.buildNewShortLabel(klass, currentUser),\n name: `New ${klass.label}`,\n container: Container.init(),\n metadata,\n properties: buildInitWF(template),\n properties_release: template,\n element_klass: klass,\n can_copy: false,\n attachments: [],\n files: [],\n segments: [],\n wfLayers: template,\n });\n }\n\n serialize() {\n return super.serialize({\n name: this.name,\n can_copy: true,\n klassType: Constants.MODEL_TYPES.GENERICEL,\n element_klass: this.element_klass,\n element_klass_id: this.element_klass_id, // this._element_klass_id,\n metadata: this.metadata,\n properties: this.properties,\n properties_release: this.properties_release,\n container: this.container,\n attachments: this.attachments,\n files: this.files,\n user_labels: this.user_labels || [],\n segments: this.segments.map((s) => s.serialize()),\n });\n }\n\n analysesContainers() {\n const TYPE = 'analyses';\n if (this.container.children.length === 0) {\n const analyses = Container.buildEmpty();\n analyses.container_type = TYPE;\n this.container.children.push(analyses);\n }\n return this.container.children.filter(\n (el) => ~el.container_type.indexOf(TYPE),\n );\n }\n\n analysisContainers() {\n const TYPE = 'analysis';\n let target = [];\n this.analysesContainers().forEach((aec) => {\n const aics = aec.children.filter(\n (el) => ~el.container_type.indexOf(TYPE),\n );\n target = [...target, ...aics];\n });\n return target;\n }\n\n datasetContainers() {\n const TYPE = 'dataset';\n let target = [];\n this.analysisContainers().forEach((aic) => {\n const dts = aic.children.filter(\n (el) => ~el.container_type.indexOf(TYPE),\n );\n target = [...target, ...dts];\n });\n return target;\n }\n\n static buildNewShortLabel(klass, currentUser) {\n if (!currentUser) {\n return `new_${klass.label}`;\n }\n return `${currentUser.initials}-${klass.klass_prefix}${\n parseInt(currentUser.counters[klass.name] || 0, 10) + 1\n }`;\n }\n\n buildCopy(currentUser, params = {}) {\n const copy = super.buildCopy();\n const newEl = Object.assign(copy, params);\n newEl.short_label = GenElement.buildNewShortLabel(\n newEl.element_klass,\n currentUser,\n );\n newEl.container = Container.init();\n newEl.can_update = true;\n newEl.can_copy = false;\n return newEl;\n }\n\n static copyFromCollectionId(element, collectionId, currentUser) {\n const target = cloneDeep(element.properties);\n const params = {\n collection_id: collectionId,\n properties: resetProperties(target),\n };\n const copy = element.buildCopy(currentUser, params);\n copy.origin = { id: element.id, short_label: element.short_label };\n return copy;\n }\n\n get klassType() {\n return Constants.MODEL_TYPES.GENERICEL;\n }\n\n get name() {\n return this._name;\n }\n\n set name(name) {\n this._name = name;\n }\n\n get label() {\n return (this.element_klass && this.element_klass.label) || '';\n }\n\n get desc() {\n return (this.element_klass && this.element_klass.desc) || '';\n }\n\n get element_klass() {\n return this._element_klass;\n }\n\n set element_klass(klass) {\n this._element_klass = klass;\n }\n\n get klassName() {\n return this._klass_name;\n }\n\n set klassName(klassName) {\n this._klass_name = klassName;\n }\n\n get metadata() {\n return this._metadata;\n }\n\n set metadata(metadata) {\n this._metadata = metadata || {};\n }\n\n get properties() {\n return this._properties;\n }\n\n set properties(properties) {\n this._properties = properties;\n }\n\n get element_klass_id() {\n return this._element_klass_id;\n }\n\n set element_klass_id(elementKlassId) {\n this._element_klass_id = elementKlassId;\n }\n\n set segments(segments) {\n this._segments = (segments && segments.map((s) => new Segment(s))) || [];\n }\n\n get segments() {\n return this._segments || [];\n }\n\n set klass_uuid(klassUuid) {\n this._klass_uuid = klassUuid;\n }\n\n get klass_uuid() {\n return this._klass_uuid;\n }\n\n get uuid() {\n return this._uuid;\n }\n\n set uuid(uuid) {\n this._uuid = uuid;\n }\n\n title() {\n return `${this.short_label} ${this.name}`;\n }\n\n userLabels() {\n return this.user_labels;\n }\n\n setUserLabels(userLabels) {\n this.user_labels = userLabels;\n }\n\n get isPendingToSave() {\n return !isEmpty(this) && (this.isNew || this.changed);\n }\n\n isValidated() {\n const validName = !!(this.name && this.name.trim() !== '');\n if (!validName) return false;\n\n const layers = this.properties?.layers || {};\n const metadata = this.metadata || {};\n const groups = metadata.groups || [];\n const restrictions = metadata.restrict || {};\n\n // Get organized display items matching UI structure\n const displayItems = organizeLayersForDisplay(layers, groups);\n\n // Validate all display items\n for (const item of displayItems) {\n if (item.type === 'group') {\n const groupRestriction = restrictions[item.id];\n if (groupRestriction && groupRestriction.cond?.length > 0) {\n const [isVisible] = isItemEffectivelyVisible(groupRestriction, layers);\n if (!isVisible) continue;\n }\n\n for (const layerItem of item.layers) {\n const layer = layerItem.data;\n if (layer.cond_fields?.length > 0) {\n const [isVisible] = isItemEffectivelyVisible(layer, layers);\n if (!isVisible) continue;\n }\n\n if (\n !this.validateFields(\n layer.fields,\n layer,\n (f, l) => {\n const [visible] = isFieldEffectivelyVisible(f, l, layers);\n return visible;\n },\n )\n ) {\n return false;\n }\n }\n } else {\n const layer = item.data;\n if (layer.cond_fields?.length > 0) {\n const [isVisible] = isItemEffectivelyVisible(layer, layers);\n if (!isVisible) continue;\n }\n\n if (\n !this.validateFields(\n layer.fields,\n layer,\n (f, l) => {\n const [visible] = isFieldEffectivelyVisible(f, l, layers);\n return visible;\n },\n )\n ) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n validateFields(fields, layer, visibilityCheck) {\n for (const f of fields || []) {\n if (\n (f.required === true || f.required === 'true') &&\n [FieldTypes.F_TEXT, FieldTypes.F_INTEGER].includes(f.type)\n ) {\n // Only validate if field is effectively visible\n if (visibilityCheck(f, layer)) {\n const value = f.value;\n const isEmptyStr =\n value === null ||\n value === undefined ||\n value.toString().trim() === '';\n if (isEmptyStr) return false;\n }\n }\n }\n return true;\n }\n };\n}\n\nexport default createElement;\n","import cloneDeep from 'lodash/cloneDeep';\nimport { resetProperties } from 'generic-ui-core';\nimport Constants from '@components/tools/Constants';\nimport { buildInitWF } from '@components/tools/orten';\n\n/**\n * Factory function to create a Generic Segment class with injected dependency\n */\nexport function createSegment(Element) {\n return class GenSegment extends Element {\n /**\n * Creates an empty Segment instance from a class template\n */\n static buildEmpty(klass) {\n const metadata = klass && klass.metadata ? cloneDeep(klass.metadata) : {};\n const template =\n klass && klass.properties_release\n ? cloneDeep(klass.properties_release)\n : {};\n return new GenSegment({\n segment_klass_id: this.segment_klass_id || (klass && klass.id),\n metadata,\n properties: buildInitWF(template),\n select_options: template.select_options || {},\n segment_klass: klass,\n properties_release: template,\n files: [],\n wfLayers: template,\n });\n }\n\n /**\n * Creates copies of segments with reset properties\n */\n static buildCopy(segments) {\n const clonedSegments = cloneDeep(segments);\n clonedSegments.map((segmentData) => {\n // eslint-disable-next-line no-param-reassign\n segmentData.properties = resetProperties(segmentData.properties);\n return segmentData;\n });\n return clonedSegments;\n }\n\n serialize() {\n return super.serialize({\n klassType: Constants.MODEL_TYPES.SEGMENT,\n segment_klass: this.segment_klass,\n segment_klass_id: this.segment_klass_id,\n metadata: this.metadata,\n properties: this.properties,\n properties_release: this.properties_release,\n files: this.files,\n });\n }\n };\n}\n\nexport default createSegment;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal } from 'react-bootstrap';\n\nfunction GenericElCriteriaModal(props) {\n const Component = props.component;\n if (!props.show) return (<span />);\n return (\n <Modal\n centered\n dialogClassName=\"generic_criteria_modal\"\n animation={false}\n show={props.show}\n onHide={props.onHide}\n >\n <Modal.Header closeButton>\n <Modal.Title>\n {props.title}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n {Component}\n </Modal.Body>\n </Modal>\n );\n}\n\nGenericElCriteriaModal.propTypes = {\n show: PropTypes.bool,\n component: PropTypes.oneOfType([\n PropTypes.func,\n PropTypes.element\n ]),\n title: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.element\n ]),\n onHide: PropTypes.func,\n};\n\nGenericElCriteriaModal.defaultProps = {\n show: false,\n component: null,\n title: '',\n onHide: () => {}\n};\n\nexport default GenericElCriteriaModal;\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Row, Col } from 'react-bootstrap';\nimport GenInterface from '@components/details/GenInterface';\n\nconst SegmentCriteria = (props) => {\n const { segment, onChange } = props;\n if (!segment) return null;\n const title = (\n <Row key=\"criteria_init\">\n <Col md={12} style={{ fontWeight: 'bold', fontStyle: 'italic', fontSize: 'large' }}>\n {segment.label} ({segment.desc})\n </Col>\n </Row>\n );\n\n segment.properties = segment.properties_release;\n const layersLayout = (\n <GenInterface\n generic={segment}\n fnChange={onChange}\n extLayers={[]}\n genId={segment.id || 0}\n isPreview={false}\n isActiveWF\n isSearch\n fnNavi={() => {}}\n />\n );\n return (\n <div style={{ margin: '15px' }}>{title}{layersLayout}</div>\n );\n};\n\nSegmentCriteria.propTypes = { segment: PropTypes.object, onChange: PropTypes.func };\nSegmentCriteria.defaultProps = { segment: {}, onChange: () => {} };\n\nexport default SegmentCriteria;\n","import { FieldTypes, genUnit } from 'generic-ui-core';\nimport si from '@components/addon/metadata.json';\n\nfunction DatasetMetadata(dcs, idDt) {\n const metadata = {};\n const dc = dcs?.filter(e => idDt === e.id);\n\n if (dc?.length === 0 || !dc[0].dataset) {\n return metadata;\n }\n\n const { properties, klass_ols: klassOls } = dc[0].dataset;\n const siCheck = si?.[klassOls];\n\n if (!siCheck) {\n return metadata;\n }\n\n siCheck.forEach(sio => {\n const fio = properties.layers[sio.layer]?.fields.find(\n field => field.field === sio.field\n );\n if (fio) {\n switch (fio.type) {\n case FieldTypes.F_SYSTEM_DEFINED: {\n const label =\n genUnit(fio.option_layers, fio.value_system)?.label || '';\n metadata[sio.var] = `${fio.value} ${label}`;\n break;\n }\n case FieldTypes.F_TEXT:\n case FieldTypes.F_INTEGER:\n case FieldTypes.F_SELECT:\n metadata[sio.var] = fio.value;\n break;\n default:\n metadata[sio.var] = '';\n }\n }\n });\n return metadata;\n}\n\nexport default DatasetMetadata;\n","/* eslint-disable camelcase */\n/* eslint-disable react/forbid-prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Badge from 'react-bootstrap/Badge';\nimport Col from 'react-bootstrap/Col';\nimport Row from 'react-bootstrap/Row';\nimport cloneDeep from 'lodash/cloneDeep';\n// import LoadingActions from 'src/stores/alt/actions/LoadingActions';\nimport { downloadFile, FieldTypes } from 'generic-ui-core';\nimport ButtonTooltip from '@components/fields/ButtonTooltip';\nimport GenInterface from '@components/details/GenInterface';\nimport { responseExt } from '@utils/template/action-handler';\nimport { notifySuccess } from '@utils/template/designer-message';\nimport VersionBlock from '@components/designer/preview/VersionBlock';\nimport { buildString } from '@utils/pureUtils';\n\nexport default class Preview extends Component {\n constructor(props) {\n super(props);\n this.state = { revisions: [], compareUUID: 'current', fullScreen: false };\n this.compare = this.compare.bind(this);\n this.setRevision = this.setRevision.bind(this);\n this.delRevision = this.delRevision.bind(this);\n this.retrieveRevision = this.retrieveRevision.bind(this);\n this.handleChanged = this.handleChanged.bind(this);\n this.dlRevision = this.dlRevision.bind(this);\n this.setScreen = this.setScreen.bind(this);\n }\n\n componentDidMount() {\n const { revisions } = this.props;\n if (revisions) {\n this.setRevision(cloneDeep(revisions));\n }\n }\n\n componentDidUpdate(prevProps) {\n const { revisions } = this.props;\n if (revisions !== prevProps.revisions) {\n this.setRevision(cloneDeep(revisions));\n }\n }\n\n handleChanged(el) {\n const { compareUUID, revisions } = this.state;\n const { src } = this.props;\n let selected = (revisions || []).find(\n (r) => buildString([r.uuid, r.id]) === compareUUID\n );\n if (selected && selected[src]) {\n selected = el;\n this.setRevision(revisions);\n }\n }\n\n setRevision(revisions) {\n this.setState({ revisions });\n }\n\n setScreen(fullScreen) {\n this.setState({ fullScreen });\n }\n\n compare(params) {\n const { revisions } = this.props;\n this.setState({\n revisions: cloneDeep(revisions),\n compareUUID: buildString([params.uuid, params.id]),\n });\n }\n\n delRevision(params) {\n const { fnDelete } = this.props;\n fnDelete(params);\n }\n\n retrieveRevision(params) {\n const { fnRetrieve, revisions, src, data } = this.props;\n // LoadingActions.start();\n const deep = cloneDeep(revisions.find((r) => r.id === params.id));\n // fnRetrive(deep[src], () => LoadingActions.stop());\n if (src === 'properties_release') {\n data.properties_template = deep[src];\n fnRetrieve(responseExt(notifySuccess(), data, { active: 'w' }));\n } else {\n fnRetrieve(deep[src], () => {});\n }\n }\n\n dlRevision(params) {\n const { data, revisions } = this.props;\n const revision = revisions.find((r) => r.id === params.id);\n\n const exportData = cloneDeep(revision.properties_release);\n exportData.klass = revision.properties_release.klass;\n exportData.released_at = revision.released_at || '';\n exportData.metadata = revision.metadata || {};\n\n const href = `data:text/json;charset=utf-8,${encodeURIComponent(\n JSON.stringify(exportData)\n )}`;\n downloadFile({\n contents: href,\n name: `${exportData.klass}_${data.label}_${revision.uuid}.json`,\n });\n }\n\n render() {\n const { compareUUID, revisions, fullScreen } = this.state;\n if (revisions.length < 1) return null;\n const { data, src, canDL } = this.props;\n\n const options = [];\n const selected =\n (revisions || []).find(\n (r) => buildString([r.uuid, r.id]) === compareUUID\n ) || {};\n const selectOptions =\n (selected && selected[src] && selected[src].select_options) || {};\n\n if (selected.name) {\n options.push({\n generic: selected,\n type: FieldTypes.F_TEXT,\n isEditable: true,\n isRequire: false,\n field: 'name',\n });\n }\n\n selected[src] = selected[src] || {};\n selected[src].layers = selected[src].layers || {};\n if (src === 'properties') {\n selected.properties_release = { select_options: selectOptions };\n } else {\n selected.properties = selected.properties_release;\n }\n\n const layersLayout = (\n <GenInterface\n generic={selected || {}}\n fnChange={this.handleChanged}\n extLayers={options}\n genId={selected.uuid || 0}\n isPreview\n isActiveWF={false}\n />\n );\n\n const his = fullScreen ? null : (\n <Col md={4}>\n <b>Only show the latest 10 revisions.</b>\n {revisions.map((rev, idx) => (\n <VersionBlock\n key={buildString([rev.uuid, rev.id])}\n data={data}\n download={{ canDL, fnDownload: this.dlRevision }}\n idxSelect={`${idx}:${compareUUID}`}\n rev={rev}\n src={src}\n fnDelete={this.delRevision}\n fnRetrieve={this.retrieveRevision}\n fnView={this.compare}\n />\n ))}\n </Col>\n );\n\n const contentCol = fullScreen ? 12 : 8;\n const screenFa = fullScreen\n ? 'faDownLeftAndUpRightToCenter'\n : 'faUpRightAndDownLeftFromCenter';\n const idf = fullScreen ? 'scn_full_exit' : 'scn_full';\n return (\n <Row className=\"m-2\">\n {his}\n <Col md={contentCol}>\n <div style={{ margin: '10px 0px' }}>\n <div style={{ float: 'right' }}>\n <ButtonTooltip\n idf={idf}\n fnClick={this.setScreen}\n element={!fullScreen}\n fa={screenFa}\n place=\"left\"\n bs=\"default\"\n size=\"sm\"\n />\n </div>\n <Badge bg=\"warning\" text=\"dark\">\n Sketch Map: The data input here will not be saved.\n </Badge>\n </div>\n <div style={{ width: '100%', minHeight: '50vh' }}>{layersLayout}</div>\n </Col>\n </Row>\n );\n }\n}\n\nPreview.propTypes = {\n data: PropTypes.object,\n revisions: PropTypes.array,\n fnRetrieve: PropTypes.func,\n fnDelete: PropTypes.func,\n canDL: PropTypes.bool,\n src: PropTypes.oneOf(['properties_release', 'properties']),\n};\n\nPreview.defaultProps = {\n data: {},\n revisions: [],\n fnRetrieve: () => {},\n fnDelete: () => {},\n src: 'properties_release',\n canDL: false,\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Modal } from 'react-bootstrap';\nimport Preview from '@components/designer/preview/Preview';\n\nexport default class PreviewModal extends React.Component {\n constructor(props) {\n super(props);\n this.state = { revisions: [] };\n this.handleClose = this.handleClose.bind(this);\n this.setRevisions = this.setRevisions.bind(this);\n this.retrieveRevision = this.retrieveRevision.bind(this);\n this.delRevision = this.delRevision.bind(this);\n this.fetchRevisions = this.fetchRevisions.bind(this);\n }\n\n componentDidUpdate(prevProps) {\n const { element, showModal } = this.props;\n if (\n (showModal !== prevProps.showModal && showModal) ||\n element.id !== prevProps.element.id\n ) {\n this.fetchRevisions();\n }\n }\n\n setRevisions(revisions) {\n this.setState({ revisions });\n }\n\n fetchRevisions() {\n const { fetcher, fetcherFn, element } = this.props;\n fetcher[fetcherFn](element.id).then(result => {\n (result.revisions || []).map(r =>\n Object.assign(r, { released_at: r.created_at })\n );\n this.setState({ revisions: result.revisions });\n });\n }\n\n handleClose() {\n this.props.fnClose();\n }\n\n retrieveRevision(revision, cb) {\n this.props.fnRetrieve(revision, cb);\n }\n\n delRevision(revision) {\n this.props.fnDelete({ id: revision.id }, this.fetchRevisions);\n }\n\n render() {\n const { showModal } = this.props;\n const { revisions } = this.state;\n if (revisions.length < 1) return null;\n return (\n <Modal\n centered\n backdrop=\"static\"\n dialogClassName=\"importChemDrawModal\"\n show={showModal}\n onHide={() => this.handleClose()}\n >\n <Modal.Header closeButton>\n <Modal.Title>History</Modal.Title>\n </Modal.Header>\n <Modal.Body style={{ overflow: 'auto' }}>\n <div className=\"col-md-12\">\n <Preview\n revisions={revisions}\n fnRetrieve={this.retrieveRevision}\n fnDelete={this.delRevision}\n src=\"properties\"\n />\n </div>\n </Modal.Body>\n </Modal>\n );\n }\n}\n\nPreviewModal.propTypes = {\n showModal: PropTypes.bool.isRequired,\n fnClose: PropTypes.func.isRequired,\n fnRetrieve: PropTypes.func,\n element: PropTypes.object,\n fetcher: PropTypes.func.isRequired,\n fetcherFn: PropTypes.string.isRequired,\n fnDelete: PropTypes.func.isRequired,\n};\n\nPreviewModal.defaultProps = { element: {}, fnRetrieve: () => {} };\n","import Ajv from 'ajv';\nimport { unitConversion } from 'generic-ui-core';\nimport sysUnitSch from '@/schemas/json/system-unit.json';\n\nconst ajv = new Ajv({ allErrors: true, strict: false });\nconst validate = ajv.compile(sysUnitSch);\n\n/**\n * Validates a generic object against the system unit schema\n */\nexport const validateInput = (input) => {\n if (!input) return false;\n return validate(input);\n};\n\n/**\n * Gets validation errors from the last validation\n */\nexport const getValidationErrors = () => validate.errors;\n\n/**\n * Converts values from one unit system to another\n */\nexport const convertValues = (measurableQuantity, newUnit, values) => {\n return (values || []).map((v) =>\n v === '' || v === undefined\n ? ''\n : unitConversion(measurableQuantity, newUnit, v)\n );\n};\n","/* eslint-disable react/forbid-prop-types */\nimport React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { Button } from 'react-bootstrap';\nimport { genUnits, genUnit } from 'generic-ui-core';\nimport TAs from '@components/tools/TAs';\nimport { genUnitSup } from '@components/tools/utils';\nimport { convertValues, validateInput, getValidationErrors } from '@utils/unitHelpers';\n\n/**\n * SysUnitButton - A button component that displays a unit of measurement\n * and allows the user to cycle through available units.\n * @param {object} props - The component props\n * @param {object} props.generic - The generic object containing unit information\n * @param {string} props.variant - The button variant\n * @param {string} props.size - The button size\n * @param {function} props.fnCb - Callback function to handle button click\n * @returns {JSX.Element|null} - The rendered button or null if the generic object is invalid\n */\nconst SysUnitButton = ({ generic, variant, size, fnCb }) => {\n if (!generic) {\n console.error('Error: input object is undefined or null!');\n return null;\n }\n\n const isValid = validateInput(generic);\n if (!isValid) {\n console.error('Invalid generic object:', getValidationErrors());\n return null;\n }\n\n const { measurable_quantity, unit, values = [] } = generic;\n\n const units = useMemo(\n () => genUnits(measurable_quantity),\n [measurable_quantity],\n );\n if (!units || units.length === 0) {\n console.error(\n `Error: ${measurable_quantity} is not in the list of supported units!`,\n );\n return null;\n }\n\n const unitInfo = useMemo(\n () => genUnit(measurable_quantity, unit),\n [measurable_quantity, unit],\n );\n const hasUT = !!unitInfo.unit_type;\n const defaultUnit = unit || units[0]?.key || '';\n\n const handleClick = () => {\n const update = { ...generic };\n try {\n let uIdx = units.findIndex((e) => e.key === defaultUnit);\n if (uIdx < units.length - 1) uIdx += 1;\n else uIdx = 0;\n\n const newValSystem = units.length > 0 ? units[uIdx].key : '';\n const newValues = convertValues(measurable_quantity, newValSystem, values);\n\n update.unit = newValSystem;\n update.values = newValues;\n } catch (error) {\n console.error('Error changing unit:', error);\n } finally {\n fnCb(update);\n }\n };\n\n return (\n <Button\n size={size}\n variant={variant}\n onClick={handleClick}\n title={hasUT ? TAs.no_unit_conversion : undefined}\n className=\"gen-unit-btn\"\n >\n {genUnitSup(unitInfo.label || '') || ''}\n </Button>\n );\n};\n\nSysUnitButton.propTypes = {\n generic: PropTypes.shape({\n type: PropTypes.string.isRequired,\n measurable_quantity: PropTypes.string.isRequired,\n unit: PropTypes.string,\n values: PropTypes.arrayOf(\n PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n ),\n }).isRequired,\n variant: PropTypes.string,\n size: PropTypes.string,\n fnCb: PropTypes.func,\n};\n\nSysUnitButton.defaultProps = {\n variant: 'success',\n size: 'sm',\n fnCb: () => {},\n};\n\nexport default SysUnitButton;\n","// Check if it's a generic klass\nconst hasGenKlass = (klass, els) => klass && els.some((el) => el.name === klass);\n\n// Determine if drag-and-drop should be enabled\nconst useDnD = (element, klasses) =>\n hasGenKlass(element?.type, klasses) || (element?.segments || []).length > 0;\n\nexport { hasGenKlass, useDnD };\n","const sourceFinder = {\n cell_line: 'tryFetchCellLineElById',\n device_description: 'fetchDeviceDescriptionById',\n element: 'fetchGenericElById',\n reaction: 'fetchReactionById',\n research_plan: 'fetchResearchPlanById',\n sample: 'fetchSampleById',\n screen: 'fetchScreenById',\n wellplate: 'fetchWellplateById',\n};\n\nexport default sourceFinder;\n","import sourceFinder from '@components/tools/source-finder';\nimport { permitTargets, srcElement } from '@components/tools/utils';\nimport { hasGenKlass } from '@utils/validate';\n\nconst finder = (type, els = []) => {\n const isGeneric = hasGenKlass(type, els);\n if (isGeneric) return sourceFinder[srcElement];\n if (!permitTargets.includes(type)) {\n return null;\n }\n return sourceFinder[type];\n};\n\nexport default finder;\n","import Constants from '@components/tools/Constants';\nimport finder from '@components/tools/finder';\n\n// Navigates to or opens a element\nconst actionFinder = (\n collection,\n useSCollection,\n type,\n id,\n els = [],\n open = false,\n) => {\n const url = !isNaN(id)\n ? `${collection?.id}/${type}/${id}`\n : `${collection?.id}/${type}`;\n const path = `/${useSCollection ? 's' : ''}collection/${url}`;\n\n if (open) {\n const fullUrl = `/${Constants.MYDB}${path}`;\n window.open(fullUrl, '_blank');\n return null;\n }\n\n const action = finder(type, els);\n if (!action) {\n return null;\n }\n window.history.pushState({}, '', path);\n return action;\n};\n\nexport default actionFinder;\n"],"names":["LFormGroup","children","className","otherProps","jsx","Form","PropTypes","KlassAttrForm","forwardRef","element","editable","ref","kName","useRef","kPrefix","kLabel","kIconname","kDesc","useImperativeHandle","jsxs","InputGroup","Button","DesignerContext","createContext","DesignerProvider","value","useDesignerContext","context","useContext","SegmentAttrForm","klasses","kKlass","activeKlasses","k","klassOptions","sortBy","createEnum","arr","fn","acc","cur","toNum","val","parse","toNullOrInt","toBool","valLower","buildString","inputs","separator","normalizeUrl","text","parseTextWithLinks","str","urlRegex","parts","lastIndex","match","matchText","start","end","normalizedUrl","editMode","fieldMode","modeClass","isRead","isRequired","genericVariant","generic","elementType","fieldLabelFor","availableLayers","layerKey","fieldKey","l","f","layerLabelFor","getConditionDisplay","cond","Constants","Content","React","props","Response","_notify","_element","cloneDeep","name","version","successLevel","errorLevel","notifyError","msg","title","notifySuccess","notifyDummyAdd","isSuccess","notifyFieldAdd","notifyLayerUpdate","info","type","isValidKlass","klass","isValidField","field","validateFieldName","_fieldKey","validateElementKlassInput","validateSegmentKlassInput","validateLayerDeletion","_delKey","isLayerInWF","validateLayerInput","layer","act","validateLayerUpdate","_updates","key","wf","layers","metadata","group","g","validateSelectList","_name","selectName","validateOptionAdd","optionKey","selectOptions","x","AttrModal","actions","data","genericType","showProps","show","setShow","formRef","handleCreate","_fnAction","verify","handleCopy","updates","handleDelete","handleUpdate","actionBtn","_action","button","addActions","buttons","e","addTitles","mapping","Fragment","Modal","ButtonGroup","icons","faAnglesDown","faAnglesUp","faArrowsAlt","faArrowCircleDown","faArrowDown","faArrowRight","faArrowRightToBracket","faArrowsRotate","faArrowUp","faArrowUpRightFromSquare","faArrowsLeftRight","faArrowsUpDownLeftRight","faBan","faBars","faBarsProgress","faBookOpen","faCaretDown","faCaretLeft","faCaretRight","faCaretUp","faChartDiagram","faChartBar","faCheck","faChevronDown","faChevronUp","faClock","faClockRotateLeft","faCircleArrowRight","faCircleCheck","faCircleInfo","faCirclePlus","faCircleQuestion","faClone","faDiagramProject","faDownLeftAndUpRightToCenter","faDownload","faEllipsis","faEllipsisVertical","faExclamationCircle","faEye","faFlask","faFileExport","faFileImport","faFileLines","faFileWord","faFloppyDisk","faGears","faGlobe","faGripLinesVertical","faLayerGroup","faLink","faList","faMagnifyingGlass","faMinus","faObjectGroup","faPaintbrush","faPaperclip","faPaperPlane","faPaste","faPencil","faPlus","faReply","faRotate","faSpellCheck","faSquare","faSquareCaretDown","faT","faTag","faTableCells","faTableCellsLarge","faTimes","faExpandArrowsAlt","faCompressArrowsAlt","faTrashCan","faTriangleExclamation","faUpRightAndDownLeftFromCenter","iconAnimated","faSpinner","iconsObject","FontAwesomeIcon","animatedIconsObject","FIcons","MC","capFirst","pl","count","singular","irregulars","mc2res","code","finalMsg","mc2text","bgColor","color","TAs","_in","LTooltip","idf","placement","idfs","uId","useState","uuidv4","message","wrappedChildren","isValidElement","OverlayTrigger","Tooltip","AttrNewBtn","fnCreate","GridToolbar","btnNew","btnUpload","fnClickLarge","fnClickSmall","AttrEditBtn","fnSelect","fnDelete","fnEdit","onSelect","AttrCopyBtn","fnCopy","DEFAULT_DELAY","DEFAULT_PLACEMENT","DEFAULT_TRIGGER","toDelayObject","resolveTooltipContent","tooltip","tooltipId","base","rest","source","TooltipButton","delay","trigger","overlayClassName","overlayProps","wrapperClassName","wrapperStyle","buttonProps","overlayId","tooltipContent","useMemo","finalDelay","finalPlacement","finalTrigger","computedButtonProps","buttonElement","wrappedButton","ActionRenderer","params","fnDownload","node","onDownload","ButtonTooltip","memo","bs","size","fnClick","place","fa","disabled","txt","btnCls","as","content","conditionMenu","Dropdown","attrs","ActiveRenderer","fnDeActivate","onActivate","InfoRenderer","onShow","handleClose","getCustomField","defaultFields","leftFields","rightFields","renderField","index","LHText","LWf","WFLayerMark","TemplateRenderer","fnShow","defaultColDef","GenGrid","columnDefs","gridData","pageSize","theme","rowSelected","filterText","onSetAutoHeight","onClearSelection","columns","gridRef","gridStyle","rowData","setRowData","selectedIdRef","scrollToSelectedRow","useCallback","selectedNodes","setAutoHeight","useEffect","clearSelection","setFixedHeight","currentSelected","AgGridReact","GTYPE","IconRenderer","iconStyle","GenGridEl","fnCopyKlass","fnDeleteKlass","fnEditKlass","fnDeActivateKlass","fnDownloadKlass","fnShowProp","BelongsToRenderer","GenGridSg","GenGridDs","getPageSizeForTheme","themeName","obj","DocuConst","TemplateBar","notify","active","fnSwitch","onClick","event","fbc","GenericSubField","args","uuid","Field","Layer","reorderPositions","layersObj","groups","allLayers","groupedLayersSet","ungroupedLayers","items","sortedItems","updatedGroups","updatedLayers","item","groupIndex","handleSaveSorting","sortedFields","idx","fd","FieldTypes","reUnit","reordered","getAssignedLayers","assignedLayers","getGroupByLayer","getGroupInfoByLayer","restrictions","validateLayers","klassLayers","existingGroups","invalidLayers","alreadyAssigned","addGroup","validation","newGroup","removeGroup","groupId","addLayerToGroup","removeLayerFromGroup","organizeLayersForDisplay","displayItems","groupLayers","a","b","addLayer","_generic","_source","_key","sortedLayers","srcIdx","orgLayerObject","layerDropReaction","_field","_layerKey","isFirstLayer","firstItem","ACCORDION_EVENT_KEY","ACCORDION_PREFIX","CUSTOM_TOGGLE_CLASS","FLEX_BETWEEN_CENTER","CustomToggleContent","dnd","eventKey","callback","extClass","isSys","decoratedOnClick","useAccordionButton","Prop","propHeader","expandAll","initialized","setInitialized","isFirst","expand","setExpand","handleToggle","isExpanded","Accordion","LBadge","variant","classes","computedClassName","Badge","LayerHeader","groupInfo","fieldsCount","hasConditionalFields","hasGroupRestrictions","extHeaderInfo","splitKey","sysHeaderInfo","fields","preText","defaultLayersContent","defaultFieldsContent","definedLayerHeader","label","DefinedLayerHeader","keyProp","definedFieldHeader","DragLayer","scrollableContainerRef","scrollTimeoutRef","isDragging","currentOffset","useDragLayer","monitor","container","containerRect","y","scrollThreshold","scrollSpeed","shouldScroll","direction","maxScroll","performScroll","displayText","repetitionInfo","DnD","canDrag","handleMove","containerRef","isDraggingSource","drag","preview","useDrag","getEmptyImage","isOver","isOverValidTarget","drop","useDrop","dndClass","dropZoneStyle","ConditionView","conditions","condFields","matchOp","matchOpLabel","getCondOperator","GroupLayerOrderContent","initialMetadata","newLayers","setNewLayers","newMetadata","setNewMetadata","expandedConditions","setExpandedConditions","organizeLayersByGroups","currentOrganized","newOrganized","handleLayerMove","sourceKey","targetKey","layersArray","sourceIndex","targetIndex","newLayersArray","removed","handleTopLevelMove","sourceKeyOrId","targetKeyOrId","reorderedItems","movedItem","renderLayer","isNew","style","contentStyle","hasConditions","handleToggleConditions","newExpanded","renderGroup","sortedGroupLayers","groupRestrict","groupKey","groupConditions","c","groupContent","renderCurrentArrangement","renderNewArrangement","Row","Col","ArrangeModal","onSave","handleSave","GroupLayerOrderBtn","fnSave","arrangeContentRef","updatedData","BaseFieldTypes","ElementFieldTypes","SegmentFieldTypes","UnsVocTypes","FieldBase","ElementBase","SegmentBase","UnsVocBase","findTypeLabel","fld","FieldBadge","fieldObj","prop","badgeConfig","colorOptions","LayerAttrForm","isAttrOnWF","isCreateMode","attLayerKey","attLabel","attCols","attColor","attStyle","attWf","selectedColor","setSelectedColor","showDynamicLabel","setShowDynamicLabel","labelFields","setLabelFields","setDisplayLabel","VALID_FIELD_TYPES","validFields","getAvailableFields","handleAddField","fieldName","handleRemoveField","handleMoveUp","newFields","handleMoveDown","option","opt","Collapse","ListGroup","LayerAttrModal","buildLayer","LayerAttrEditBtn","fnUpdate","_idf","LayerAttrNewBtn","API_V1","baseOptions","fetchOptions","method","fetchBody","handleResponse","response","errorData","handleError","error","Api","endpoint","queryString","path","url","res","API_LA","LayerManager","#exec","fullEndpoint","layerId","LPopover","Popover","ButtonConfirm","cls","fnParams","popoverContent","LayersGrid","onLayerSelect","onLayerDelete","onLayerView","NoDataModal","fnHide","GenAnaModal","fnLink","properties","specLayer","ai","layerAi","row","_ai","rows","DateTimeRangeFields","MomentUnit","DurationLabel","DateTimeRange","onInputChange","timePlaceholder","subFields","timeStart","timeStop","duration","durationDiff","startAt","stopAt","precise","moment","stop","highestUnitFromDuration","d","threshold","dataChange","currentTime","sub","units","genUnits","uIdx","u","unitConversion","calDiff","highestUnit","round","calc","canEdit","genUnit","TermLink","_ontology","_text","toUrl","buildTS","FieldLabel","desc","isSpCall","ontology","klz","FieldHeader","description","fObj","Attachment","file","FieldTooltip","link","KlzIcon","klzSty","uploadFiles","files","valIdx","findIndex","o","uid","GenericDummy","genUnitSup","reV","v","supVal","subVal","molOptions","samOptions","fieldCls","buildDocPath","segments","hash","docDesignerBase","docFields","propDefault","getFieldProps","frmSelSty","storeOptions","options","getAssociationStatus","id","taggable","permitTargets","srcElement","srcElements","exceptElements","searchTargets","t","userData","user","userObj","email","defaultVSystem","si","fSi","getUnitSystem","isObject","getElementTip","prop1","prop2","elementSource","hasProperties","buildSourceFromElement","classStr","isAssoc","SEPARATOR","baseSource","typeConfigs","iconFinder","iconClass","onNavi","elementLabel","elSvg","tips","tip1","tip2","pop","asShown","simg","tip","iconName","GenericElDropTarget","onDrop","readOnly","sourceProps","sourceTag","GridDnD","rowValue","isEditable","tar","src","FN_ID","FN","permitFN","fnID","fnToggle","Component","fnId","AddRowBtn","addRow","DelRowBtn","delRow","NullRowBtn","DnDRowBtn","moveRow","DownloadGridBtn","download","loading","DownloadGridBtnToggled","DLGridBtn","setCell","columnDef","onCellChange","cellRenderer","cellParams","ColumnHeader","_columnDefs","ch","h","col","width","headerName","headerComponent","headerParams","colCss","ColumnRow","_rowValue","rowKlz","NoRow","values","UConverterRenderer","sField","onChange","buildTableSource","molecule","tag","cr_opt","GenericElTableDropTarget","targetProps","DropRenderer","oopt","DropTextRenderer","attr","displayValue","copy","DropLinkRenderer","dId","dVal","SamOption","fValue","rUUID","SelectRenderer","sOptions","Select","downloadBlobAsFile","blob","filename","getFileName","defaultFileName","disposition","matches","utf8Matches","urlParts","potentialFilename","downloadResponseAsFile","ApiExecutor","ImpExpManager","#execRaw","TableRecord","newValue","Numeral","subVals","s","subField","vs","targetOpt","crOpt","sValues","sF","colDef","colDefExt","op","m","ext","sOpt","addOption","SampOption","addLink","dtype","move","target","alles","sid","tid","temp","newSub","FieldUploadItem","attachment","secondImgSrc","setSecondImgSrc","imgWidth","setImgWidth","urlParams","errorMessage","handleInputChange","newWidth","delBtn","downloadFile","DroppablePanel","fid","rid","fnCb","dropClass","DropReaction","elId","elLabel","elTip","elType","svgPath","reactionView","SvgFileZoomPan","reactionError","showDrop","showReaction","DatePickerComponent","handleChange","selectedValue","DatePicker","ButtonDatePicker","showDatePicker","setShowDatePicker","handleDateChange","date","TextLabel","part","GenPropertiesCheckbox","GenPropertiesDate","klzLayer","newVal","GenPropertiesDrop","createOpt","defaultIcon","dragTarget","GenDummy","GenDropReaction","GenPropertiesInputGroup","onSubChange","handleSubChange","subs","GenPropertiesNumber","GenPropertiesSelect","customStyles","GenPropertiesSystemDefined","hasUT","GenPropertiesTable","GenPropertiesText","showVal","GenPropertiesTextArea","GenTextFormula","fds","fdt","svv","GenPropertiesUpload","attachments","Dropzone","ListGroupItem","GenWFNext","PropCalculate","formula","placeholder","canAdjust","decimal","showTxt","calFields","filter","regF","varFields","newFormula","fi","tmpField","evaluate","comp","API_EL","API_SG","API_DS","API_KS","VerManager","apiPrefix","queryParams","short_label","selected_klass","limit","ElementSelectModal","onHide","elements","setElements","filteredElements","setFilteredElements","setLoading","selectedElement","setSelectedElement","setName","shortLabelFilter","setShortLabelFilter","setLimit","errors","setErrors","fetchElements","activeELs","el","elementOptions","handleSearch","newErrors","handleReset","handleRowSelect","selected","Alert","ElementSelectButton","showModal","setShowModal","DUMMY_BUTTON","ElementLink","elKlass","eName","SelectElement","isPreview","handleElementSelect","SelectElement$1","PropDrop","GenPropSelectMulti","selectOpts","selectedOpts","sf","VOC_IDENT","VOC_MODE","isNotObject","isEmptyObject","input","vocMode","fieldObject","readVoc","readonly","GenProperties","fieldProps","mainType","custom","orderSource","PanelDnD","onAttrChange","hasAi","grouped","timeRecord","createButton","icon","handleClick","btnLinkAna","btnReaction","btnAdd","btnRemove","layerHeader","layerWithButton","dateButton","shouldEnableRemove","accordionDiv","isFieldEffectivelyVisible","checkedFields","refElement","showProperties","depLayer","depField","depVisible","isItemEffectivelyVisible","transformedRestriction","validateLabelFields","layerFields","validFieldNames","updateLabelFieldsOnRemoval","removedFieldName","computeDynamicDisplayName","baseLabel","fieldValues","validatedFields","fieldParts","isVisible","GenInterfaceContext","GenInterfaceProvider","useGenInterfaceContext","GenPropertiesLayer","valueOnly","keyLayer","update","isSearch","sp","cols","perRow","colWidth","remainingWidth","columnCount","refSource","showProp","showLabel","fieldWidth","unit","activeWF","aiComp","displayName","bgColorClass","panelDnD","panelHeader","GenPropertiesGroup","groupLabel","restriction","isInitialExpansion","setIsInitialExpansion","expanded","setExpanded","showRestrictions","setShowRestrictions","hasRestrictions","effectiveExpandAll","layerElements","uk","showLayer","Card","LayersLayout","funcChange","funcSubChange","funcClick","extLys","fnNavi","buildExtLys","layout","layerProps","filteredGroupLayers","groupRestriction","showGroup","groupElement","ig","igs","GenUIContext","GenUIProvider","initialShowOverview","showOverview","setShowOverview","prev","useGenUIContext","DotProgressBar","now","maxDots","shape","filledDots","dots","getDotClass","_","i","hasValue","FILL_HANDLERS","isFieldFilled","handler","calculateLayerCompletion","visibleFields","visibleCount","filledCount","calculateGroupCompletion","totalCompletion","ProgressOverview","onNodeJump","expandedGroups","setExpandedGroups","toggleExpand","next","visibleItems","renderCard","isSubLayer","isGroup","completion","layerItem","ProgressFlowWrapper","isProviderPresent","handleNodeJump","doJump","targetId","layerAnchorId","groupAnchorId","parentGroup","groupHeader","block","fnAdd","isEnabled","LayerModal","fnClose","selectedLayerKey","organized","groupMetadata","isSelectedGrouped","selectedGroupId","flowInputNode","flowOutputNode","initialNodes","initialViewport","splitFlowElements","flow","deep","els","nodes","edges","MarkerType","viewport","getWFNode","_flow","nodeId","getFlowLayer","templateFlow","sourceLayer","sIdx","nd","ls","ns","ndNs","wfOpts","n","position","reformCondFields","_layer","_oKey","_f","conds","addToObject","addAfter","ok","srcPosition","cnt","oKey","traverseToRemove","rmKey","rms","removeFromObject","_propertiesLayers","srcLayer","rmNode","buildInitWF","template","orig","flowObject","nls","nNs","nextNodes","result","sortedLayer","fLayer","pas","nextOptions","ll","useReducerWithCallback","reducer","initialState","initializer","callbackRef","state","dispatch","useReducer","action","GeneralDescriptionFields","datasetContainer","currentUser","generalDescription","creatorName","handleFieldChange","updatedContainer","getFieldValue","__","emptyIdx","buildLink","protocol","hostname","port","portPart","buildResourceLink","resources","contextType","contextId","buildElementLink","getIdentifierLabel","getIdentifierUrl","renderIdentifierField","ElementDetailsFields","resolveField","fieldRef","elementFieldsMapping","fieldMapping","elementTypeLabel","word","additionalKey","mainValue","additionalValue","getFieldLabel","ResourceContextFields","GenInterface","fnChange","extLayers","genId","isActiveWF","propGenericType","layerReactionDrop","layerReaction","layerDrop","_target","tmpSrc","tarIdx","swapAryEls","tmpTar","layerDataChange","layerRemove","grpIdx","grpLayers","layerIdx","selectedIdx","layerNext","properties_release","rmNeeded","preValue","preLayer","nxLayer","handleLinkAi","pAiId","pLayer","pAct","propsChange","selectedLayer","handleAddLayer","origKey","ix","vals","fileIdx","idxSub","handleUnitClick","paramsLayersLayout","layersLayout","anaModal","LayerGridView","setLayer","handleChanged","LayerGridBtn","viewLayer","setViewLayer","handleShow","handleSelectLayer","handleDeleteLayer","handleViewLayer","handleCloseView","ALLOWED_FIELD_TYPES","useRestrictionForm","entityKey","onUpdateRestriction","idSuffix","filterCurrentLayer","showRestrictionForm","setShowRestrictionForm","setConditions","setSelectedLayer","selectedField","setSelectedField","fieldValue","setFieldValue","availableFields","setAvailableFields","selectedOp","setSelectedOp","selectedSource","setSelectedSource","updateAvailableFields","filteredFields","filteredLayers","firstLayer","layerKeyValue","newCondition","isCheckbox","conditionValue","updatedConditions","conditionId","newOp","OperatorSelector","onOpChange","condOperatorOptions","RestrictionFormCard","currentEntityKey","onClose","onLayerChange","onFieldChange","onValueChange","onAddCondition","onRemoveCondition","onSourceChange","layersToShow","selectedFieldObj","isSelectField","isCheckboxField","selectFieldOptions","renderValueInput","getHelperText","layerTitle","fieldTitle","valueTitle","ASSIGN_EXISTING","ASSIGN_NEW","SimpleLayerPanel","layerData","onAssignToGroup","showAssignForm","setShowAssignForm","groupAction","setGroupAction","setSelectedGroupId","newGroupLabel","setNewGroupLabel","handleRestrictionClick","handleLayerChange","handleAddCondition","handleRemoveCondition","handleOpChange","handleSourceChange","handleAssignClick","sortedGroups","orderBy","handleSubmit","SimpleLayerBlock","onRemoveFromGroup","handleRemove","SimpleGroupPanel","groupPosition","onRemove","onRemoveLayerFromGroup","onUpdateLayerRestriction","handleRemoveGroup","SimpleGroupLayer","klassMetadata","onMetadataChange","currentGroups","setCurrentGroups","currentRestrictions","setCurrentRestrictions","sanitizeRestrictionsForLayers","layerKeys","updatedRestrictions","layerKeysSet","restrictionKey","filteredConditions","applyReorderingAndNotify","updatedKlass","klassWithReorderedLayers","groupToRemove","layersInGroup","handleAssignToGroup","existingGroupId","existingGroup","newGroupId","layerPosition","otherLayerKey","handleRemoveLayerFromGroup","handleUpdateRestriction","handleUpdateLayerRestriction","renderLayerContent","groupedLayerKeys","Container","NoticeBtn","showNotice","setShowNotice","GroupModal","updatedMetadata","setUpdatedMetadata","workingKlass","setWorkingKlass","workingMetadata","setWorkingMetadata","handleMetadataChange","handleCancel","GroupButton","validGroupIds","cleanedRestrictions","GridSelect","all","SystemSelect","unitConfig","selDefined","AttrChk","chkAttr","attrOpts","DefinedRenderer","TypeSelect","selType","GroupFields","oldValue","panelIsExpanded","selectedData","updSub","LayerSelect","selLayer","FieldSelect","selField","types","tableText","tbl","tfl","TextFormula","prevProps","lys","ly","fdf","labRowSelection","labDefaultColDef","TP_BASE","TP_ELEMENT","TP_LOCKED","FieldTable","unitsFields","setColumnDefs","columnsReady","setColumnsReady","gridReady","setGridReady","onGridReady","collectGridData","newField","validFieldIds","sv","cleanedSv","newSv","systemUnit","so","onCellValueChanged","chk","search","buildColumnDefs","onRowDragEnd","columnState","valueColumn","currentOptions","FieldTable$1","FieldRestrictionModal","onUpdate","sameGroupLayerKeys","displayAsValue","setDisplayAsValue","setAvailableLayers","initialConditions","setInitialConditions","initialOp","setInitialOp","filtered","groupedSet","handleAddSourceCondition","updatedField","ConditionFieldBtn","fnUpdateSub","conditionBtn","VocabForm","init","initLabel","initField","initOntology","shortForm","ontologyLabel","term","LayerSaveModal","acts","close","API_VOC","VocabManager","vocabularyId","NotificationMessage","extractOptionsFromField","_data","optionLayerKey","VocabSaveBtn","initialField","initialData","initialLayer","extra","saveInput","saveButton","resetButton","LLabel","isCheckLabel","LabelComponent","getNextUnit","currentUnit","currentIndex","nextIndex","PopUnits","InputUnit","fnUnitChange","valueSystem","defaultUnit","nextUnit","OntCmp","_sharp","constructOption","constructOptions","OntologySelect","fnSelected","defaultValue","setData","fetchData","inputValue","buildTSS","AsyncSelect","baseStyles","ModalOntologySelect","modalComponent","ButtonOntologySelect","customClass","ColWidthOpts","renderBlank","renderDummyFieldGroup","renderNameField","fnOntChange","renderTextFieldGroup","xs","renderCheck","note","isLabel","skipLabel","renderColWidth","renderAdjust","renderOwnRow","renderRequired","renderReadonly","renderTypeField","typeOpts","renderNumberField","PositionDnD","isButton","cursorStyle","DnDs","collateValues","currentFields","previousFields","previousValues","currentValuKeys","previousValueKeys","notInCurrent","currObj","preKey","curr","organizeSubValues","pre","mergeOptions","A","B","mergeWith","objValue","srcValue","isArray","self","remodel","newProps","newPropsSelectOptions","newLayer","curFields","curIdx","newFieldType","currentValue","curVal","curType","cSubs","newOptionLayers","newOptions","newOptionsKeys","notInteger","nSubs","exSubs","nSub","hitSub","nvl","importReaction","newTarget","hasReaction","srcLayers","reactionLayers","updateUnsupports","supports","supportedFields","supported","optionLayers","restField","removeFieldReferencesToSelectOption","deletedSelectKey","affectedFields","removeRestrictionsReferencingFields","affectedFieldSet","condIdentifier","restrict","restrictKey","removeRestrictionsReferencingOptionValue","selectOptionKey","deletedOptionValue","fieldsUsingSelectOption","removeRestrictionsReferencingLayer","deletedLayerKey","removeLayerFromGroups","emptyGroupIds","ajv","Ajv","pkgSchema","layersSchema","selectOptionsSchema","fieldBaseSchema","systemUnitSchema","metadataSchema","validatePropBase","propBaseSchema","validateProperties","valid","responseExt","_additional","responseCreateLayer","handleCreateLayer","handleAddStandardLayer","_genericType","origLayer","handleUpdateLayer","newF","delStr","delKey","delRoot","handleAddDummy","handleAddSelect","_options","handleAddOption","_optionKey","_selectOptions","handleOptionInput","_selectKey","_input","selectKey","handleFieldInputChange","_event","_orig","_fieldCheck","_type","fieldCheck","defaultSI","handleTemplateUploading","pt","handleKlassUploading","requestKlass","err","AS","ALLOWED_DELETE_TYPES","DELETE_ENTITIES","buildMessage","delType","entity","confirmDelete","fnConfirm","ButtonDelField","ButtonEllipse","condSet","setIsOpen","handleItemClick","child","DropdownButton","nextShow","ElementField","parentExpand","_params","onMove","fe","lk","fc","tp","env","isUp","onDummyAdd","cb","onFieldSubFieldChange","unitsSystem","us","popover","selections","onDelete","vocabularies","parentIsExpanded","expandLayers","_c","selectOptionsArray","selectOptionsOpts","selectOptionsVal","groupOptions","tableOptions","textFormula","fieldHeader","fieldHeaderButtons","customHeader","responseCondition","handleFieldSubChange","_cb","resetPosition","_fields","handleAddVocabulary","_selected","dupFields","handleCreateField","_newFieldKey","newFieldKey","handleFieldMove","_isUp","curObj","preObj","nexObj","handlePositionChange","sourceIdx","targetIdx","removedElement","PropFields","_e","onFieldMove","onFieldRemove","onFieldInputChange","onPositionMove","NewFieldBtn","setNewFieldKey","onInputNewField","LayerForm","initKey","extractOptionsFromTable","selectField","extractOptions","LayerSaveBtn","inputChange","_value","optionsFromTable","mergedOptions","editableSource","VocabGrid","onVocSelect","onVocDelete","qfRef","onFilterTextBoxChanged","VocabularyListBtn","handleDeleteVoc","handleSelectVoc","ConditionsDisplay","condFieldsList","condField","Table","FieldOrderContent","setNewFields","updatedFields","moveField","currentSortedFields","newSortedFields","FieldConditionsDisplay","fieldsListCurrent","fieldsListNew","FieldOrderBtn","PropLayers","setExpandLayers","toggleExpandLayer","onFieldAdd","onLayerCreate","onAddStandardLayer","onDeleteStandardLayer","onLayerUpdate","layerHeaderButtons","newNode","SelectAttrNewModal","stopPropagation","SelectOption","root","fnAddOption","newOption","selectObj","renderDeleteButton","OptionComponent","fnInputChg","fnDel","setInputValue","Option","SelectOptionList","Selection","_root","_select","SelectOptionLayer","showAddSelect","setShowAddSelect","onAdd","onCreate","sos","onOptionInputChange","WorkflowModal","DnDNode","DnDNodes","DnDSidebar","targetHandleStyle","sourceHandleStyle","onConnect","LayerNode","Handle","Position","LayerNode$1","NodeIcon","nodeClass","nodeIcon","createLayerNodeIcon","checked","extCSS","arrangedFlowElements","defaultNodes","returnNodes","returnEdges","layersProperties","associatedNode","lKey","updatedNodes","baseNode","newPosition","removeReactionLayers","_layers","removeGroupedLayers","updateDataProperties","findKey","buildDefaultNode","decorateNodes","_nodes","isValidLayer","_node","buildFlowElements","propertiesRelease","flowType","flowProperties","arrangedElements","nodeTypes","DnDFlow","propertiesTemplate","reactFlowWrapper","reactFlowInstance","setReactFlowInstance","setNodes","onNodesChange","useNodesState","setEdges","onEdgesChange","useEdgesState","eds","addEdge","addNode","clientOffset","reactFlowBounds","nds","canDrop","ReactFlowProvider","ReactFlow","ConnectionMode","Controls","WorkflowDesignBtn","_flowObject","UploadTemplateModal","fnUpload","handleReaderLoaded","newData","handleUploadTemplate","reader","attach","UploadTemplateBtn","ResizeIndicator","fontSize","ResizablePanel","leftPanel","rightPanel","defaultLeftWidth","minLeftWidth","minRightWidth","minHeightForMultipleIndicators","leftWidth","setLeftWidth","setIsDragging","showMultipleIndicators","setShowMultipleIndicators","resizeHandleRef","handleMouseDown","handleMouseMove","containerWidth","newLeftWidth","handleMouseUp","checkIndicatorVisibility","handleHeight","resizeObserver","rightWidth","headerText","TemplateProps","fnSubmit","innerAction","RevisionSelector","isSelected","RevisionSelector$1","formatDate","VersionBlock","idxSelect","rev","fnRetrieve","fnView","onSelectionChange","releasedAt","createdAt","canDL","idxStr","compareUUID","parsedIdx","selectedClass","at","verBase","verID","del","ret","dl","handleSelectionChange","create","DIFF_COLORS","PROPS_TO_REMOVE","LAYER_PROPS_TO_REMOVE","PROPS_TO_RENAME","BASE_REQUIRED_PROPS","TYPE_SPECIFIC_REQUIRED_PROPS","generateFinalRequiredProps","typeSpecific","specificProps","merged","REQUIRED_PROPS","TYPE_TRANSFORMS","HEADER_COLOR_TRANSFORMS","HEADER_TEXT_STYLE_TRANSFORMS","GRID_CONFIG","keepRequiredFieldProperties","requiredProps","filteredField","processTableField","layerOrder","fieldCopy","processedSubField","preprocessJson","json","orderedLayers","sortedEntries","cleaned","newKey","transformSelectOptions","transformLayers","transformedSelectOptions","optionValue","transformedLayers","layerValue","layerCopy","processedField","transformValueForDisplay","fullKey","formatValue","isPrimitive","parentKey","transformedValue","jsondiffpatch","shouldTreatAsContainer","change","oldIsPrimitive","newIsPrimitive","oldVal","determineChangeType","keyDelta","buildFlatData","oldObj","newObj","level","delta","newObjKeys","remainingOldKeys","maxLength","oldItem","newItem","InlineDiff","oldStr","newStr","changes","diffChars","transformKeyForDisplay","displayIndex","KeyCellRenderer","indent","displayKey","OldValueCellRenderer","rawOldValue","rawNewValue","NewValueCellRenderer","createColumnDefs","oldVersionId","newVersionId","getDefaultColDef","getRowStyle","JsonDiffTreeAgGrid","oldJson","newJson","showChangesOnly","setShowChangesOnly","preprocessedOldJson","preprocessedNewJson","newJsonLayerOrder","allRowData","handleShowChangesToggle","getRowStyleFunc","CompareModal","selectedRevisions","showOnlyChanges","setShowOnlyChanges","revisionsToCompare","parseVersion","versionStr","compareVersions","versionA","versionB","aMajor","aMinor","bMajor","bMinor","firstVersionId","secondVersionId","firstVersion","secondVersion","comparison","CompareButton","selectedCount","CompareButton$1","FULL_SCREEN_CONFIG","FullScreenToggle","isFullScreen","onToggle","config","ContributeTemplateButton","ContributeTemplateButton$1","PreviewNote","open","setOpen","ContributeTemplateModal","onSubmitSuccess","isSubmitting","setIsSubmitting","submitMessage","setSubmitMessage","emailValidation","setEmailValidation","validateEmail","handleEmailChange","handleEmailKeyPress","validateForm","form","nameInput","contributorEmailInput","emailInput","applicationInput","messageInput","contributorEmail","application","templateKlass","submissionData","PREVIEW_CONFIG","API_ACTIONS","buildApiParams","buildDeleteParams","prepareRevisions","list","r","getInitialCompareUUID","PreviewFunctional","revisions","setRevisions","setSelectedRevisions","showCompareModal","setShowCompareModal","showContributeModal","setShowContributeModal","setCompareUUID","fullScreen","setFullScreen","fetchRevisions","delRevision","compare","retrieveRevision","dlRevision","revision","exportData","href","currentId","revisionId","handleCompareClick","isRevisionSelected","selectedId","toggleScreen","handleContributeTemplate","handleSubmitSuccess","submittedCount","getSubmissionText","Template","inputData","opData","setOpData","prevOpData","_result","newElement","newNotify","additional","prevState","onSwitch","_page","release","sortedData","UploadKlassModal","AttrUploadBtn","RepoRenderer","fnApi","API_DISP","ExternalManager","disp","RepoGridDs","RepoGridSg","RepoGridEl","contentComponents","RepoNewModal","ContentComponent","SyncBtn","fnRefresh","fnCallback","ContentComponents","FNLocation","Designer","_props","fnActive","setTheme","setFilterText","setAutoHeightRef","clearSelectionRef","sortedKlasses","onDataSelected","setAutoHeightFn","clearSelectionFn","handleFullListClick","genGrid","ButtonToolbar","ArrangeContent","isLayerVisible","ButtonArrange","getValidLayers","Sidebar","layersInFlow","layersNotInFlow","FlowDesigner","changed","setChanged","draw","applyNodeChanges","applyEdgeChanges","initFlow","ButtonDraw","drawCopy","restData","FlowView","FlowViewerBtn","hasFlow","hasFlowObject","FileExportButton","isLoading","setIsLoading","LoadingSpinner","VersionModal","VisionListBtn","handleRetrieve","ButtonReload","fnReload","handleReload","original","outGeneric","output","importResult","LToolbar","onExpandAll","toggleOverview","setIsExpanded","handleExpandToggle","newExpandState","VersionListBtn","FlowViewerModal","shortLabel","Draggable","Workflow","fnSaveFlow","createDataset","Element","GenDataset","containerId","datasetKlassId","klassOls","klassLabel","createElement","Segment","GenElement","collectionId","TYPE","analyses","aec","aics","aic","dts","newEl","resetProperties","klassName","elementKlassId","klassUuid","userLabels","isEmpty","visible","visibilityCheck","createSegment","GenSegment","clonedSegments","segmentData","GenericElCriteriaModal","SegmentCriteria","segment","DatasetMetadata","dcs","idDt","dc","siCheck","sio","fio","Preview","his","contentCol","screenFa","PreviewModal","fetcher","fetcherFn","validate","sysUnitSch","validateInput","getValidationErrors","convertValues","measurableQuantity","newUnit","SysUnitButton","measurable_quantity","unitInfo","newValSystem","newValues","hasGenKlass","useDnD","sourceFinder","finder","actionFinder","collection","useSCollection","fullUrl"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,MAAMA,KAAa,CAAC,EAAE,UAAAC,GAAU,WAAAC,GAAW,GAAGC,EAAA;AAAA;AAAA,EAE5C,gBAAAC,EAACC,EAAK,OAAL,EAAW,WAAW,QAAQH,KAAa,EAAE,IAAK,GAAGC,GACnD,UAAAF,EAAA,CACH;AAAA;AAGFD,GAAW,YAAY;AAAA,EACrB,UAAUM,EAAU,KAAK;AAAA,EACzB,WAAWA,EAAU;AACvB;AAEAN,GAAW,eAAe;AAAA,EACxB,WAAW;AACb;ACZA,MAAMO,KAAgBC,GAAW,CAAC,EAAE,SAAAC,GAAS,UAAAC,EAAA,GAAYC,MAAQ;AAC/D,QAAMC,IAAQC,GAAA,GACRC,IAAUD,GAAA,GACVE,IAASF,GAAA,GACTG,IAAYH,GAAA,GACZI,IAAQJ,GAAA;AAEd,SAAAK,GAAoBP,GAAK,OAAO;AAAA,IAC9B,QAAQC,EAAM;AAAA,IACd,UAAUE,EAAQ;AAAA,IAClB,SAASC,EAAO;AAAA,IAChB,YAAYC,EAAU;AAAA,IACtB,QAAQC,EAAM;AAAA,EAAA,EACd,GAGA,gBAAAE,EAACd,GAAA,EAAK,WAAU,kBACd,UAAA;AAAA,IAAA,gBAAAc,EAACnB,IAAA,EAAW,WAAU,oBACpB,UAAA;AAAA,MAAA,gBAAAmB,EAACC,IAAA,EACC,UAAA;AAAA,QAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAgB,UAAA,UAAA,CAAO;AAAA,QACxB,gBAAAhB;AAAA,UAACC,EAAK;AAAA,UAAL;AAAA,YACC,MAAK;AAAA,YACL,cAAcI,EAAQ;AAAA,YACtB,KAAKG;AAAA,YACL,UAAU,CAACF;AAAA,UAAA;AAAA,QAAA;AAAA,MACb,GACF;AAAA,MACA,gBAAAS,EAAC,OAAA,EAAI,WAAU,QAAO,UAAA;AAAA,QAAA;AAAA,0BAGnB,MAAA,EAAG;AAAA,QAAE;AAAA,0BAEL,MAAA,EAAG;AAAA,QAAE;AAAA,MAAA,EAAA,CAER;AAAA,IAAA,GACF;AAAA,IACA,gBAAAA,EAACnB,IAAA,EAAW,WAAU,qBACpB,UAAA;AAAA,MAAA,gBAAAmB,EAACC,IAAA,EACC,UAAA;AAAA,QAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAgB,UAAA,SAAA,CAAM;AAAA,QACvB,gBAAAhB;AAAA,UAACC,EAAK;AAAA,UAAL;AAAA,YACC,MAAK;AAAA,YACL,cAAcI,EAAQ;AAAA,YACtB,KAAKK;AAAA,UAAA;AAAA,QAAA;AAAA,MACP,GACF;AAAA,MACA,gBAAAK,EAAC,OAAA,EAAI,WAAU,QAAO,UAAA;AAAA,QAAA;AAAA,0BAEnB,MAAA,EAAG;AAAA,QAAE;AAAA,MAAA,EAAA,CAER;AAAA,IAAA,GACF;AAAA,IACA,gBAAAf,EAACJ,IAAA,EAAW,WAAU,oBACpB,4BAACoB,IAAA,EACC,UAAA;AAAA,MAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAgB,UAAA,gBAAA,CAAa;AAAA,MAC9B,gBAAAhB,EAACC,EAAK,SAAL,EAAa,MAAK,QAAO,cAAcI,EAAQ,OAAO,KAAKM,EAAA,CAAQ;AAAA,IAAA,EAAA,CACtE,EAAA,CACF;AAAA,IACA,gBAAAI,EAACnB,IAAA,EAAW,WAAU,mBACpB,UAAA;AAAA,MAAA,gBAAAmB,EAACC,IAAA,EACC,UAAA;AAAA,QAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAgB,UAAA,OAAA,CAAI;AAAA,QACpBX,EAAQ,YACP,gBAAAL,EAACgB,GAAW,MAAX,EACC,UAAA,gBAAAhB,EAAC,KAAA,EAAE,WAAWK,EAAQ,UAAA,CAAW,EAAA,CACnC,IACE;AAAA,QACJ,gBAAAL;AAAA,UAACC,EAAK;AAAA,UAAL;AAAA,YACC,MAAK;AAAA,YACL,cAAcI,EAAQ;AAAA,YACtB,KAAKO;AAAA,UAAA;AAAA,QAAA;AAAA,MACP,GACF;AAAA,MACA,gBAAAG,EAAC,OAAA,EAAI,WAAU,QAAO,UAAA;AAAA,QAAA;AAAA,QAGpB,gBAAAf;AAAA,UAACiB;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,MAAK;AAAA,YACL,QAAO;AAAA,YACR,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAEQ;AAAA,MAAA,EAAA,CAEX;AAAA,IAAA,GACF;AAAA,IACA,gBAAAjB,EAACJ,IAAA,EAAW,WAAU,0BACpB,4BAACoB,IAAA,EACC,UAAA;AAAA,MAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAgB,UAAA,cAAA,CAAW;AAAA,MAC5B,gBAAAhB,EAACC,EAAK,SAAL,EAAa,MAAK,QAAO,cAAcI,EAAQ,MAAM,KAAKQ,EAAA,CAAO;AAAA,IAAA,EAAA,CACpE,EAAA,CACF;AAAA,EAAA,GACF;AAEJ,CAAC;AAEDV,GAAc,cAAc;AAE5BA,GAAc,YAAY;AAAA,EACxB,SAASD,EAAU,OAAO;AAAA,EAC1B,UAAUA,EAAU,KAAK;AAC3B;ACxGA,MAAMgB,KAAkBC,GAAA,GAEXC,KAAmB,CAAC,EAAE,UAAAvB,GAAU,OAAAwB,QAEzC,gBAAArB,EAACkB,GAAgB,UAAhB,EAAyB,OAAAG,GACvB,UAAAxB,EAAA,CACH,GAISyB,KAAqB,MAAM;AACtC,QAAMC,IAAUC,GAAWN,EAAe;AAC1C,MAAIK,MAAY;AACd,UAAM,IAAI,MAAM,2DAA2D;AAE7E,SAAOA;AACT,GCVME,KAAkBrB,GAAW,CAAC,EAAE,SAAAC,GAAS,UAAAC,EAAA,GAAYC,MAAQ;AACjE,QAAM,EAAE,SAAAmB,EAAA,IAAYJ,GAAA,GACdX,IAASF,GAAA,GACTI,IAAQJ,GAAA,GACRkB,IAASlB,GAAA;AAEf,EAAAK,GAAoBP,GAAK,OAAO;AAAA,IAC9B,SAASI,EAAO;AAAA,IAChB,QAAQE,EAAM;AAAA,IACd,SAASc,EAAO;AAAA,EAAA,EAChB;AAEF,QAAMC,IAAgBF,GAAS,OAAO,CAACG,MAAMA,EAAE,cAAc,EAAK,GAE5DC,IADgBC,GAAOH,GAAe,CAAC,OAAO,CAAC,GACjB,IAAI,CAACC,MACvC,gBAAA7B,EAAC,UAAA,EAAkB,OAAO6B,EAAE,IACzB,UAAAA,EAAE,MAAA,GADQA,EAAE,EAEf,CACD;AAED,SACE,gBAAAd,EAACd,GAAA,EAAK,WAAU,kBACd,UAAA;AAAA,IAAA,gBAAAD,EAACJ,IAAA,EAAW,WAAU,oBACpB,UAAA,gBAAAmB,EAACC,IAAA,EACC,UAAA;AAAA,MAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAgB,UAAA,gBAAA,CAAa;AAAA,MAC9B,gBAAAhB,EAACC,EAAK,SAAL,EAAa,MAAK,QAAO,cAAcI,EAAQ,OAAO,KAAKM,EAAA,CAAQ;AAAA,IAAA,EAAA,CACtE,EAAA,CACF;AAAA,IACA,gBAAAX,EAACJ,IAAA,EAAW,WAAU,0BACpB,4BAACoB,IAAA,EACC,UAAA;AAAA,MAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAgB,UAAA,cAAA,CAAW;AAAA,MAC5B,gBAAAhB,EAACC,EAAK,SAAL,EAAa,MAAK,QAAO,cAAcI,EAAQ,MAAM,KAAKQ,EAAA,CAAO;AAAA,IAAA,EAAA,CACpE,EAAA,CACF;AAAA,IACA,gBAAAb,EAACJ,IAAA,EAAW,WAAU,0BACpB,4BAACoB,IAAA,EACC,UAAA;AAAA,MAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAgB,UAAA,oBAAA,CAAiB;AAAA,MAClC,gBAAAhB;AAAA,QAACC,EAAK;AAAA,QAAL;AAAA,UAEC,IAAG;AAAA,UACH,cAAcI,GAAS,eAAe;AAAA,UACtC,KAAKsB;AAAA,UACL,UAAU,CAACrB;AAAA,UACX,UAAU,CAACA;AAAA,UAEV,UAAAwB;AAAA,QAAA;AAAA,QAPIzB,GAAS,eAAe;AAAA,MAAA;AAAA,IAQ/B,EAAA,CACF,EAAA,CACF;AAAA,EAAA,GACF;AAEJ,CAAC;AAEDoB,GAAgB,cAAc;AAE9BA,GAAgB,YAAY;AAAA,EAC1B,SAASvB,EAAU,OAAO;AAAA,EAC1B,UAAUA,EAAU,KAAK;AAC3B;ACjDA,MAAM8B,KAAa,CAACC,GAAKC,IAAK,eAC5B,OAAO;AAAA,EACLD,EAAI,OAAO,CAACE,GAAKC,OACfD,EAAIC,EAAI,YAAA,CAAa,IAAIA,EAAIF,CAAE,EAAA,GACxBC,IACN,CAAA,CAAE;AACP,GAMIE,KAAQ,CAACC,MAAQ;AACrB,QAAMC,IAAQ,OAAOD,KAAO,EAAE;AAC9B,SAAO,OAAO,MAAMC,CAAK,IAAI,IAAIA;AACnC,GAcMC,KAAc,CAACF,MAAQ;AAC3B,MAAIA,GAAK;AACP,UAAMC,IAAQ,OAAOD,CAAG;AACxB,WAAO,OAAO,MAAMC,CAAK,IAAI,OAAO,SAAS,OAAOD,CAAG,GAAG,EAAE;AAAA,EAC9D;AACA,SAAO;AACT,GA2BMG,KAAS,CAACH,MAAQ;AACtB,QAAMI,IAAW,OAAOJ,CAAG,EAAE,YAAA;AAC7B,SAAO,EAAE,CAACI,KAAYA,MAAa,WAAWA,MAAa;AAC7D,GAKMC,KAAc,CAACC,GAAQC,IAAY,QAAQD,EAAO,KAAKC,CAAS,GAEhEC,KAAe,CAACC,MAChB,gBAAgB,KAAKA,CAAI,IACpBA,IAEF,WAAWA,CAAI,IAGlBC,KAAqB,CAACD,MAAS;AACnC,MAAI,CAACA;AACH,WAAO,CAAC,EAAE,MAAM,QAAQ,SAAS,IAAI;AAEvC,QAAME,IAAM,OAAOF,CAAI,GAKjBG,IACJ,2HACIC,IAAQ,CAAA;AACd,MAAIC,IAAY;AAEhB,aAAWC,KAASJ,EAAI,SAASC,CAAQ,GAAG;AAC1C,UAAMI,IAAYD,EAAM,CAAC,GACnBE,IAAQF,EAAM,OACdG,IAAMD,IAAQD,EAAU;AAG9B,IAAIC,IAAQH,KACVD,EAAM,KAAK,EAAE,MAAM,QAAQ,SAASF,EAAI,MAAMG,GAAWG,CAAK,GAAG;AAInE,UAAME,IAAgBX,GAAaQ,CAAS;AAC5C,IAAAH,EAAM,KAAK,EAAE,MAAM,QAAQ,SAASG,GAAW,MAAMG,GAAe,GAEpEL,IAAYI;AAAA,EACd;AAGA,SAAIJ,IAAYH,EAAI,UAClBE,EAAM,KAAK,EAAE,MAAM,QAAQ,SAASF,EAAI,MAAMG,CAAS,GAAG,GAGrDD;AACT,GAEM7C,KAAW,CAACoD,GAAUC,MACtBD,MAAa,SAAkBA,IAC5BC,MAAc,SAAYA,IAAY,IAGzCC,KAAY,CAACC,GAAQC,MAAe;AACxC,MAAIhE,IAAY+D,IAAS,aAAa;AACtC,SAAA/D,IAAYgE,KAAc,CAACD,IAAS,aAAa/D,GAC1CA;AACT,GAEMiE,KAAiB,CAACC,MAAY;AAClC,MAAI,CAACA,EAAS,QAAO;AACrB,QAAM,EAAE,cAAcC,EAAA,IAAgBD;AACtC,SAAKC,IAEGA,MACD,cACI,YAEA,YANc;AAQ3B,GAEMC,KAAgB,CAACC,GAAiBC,GAAUC,MAClCF,GAAiB,KAAK,CAACG,MAAMA,EAAE,QAAQF,CAAQ,GACxC,QAAQ,KAAK,CAACG,MAAMA,EAAE,UAAUF,CAAQ,GAC/C,SAASA,GAGnBG,KAAgB,CAACL,GAAiBC,MACxBD,GAAiB,KAAK,CAACG,MAAMA,EAAE,QAAQF,CAAQ,GAC/C,SAASA,GAGnBK,KAAsB,CAACC,GAAMP,GAAiBzC,IAAU,CAAA,MACxDgD,EAAK,UAAU,WAEV;AAAA,EACL,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,YAJYhD,EAAQ,KAAK,CAACG,MAAMA,EAAE,SAAS6C,EAAK,KAAK,GAIlC,SAASA,EAAK;AAAA,IAG9B;AAAA,EACL,YAAY,GAAGF,GAAcL,GAAiBO,EAAK,KAAK,CAAC,KAAKA,EAAK,KAAK;AAAA,EACxE,YAAYR,GAAcC,GAAiBO,EAAK,OAAOA,EAAK,KAAK;AAAA,EACjE,YACE,OAAOA,EAAK,SAAU,YAAY,OAAOA,EAAK,KAAK,IAAIA,EAAK;AAAA,GCrLlEC,IAAe,OAAO,OAAO;AAAA,EAC3B,aAAa;AAAA,EACb,eAAe;AAAA,EACf,uBAAuB;AAAA,EACvB,YAAY3C,GAAW,CAAC,SAAS,UAAU,SAAS,GAAG,aAAa;AAAA,EACpE,eAAeA,GAAW;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAAA,EACD,qBAAqBA,GAAW;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAAA,EACD,YAAY;AAAA,IACV,QAAQ,EAAE,OAAO,mBAAmB,WAAW,EAAA;AAAA,IAC/C,QAAQ,EAAE,OAAO,mBAAmB,WAAW,GAAA;AAAA,IAC/C,QAAQ,EAAE,OAAO,mBAAmB,WAAW,EAAA;AAAA,EAAE;AAAA,EAEnD,aAAaA,GAAW,CAAC,aAAa,WAAW,WAAW,CAAC;AAAA,EAC7D,cAAc;AAAA,EACd,SAAS;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,EACA,KAAK,GAAG;AAAA,EAAA;AAAA,EAEZ,SAAS;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,EACA,KAAK,GAAG;AAAA,EAAA;AAAA,EAEZ,MAAM;AAAA,EACN,eAAe;AAAA;AAAA,IAEb,oBAAoB;AAAA,IACpB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,cAAc;AAAA,IACd,UAAU;AAAA,IACV,QAAQ;AAAA,EAAA;AAAA,EAEV,eAAe;AAAA,EACf,eAAe;AACjB,CAAC,GCvCK4C,KAAUC,GAAM,WAAW,CAACC,GAAOvE,MAAQ;AAC/C,UAAQuE,EAAM,SAAA;AAAA,IACZ,KAAKH,EAAU,cAAc;AAC3B,aACE,gBAAA3E;AAAA,QAACyB;AAAA,QAAA;AAAA,UACC,KAAAlB;AAAA,UACA,SAASuE,EAAM;AAAA,UACf,UAAUA,EAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IAGtB,KAAKH,EAAU,cAAc;AAC3B,aACE,gBAAA3E;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,KAAAI;AAAA,UACA,SAASuE,EAAM;AAAA,UACf,UAAUA,EAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IAGtB;AACE,aAAO,gBAAA9E,EAAC,SAAI,UAAA,aAAA,CAAU;AAAA,EAAA;AAE5B,CAAC;AAED4E,GAAQ,cAAc;;AC1CtB,MAAqBG,GAAS;AAAA,EAC5B,YAAYC,GAASC,GAAU;AAC7B,SAAK,SAASD,GAGVC,KAAY,OAAOA,KAAa,YAAY,CAAC,MAAM,QAAQA,CAAQ,KACrE,KAAK,UAAUC,EAAUD,CAAQ,GACjC,KAAK,QAAQ,MAAM,OAAO,OAAO,CAAA,GAAI,KAAK,QAAQ,KAAK,EAAE,MAAAE,IAAM,SAAAC,GAAA,CAAS,KAExE,KAAK,UAAUH;AAAA,EAEnB;AACF;ACfA,MAAMI,KAAe,WACfC,KAAa,SAENC,KAAc,CAACC,IAAM,oBAAoBC,IAAQ,aACrD;AAAA,EACL,KAAAD;AAAA,EACA,OAAAC;AAAA,EACA,KAAKH;AAAA,EACL,WAAW;AAAA,IAIFI,KAAgB,CAC3BF,IAAM,0EACNC,IAAQ,eAED;AAAA,EACL,KAAAD;AAAA,EACA,OAAAC;AAAA,EACA,KAAKJ;AAAA,EACL,WAAW;AAAA,IAIFM,KAAiB,CAC5BC,IAAY,IACZJ,IAAM,gCACNC,IAAQ,sBACJG,IAAYF,GAAcF,GAAKC,CAAK,IAAIF,GAAYC,GAAKC,CAAK,GAEvDI,KAAiB,CAC5BD,IAAY,IACZJ,IAAM,8BACNC,IAAQ,oBACJG,IAAYF,GAAcF,GAAKC,CAAK,IAAIF,GAAYC,GAAKC,CAAK,GAQvDK,KAAoB,CAC/BC,IAAO,EAAE,MAAM,MAAM,UAAU,KAAA,GAC/BP,IAAM,6BACNC,IAAQ,mBACL;AACH,QAAM,EAAE,MAAAO,GAAM,UAAA5B,EAAA,IAAa2B;AAC3B,UAAQC,GAAA;AAAA,IACN,KAAK;AACH,aAAOT;AAAA,QACL;AAAA,UACE;AAAA,UACA,uBAAuBnB,CAAQ;AAAA,QAAA,EAC/B,KAAK,GAAG;AAAA,QACVqB;AAAA,MAAA;AAAA,IAEJ,KAAK;AACH,aAAOF;AAAA,QACL;AAAA,UACE;AAAA,UACA,gDAAgDnB,CAAQ;AAAA,QAAA,EACxD,KAAK,GAAG;AAAA,QACVqB;AAAA,MAAA;AAAA,IAEJ,KAAK;AACH,aAAOF;AAAA,QACL;AAAA,UACE;AAAA,UACA,wBAAwBnB,CAAQ;AAAA,QAAA,EAChC,KAAK,GAAG;AAAA,QACVqB;AAAA,MAAA;AAAA,IAEJ;AACE,aAAOC,GAAcF,GAAKC,CAAK;AAAA,EAAA;AAErC,GCpEaQ,KAAe,CAAAC,MAAS,kBAAkB,KAAKA,CAAK,GACpDC,KAAe,CAAAC,MAAS,kBAAkB,KAAKA,CAAK,GAEpDC,KAAoB,CAAAC,MAC3BA,MAAc,QAAQA,EAAU,KAAA,EAAO,WAAW,IAC7CT,GAAe,IAAO,gCAAgC,IAE1DM,GAAaG,CAAS,IAMpBT,GAAA,IALEA;AAAA,EACL;AAAA,EACA;AAAA,GAMOU,KAA4B,CAAAlG,MAClC4F,GAAa5F,EAAQ,IAAI,IAG1BA,EAAQ,iBAAiB,KACpBkF,GAAY,mBAAmB,YAAYlF,EAAQ,IAAI,GAAG,IAE/DA,EAAQ,UAAU,KACbkF;AAAA,EACL;AAAA,EACA,YAAYlF,EAAQ,IAAI;AAAA,IAGxBA,EAAQ,cAAc,KACjBkF,GAAY,iBAAiB,YAAYlF,EAAQ,IAAI,GAAG,IAE1DqF,GAAA,IAdEH,GAAY,yBAAyB,YAAYlF,EAAQ,IAAI,GAAG,GAiB9DmG,KAA4B,CAAAnG,MACnCA,EAAQ,UAAU,KACbkF;AAAA,EACL;AAAA,EACA,YAAYlF,EAAQ,KAAK;AAAA,IAGzBA,EAAQ,kBAAkB,KACrBkF;AAAA,EACL;AAAA,EACA,YAAYlF,EAAQ,KAAK;AAAA,IAGtBqF,GAAA,GAGIe,KAAwB,CAACxB,GAAUyB,MAC1CC,GAAY1B,GAAUyB,CAAO,IACxBnB;AAAA,EACL,eAAemB,CAAO;AAAA,EACtB,UAAUA,CAAO;AAAA,IAGdhB;AAAA,EACL;AAAA,IACE;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,GAIDkB,KAAqB,CAACC,GAAOC,IAAM,UAC1CD,EAAM,QAAQ,KACTtB,GAAY,sBAAsB,UAAUsB,EAAM,GAAG,GAAG,IAE7DC,MAAQ,SAAS,CAAC,uBAAuB,KAAKD,EAAM,GAAG,IAClDtB;AAAA,EACL;AAAA,EACA,UAAUsB,EAAM,GAAG;AAAA,IAGnB,SAASA,EAAM,QAAQ,GAAG,EAAE,IAAI,IAC3BtB;AAAA,EACL;AAAA,EACA,UAAUsB,EAAM,GAAG;AAAA,IAGhBnB,GAAA,GAGIqB,KAAsB,CAAC9B,GAAU+B,MAAa;AACzD,QAAM,EAAE,KAAAC,GAAK,IAAAC,EAAA,IAAOF;AACpB,MAAIL,GAAY1B,GAAUgC,CAAG,KACvB,CAACC;AACH,WAAOpB,GAAkB,EAAE,MAAM,iBAAiB,UAAUmB,GAAK;AAGrE,QAAM,EAAE,QAAAE,MAAWlC,EAAS;AAC5B,MAAIiC,KAAMC,EAAOF,CAAG,MAAME,EAAOF,CAAG,EAAE,eAAe,IAAI,SAAS;AAChE,WAAOnB,GAAkB,EAAE,MAAM,oBAAoB,UAAUmB,GAAK;AAGtE,QAAM,EAAE,UAAAG,IAAW,CAAA,EAAC,IAAMnC,GACpBoC,IAAQD,EAAS,QAAQ,KAAK,CAACE,MAAMA,EAAE,QAAQ,SAASL,CAAG,CAAC;AAClE,SAAIC,KAAMG,IACDvB,GAAkB,EAAE,MAAM,cAAc,UAAUmB,GAAK,IAEzDnB,GAAA;AACT,GAEayB,KAAqB,CAACtC,GAAUuC,MAAU;AACrD,QAAMC,IAAaD;AACnB,SAAIC,MAAe,KACVlC,GAAY,sBAAsB,gBAAgBkC,CAAU,GAAG,IAEnE,uBAAuB,KAAKA,CAAU,IAMvCxC,GAAU,qBAAqB,iBAAiB,GAAGwC,CAAU,EAAE,IAC1DlC;AAAA,IACL;AAAA,IACA,gBAAgBkC,CAAU;AAAA,EAAA,IAIvB/B,GAAA,IAZEH;AAAA,IACL;AAAA,IACA,gBAAgBkC,CAAU;AAAA,EAAA;AAWhC,GAEaC,KAAoB,CAACC,GAAWC,MACvCD,KAAa,QAAQA,EAAU,KAAA,EAAO,WAAW,IAC5CpC,GAAY,mCAAmC,gBAAgB,IAEpEqC,EAAc,OAAO,CAAAC,MAAKA,EAAE,QAAQF,CAAS,EAAE,SAAS,IACnDpC;AAAA,EACL,oBAAoBoC,CAAS;AAAA,EAC7B;AAAA,IAGGjC,GAAA,GCpIHoC,KAAY,CAAChD,MAAU;AAC3B,QAAM,EAAE,SAAAiD,GAAS,MAAAC,GAAM,UAAA1H,GAAU,aAAA2H,GAAa,WAAAC,MAAcpD,GACtD,EAAE,MAAAqD,GAAM,SAAAC,EAAA,IAAYF,GACpBG,IAAU5H,GAAA,GAEV6H,IAAe,CAACC,MAAc;AAClC,YAAQN,GAAA;AAAA,MACN,KAAKtD,EAAU,cAAc,SAAS;AACpC,cAAM/B,IAAS;AAAA,UACb,OAAOyF,EAAQ,QAAQ,QAAQ,MAAM,KAAA;AAAA,UACrC,MAAMA,EAAQ,QAAQ,OAAO,MAAM,KAAA;AAAA,UACnC,eAAeA,EAAQ,QAAQ,QAAQ;AAAA,QAAA,GAEnCG,IAAShC,GAA0B5D,CAAM;AAC/C,QAAA2F,EAAU,IAAIxD,GAASyD,GAAQ5F,CAAM,CAAC,GAClC4F,EAAO,aAAWJ,EAAQ,EAAK;AACnC;AAAA,MACF;AAAA,MACA,KAAKzD,EAAU,cAAc,SAAS;AACpC,cAAM/B,IAAS;AAAA,UACb,MAAMyF,EAAQ,QAAQ,OAAO,MAAM,KAAA;AAAA,UACnC,OAAOA,EAAQ,QAAQ,QAAQ,MAAM,KAAA;AAAA,UACrC,cAAcA,EAAQ,QAAQ,SAAS,MAAM,KAAA;AAAA,UAC7C,WAAWA,EAAQ,QAAQ,WAAW,MAAM,KAAA;AAAA,UAC5C,MAAMA,EAAQ,QAAQ,OAAO,MAAM,KAAA;AAAA,QAAK,GAEpCG,IAASjC,GAA0B3D,CAAM;AAC/C,QAAA2F,EAAU,IAAIxD,GAASyD,GAAQ5F,CAAM,CAAC,GAClC4F,EAAO,aAAWJ,EAAQ,EAAK;AACnC;AAAA,MACF;AAAA,MACA;AACE,gBAAQ,IAAI,YAAYH,CAAW,oBAAoB;AAAA,IAAA;AAAA,EAE7D,GAEMQ,IAAa,CAACF,MAAc;AAChC,YAAQN,GAAA;AAAA,MACN,KAAKtD,EAAU,cAAc,SAAS;AACpC,cAAM+D,IAAU;AAAA,UACd,OAAOL,EAAQ,QAAQ,QAAQ,MAAM,KAAA;AAAA,UACrC,MAAMA,EAAQ,QAAQ,OAAO,MAAM,KAAA;AAAA,UACnC,eAAeA,EAAQ,QAAQ,QAAQ;AAAA,QAAA,GAEnCzF,IAAS,EAAE,GAAGoF,GAAM,GAAGU,EAAA,GACvBF,IAAShC,GAA0B5D,CAAM;AAC/C,QAAA2F,EAAU,IAAIxD,GAASyD,GAAQ5F,CAAM,CAAC,GAClC4F,EAAO,aAAWJ,EAAQ,EAAK;AACnC;AAAA,MACF;AAAA,MACA,KAAKzD,EAAU,cAAc,SAAS;AACpC,cAAM+D,IAAU;AAAA,UACd,MAAML,EAAQ,QAAQ,OAAO,MAAM,KAAA;AAAA,UACnC,OAAOA,EAAQ,QAAQ,QAAQ,MAAM,KAAA;AAAA,UACrC,cAAcA,EAAQ,QAAQ,SAAS,MAAM,KAAA;AAAA,UAC7C,WAAWA,EAAQ,QAAQ,WAAW,MAAM,KAAA;AAAA,UAC5C,MAAMA,EAAQ,QAAQ,OAAO,MAAM,KAAA;AAAA,QAAK,GAEpCzF,IAAS,EAAE,GAAGoF,GAAM,GAAGU,EAAA,GACvBF,IAASjC,GAA0B3D,CAAM;AAC/C,QAAA2F,EAAU,IAAIxD,GAASyD,GAAQ5F,CAAM,CAAC,GAClC4F,EAAO,aAAWJ,EAAQ,EAAK;AACnC;AAAA,MACF;AAAA,MACA;AACE,gBAAQ,IAAI,YAAYH,CAAW,oBAAoB;AAAA,IAAA;AAAA,EAE7D,GAEMU,IAAe,CAACJ,MAAc;AAClC,IAAAA,EAAUP,CAAI,GACdI,EAAQ,EAAK;AAAA,EACf,GAEMQ,IAAe,CAACL,MAAc;AAClC,YAAQN,GAAA;AAAA,MACN,KAAKtD,EAAU,cAAc,SAAS;AACpC,cAAM+D,IAAU;AAAA,UACd,OAAOL,EAAQ,QAAQ,QAAQ,MAAM,KAAA;AAAA,UACrC,MAAMA,EAAQ,QAAQ,OAAO,MAAM,KAAA;AAAA,QAAK,GAEpCzF,IAAS,EAAE,GAAGoF,GAAM,GAAGU,EAAA,GACvBF,IAAShC,GAA0B5D,CAAM;AAC/C,QAAA2F,EAAU,IAAIxD,GAASyD,GAAQ5F,CAAM,CAAC,GAClC4F,EAAO,aAAWJ,EAAQ,EAAK;AACnC;AAAA,MACF;AAAA,MACA,KAAKzD,EAAU,cAAc,SAAS;AACpC,cAAM+D,IAAU;AAAA,UACd,OAAOL,EAAQ,QAAQ,QAAQ,MAAM,KAAA;AAAA,UACrC,cAAcA,EAAQ,QAAQ,SAAS,MAAM,KAAA;AAAA,UAC7C,WAAWA,EAAQ,QAAQ,WAAW,MAAM,KAAA;AAAA,UAC5C,MAAMA,EAAQ,QAAQ,OAAO,MAAM,KAAA;AAAA,QAAK,GAEpCzF,IAAS,EAAE,GAAGoF,GAAM,GAAGU,EAAA,GACvBF,IAASjC,GAA0B3D,CAAM;AAC/C,QAAA2F,EAAU,IAAIxD,GAASyD,GAAQ5F,CAAM,CAAC,GAClC4F,EAAO,aAAWJ,EAAQ,EAAK;AACnC;AAAA,MACF;AAAA,MACA;AACE,gBAAQ,IAAI,YAAYH,CAAW,oBAAoB;AAAA,IAAA;AAAA,EAE7D,GAEMY,IAAY,CAACC,GAASP,MAAc;AACxC,QAAIQ,IAAS;AACb,YAAQD,GAAA;AAAA,MACN,KAAK;AACH,QAAAC,IACE,gBAAA/I;AAAA,UAACiB;AAAA,UAAA;AAAA,YAEC,SAAQ;AAAA,YACR,SAASsH,IAAY,MAAMD,EAAaC,CAAS,IAAI,MAAM;AAAA,YAAC;AAAA,YAC7D,UAAA;AAAA,UAAA;AAAA,UAHM,mBAAmBO,CAAO;AAAA,QAAA;AAOnC;AAAA,MACF,KAAK;AACH,QAAAC,IACE,gBAAA/I;AAAA,UAACiB;AAAA,UAAA;AAAA,YAEC,SAAQ;AAAA,YACR,SAASsH,IAAY,MAAME,EAAWF,CAAS,IAAI,MAAM;AAAA,YAAC;AAAA,YAC3D,UAAA;AAAA,UAAA;AAAA,UAHM,mBAAmBO,CAAO;AAAA,QAAA;AAOnC;AAAA,MACF,KAAK;AACH,QAAAC,IACE,gBAAA/I;AAAA,UAACiB;AAAA,UAAA;AAAA,YAEC,SAAQ;AAAA,YACR,SAASsH,IAAY,MAAMK,EAAaL,CAAS,IAAI,MAAM;AAAA,YAAC;AAAA,YAC7D,UAAA;AAAA,UAAA;AAAA,UAHM,mBAAmBO,CAAO;AAAA,QAAA;AAOnC;AAAA,MACF,KAAK;AACH,QAAAC,IACE,gBAAA/I;AAAA,UAACiB;AAAA,UAAA;AAAA,YAEC,SAAQ;AAAA,YACR,SAASsH,IAAY,MAAMI,EAAaJ,CAAS,IAAI,MAAM;AAAA,YAAC;AAAA,YAC7D,UAAA;AAAA,UAAA;AAAA,UAHM,mBAAmBO,CAAO;AAAA,QAAA;AAOnC;AAAA,MACF;AACE,QAAAC,IAAS;AAAA,IAAA;AAEb,WAAOA;AAAA,EACT,GAEMC,IAAa,MAAM;AACvB,UAAMC,IAAU,CAAA;AAChB,WAAAlB,EAAQ,QAAQ,CAACmB,MAAM;AACrB,MAAAD,EAAQ,KAAKJ,EAAUK,EAAE,QAAQA,EAAE,QAAQ,CAAC,GAC5CD,EAAQ,uBAAM,QAAA,EAA0C,UAAA,IAAA,GAAhC,oBAAoBC,EAAE,MAAM,EAAU,CAAO;AAAA,IACvE,CAAC,GACMD;AAAA,EACT,GAEME,IAAY,MAAM;AACtB,UAAM1D,IAAQ,CAAA,GACR2D,IAAU,EAAE,GAAG,OAAO,IAAI,QAAQ,GAAG,QAAQ,GAAG,SAAA;AACtD,WAAArB,EAAQ,IAAI,CAACmB,MAAMzD,EAAM,KAAK2D,EAAQF,EAAE,MAAM,CAAC,CAAC,GACzCzD,EAAM,KAAK,GAAG,EAAE,OAAO,GAAG,EAAE,OAAOwC,CAAW;AAAA,EACvD;AAEA,SACE,gBAAAjI,EAAAqJ,GAAA,EACE,UAAA,gBAAAtI;AAAA,IAACuI;AAAA,IAAA;AAAA,MACC,UAAQ;AAAA,MACR,MAAK;AAAA,MACL,UAAS;AAAA,MACT,MAAAnB;AAAA,MACA,QAAQ,MAAMC,EAAQ,EAAK;AAAA,MAE3B,UAAA;AAAA,QAAA,gBAAApI,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,UAAA,gBAAAtJ,EAACsJ,EAAM,OAAN,EAAa,UAAAH,EAAA,EAAU,CAAE,EAAA,CAC5B;AAAA,QACA,gBAAAnJ,EAACsJ,EAAM,MAAN,EAAW,OAAO,EAAE,UAAU,OAAA,GAC7B,UAAA,gBAAAvI,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,UAAA,gBAAAf;AAAA,YAAC4E;AAAA,YAAA;AAAA,cACC,KAAKyD;AAAA,cACL,SAASJ;AAAA,cACT,SAASD;AAAA,cACT,UAAA1H;AAAA,YAAA;AAAA,UAAA;AAAA,4BAEDL,GAAA,EAAK,WAAU,YACd,UAAA,gBAAAc,EAACd,EAAK,OAAL,EACE,UAAA;AAAA,YAAA+I,EAAA;AAAA,YACD,gBAAAhJ,EAACuJ,IAAA,EACC,UAAA,gBAAAvJ,EAACiB,GAAA,EAAO,SAAQ,WAAU,SAAS,MAAMmH,EAAQ,EAAK,GAAG,UAAA,QAAA,CAEzD,EAAA,CACF;AAAA,UAAA,EAAA,CACF,EAAA,CACF;AAAA,QAAA,EAAA,CACF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEJ;AAEAN,GAAU,YAAY;AAAA,EACpB,SAAS5H,EAAU;AAAA,IACjBA,EAAU,MAAM;AAAA,MACd,QAAQA,EAAU,MAAM,CAAC,KAAK,MAAM,KAAK,GAAG,CAAC;AAAA,MAC7C,UAAUA,EAAU;AAAA,IAAA,CACrB;AAAA,EAAA,EACD;AAAA,EACF,MAAMA,EAAU;AAAA;AAAA,EAChB,UAAUA,EAAU;AAAA,EACpB,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,WAAWzE,EAAU,MAAM;AAAA,IACzB,MAAMA,EAAU,KAAK;AAAA,IACrB,SAASA,EAAU,KAAK;AAAA,EAAA,CACzB,EAAE;AACL;AAEA4H,GAAU,eAAe;AAAA,EACvB,MAAM,CAAA;AAAA,EACN,UAAU;AACZ;AClKA,MAAM0B,KAAQ;AAAA,EACZ,cAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,WAAAC;AAAA,EACA,0BAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,yBAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,aAAAC;AAAA,EACA,SAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,8BAAAC;AAAA,EACA,YAAAC;AAAA,EACA,YAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,cAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,cAAAC;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,KAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,qBAAAC;AAAA,EACA,YAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,gCAAAC;AACF,GAEMC,KAAe;AAAA,EACnB,WAAAC;AACF,GAGMC,KAAc,OAAO;AAAA,EACzB,OAAO;AAAA,IACL,OAAO,QAAQ/E,EAAK,EAAE,IAAI,CAAC,CAACvC,GAAK5F,CAAK,MAAM;AAAA,MAC1C4F;AAAA;AAAA,MAEA,gBAAAjH,EAACwO,IAAA,EAAgB,MAAMnN,EAAA,CAAO;AAAA,IAAA,CAC/B;AAAA,EAAA;AAEL,GAGMoN,KAAsB,OAAO;AAAA,EACjC,OAAO;AAAA,IACL,OAAO,QAAQJ,EAAY,EAAE,IAAI,CAAC,CAACpH,GAAK5F,CAAK,MAAM;AAAA,MACjD4F;AAAA;AAAA,MAEA,gBAAAjH,EAACwO,IAAA,EAAgB,MAAMnN,GAAO,MAAI,GAAA,CAAC;AAAA,IAAA,CACpC;AAAA,EAAA;AAEL,GAGAqN,IAAe;AAAA,EACb,GAAGH;AAAA,EACH,GAAGE;AACL,GCjMAE,KAAe,OAAO,OAAO;AAAA;AAAA,EAE3B,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA;AAAA,EAEN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA;AAAA,EAEP,MAAM;AAAA;AAAA,EAEN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AACR,CAAC,GCZKC,KAAW,CAAC3L,MACZ,OAAOA,KAAQ,WACV,KAEFA,EAAI,QAAQ,UAAU,CAACI,MAAUA,EAAM,aAAa,GAGvDwL,KAAK,CAACC,GAAOC,MAAa;AAC9B,QAAMC,IAAa;AAAA,IACjB,MAAM;AAAA,EAAA;AAER,SAAIF,KAAS,IAAUC,IACnBC,EAAWD,CAAQ,IAAUC,EAAWD,CAAQ,IAC7CA,EAAS,SAAS,GAAG,IAAIA,IAAW,GAAGA,CAAQ;AACxD,GAkCME,KAAS,CAACC,GAAM1J,IAAM,OAAO;AACjC,MAAI,CAACmJ,GAAGO,CAAI,UAAU3J,GAAA;AACtB,QAAMK,IAAY,IAAI,KAAKsJ,EAAK,CAAC,CAAC,GAC5BC,IAAW3J,IAAM,GAAGmJ,GAAGO,CAAI,CAAC,IAAI1J,CAAG,KAAKmJ,GAAGO,CAAI;AACrD,SAAOtJ,IAAYF,GAAcyJ,CAAQ,IAAI5J,GAAY4J,CAAQ;AACnE,GAEMC,KAAU,CAACF,GAAM1J,IAAM,OACpB,GAAGmJ,GAAGO,CAAI,KAAK,EAAE,IAAI1J,CAAG,GAAG,KAAA,GAG9B6J,KAAU,CAACC,IAAQ,cAAc;AACrC,UAAQA,GAAA;AAAA,IACN,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO,MAAMA,CAAK;AAAA,EAAA;AAExB,GCvEAC,KAAe,OAAO,OAAO;AAAA,EAC3B,oBAAoB;AAAA,EACpB,WAAW;AAAA,EACX,WAAW;AAAA,EACX,eAAe;AAAA,EACf,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,kBAAkB;AAAA,EAClB,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,iBAAiB;AAAA,EACjB,cACE,gBAAAxO,EAAAsI,GAAA,EAAE,UAAA;AAAA,IAAA;AAAA,sBAEC,MAAA,EAAG;AAAA,IAAE;AAAA,EAAA,GAER;AAAA,EAEF,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,OAAO;AAAA,EACP,MAAM,CAACmG,MAAQ,QAAQZ,GAASY,CAAG,CAAC;AAAA,EACpC,kBACE,gBAAAzO,EAAAsI,GAAA,EAAE,UAAA;AAAA,IAAA;AAAA,sBAEC,MAAA,EAAG;AAAA,IAAE;AAAA,EAAA,GAER;AAAA,EAEF,QAAQ,CAACmG,MAAQ,gBAAgBZ,GAASY,CAAG,CAAC;AAAA,EAC9C,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,MAAM;AAAA,EACN,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,WAAW,CAACA,MAAQ,QAAQZ,GAASY,CAAG,CAAC;AAAA,EACzC,iBAAiB,CAACA,MAAQ,eAAeA,CAAG;AAAA,EAC5C,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,SAAS;AAAA,EACT,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,WAAW,CAACA,MACV,gBAAAzO,EAAAsI,GAAA,EACG,UAAA;AAAA,IAAAmG;AAAA,IAAI;AAAA,sBAAE,MAAA,EAAG;AAAA,IAAE;AAAA,EAAA,GACd;AAAA,EAEF,aAAa;AAAA,EACb,aAAa;AAAA,EACb,UAAU;AAAA,EACV,WAAW;AAAA,EACX,OAAO;AAAA,EACP,SAAS;AAAA,EACT,oBAAoB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV,qBAAqB;AAAA,EACrB,SAAS;AAAA,EACT,aACE,gBAAAzO,EAAAsI,GAAA,EAAE,UAAA;AAAA,IAAA;AAAA,sBAEC,MAAA,EAAG;AAAA,IAAE;AAAA,EAAA,GAER;AAAA,EAEF,aACE,gBAAAtI,EAAAsI,GAAA,EAAE,UAAA;AAAA,IAAA;AAAA,sBAEC,MAAA,EAAG;AAAA,IAAE;AAAA,EAAA,GAER;AAAA,EAEF,aAAa;AAAA,EACb,UAAU;AAAA,EACV,eAAe;AAAA,EACf,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,WAAW;AAAA,EACX,cAAc;AAAA,EACd,cAAc;AAAA,EACd,oBACE,gBAAAtI,EAAAsI,GAAA,EAAE,UAAA;AAAA,IAAA;AAAA,sBAEC,MAAA,EAAG;AAAA,IAAE;AAAA,EAAA,GAER;AAAA,EAEF,oBACE,gBAAAtI,EAAAsI,GAAA,EAAE,UAAA;AAAA,IAAA;AAAA,sBAEC,MAAA,EAAG;AAAA,IAAE;AAAA,EAAA,GAER;AAAA,EAEF,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,yBAAyB;AAAA,EACzB,gBAAgB;AAAA,EAChB,cAAc;AAAA,EACd,cAAc;AAAA,EACd,UAAU;AAAA,EACV,SAAS;AAAA,EACT,aAAa;AACf,CAAC,GCxHKoG,KAAW,CAAC,EAAE,KAAAC,GAAK,UAAA7P,GAAU,WAAA8P,QAAgB;AACjD,QAAMC,IAAOF,EAAI,MAAM,GAAG,GACpB,CAACG,CAAG,IAAIC,EAAS,OAAOF,EAAK,CAAC,CAAC,IAAIG,GAAA,CAAQ,EAAE,GAC7CC,IACJ,OAAOT,GAAIK,EAAK,CAAC,CAAC,KAAM,aACpBL,GAAIK,EAAK,CAAC,CAAC,EAAEA,EAAK,CAAC,CAAC,IACpBL,GAAIK,EAAK,CAAC,CAAC,KAAK,cAOhBK,IAHJC,GAAerQ,CAAQ,KAAKA,EAAS,SAASA,EAAS,MAAM,WAI7D,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,eAAe;AAAA,QACf,QAAQ;AAAA,MAAA;AAAA,MAEV,UAAU;AAAA,MAET,UAAAH;AAAA,IAAA;AAAA,EAAA,IAGHA;AAGF,SACE,gBAAAG;AAAA,IAACmQ;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,MACX,WAAWR,KAAa;AAAA,MACxB,SAAS,gBAAA3P,EAACoQ,IAAA,EAAQ,IAAIP,GAAM,eAAW,cAAa;AAAA,MAEnD,UAAAI;AAAA,IAAA;AAAA,EAAA;AAGP;AAEAR,GAAS,YAAY;AAAA,EACnB,KAAKvP,EAAU;AAAA,EACf,UAAUA,EAAU,KAAK;AAAA,EACzB,WAAWA,EAAU,MAAM,CAAC,OAAO,SAAS,UAAU,MAAM,CAAC;AAC/D;AAEAuP,GAAS,eAAe,EAAE,KAAK,OAAO,WAAW,MAAA;AC1CjD,SAASY,GAAWvL,GAAO;AACzB,QAAM,EAAE,UAAAwL,GAAU,aAAArI,EAAA,IAAgBnD,GAC5B,CAACqD,GAAMC,CAAO,IAAI0H,EAAS,EAAK;AAEtC,SAAI7H,MAAgBtD,EAAU,cAAc,UAAgB,OAG1D,gBAAA5D,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,MAAS,KAAK,UAAUxH,EAAY,YAAA,CAAa,IAChD,UAAA,gBAAAlH;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,SAAS,MAAMmH,EAAQ,EAAI;AAAA,QAC3B,SAAQ;AAAA,QACR,WAAU;AAAA,QAET,UAAA;AAAA,UAAAsG,EAAO;AAAA,UAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEnB;AAAA,IACA,gBAAA1O;AAAA,MAAC8H;AAAA,MAAA;AAAA,QACC,SAAS,CAAC,EAAE,QAAQ,KAAK,UAAUwI,GAAU;AAAA,QAC7C,aAAArI;AAAA,QACA,WAAW,EAAE,MAAAE,GAAM,SAAAC,EAAA;AAAA,MAAQ;AAAA,IAAA;AAAA,EAC7B,GACF;AAEJ;AAEAiI,GAAW,YAAY;AAAA,EACrB,UAAUnQ,EAAU,KAAK;AAAA,EACzB,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AACL;AAEA0L,GAAW,eAAe,CAAA;ACtC1B,MAAME,KAAc,CAAC,EAAE,QAAAC,GAAQ,WAAAC,GAAW,cAAAC,GAAc,cAAAC,GAAc,UAAA9Q,EAAA,MACpE,gBAAAkB,EAACwI,IAAA,EAAY,WAAU,QACpB,UAAA;AAAA,EAAAkH;AAAA,EACAD;AAAA,EACD,gBAAAxQ,EAACyP,IAAA,EAAS,KAAI,cACZ,4BAACxO,GAAA,EAAO,SAASyP,GAAc,SAAQ,qBAAoB,WAAU,4BAClE,UAAAhC,EAAO,mBACV,GACF;AAAA,EACA,gBAAA1O,EAACyP,IAAA,EAAS,KAAI,cACZ,4BAACxO,GAAA,EAAO,SAAS0P,GAAc,SAAQ,qBAAoB,WAAU,4BAClE,UAAAjC,EAAO,cACV,GACF;AAAA,EACC7O;AAAA,GACH;AAGF0Q,GAAY,YAAY;AAAA,EACtB,QAAQrQ,EAAU;AAAA,EAClB,WAAWA,EAAU;AAAA,EACrB,cAAcA,EAAU,KAAK;AAAA,EAC7B,cAAcA,EAAU,KAAK;AAC/B;AAEAqQ,GAAY,eAAe,EAAE,QAAQ,MAAM,WAAW,KAAA;ACrBtD,SAASK,GAAY9L,GAAO;AAC1B,QAAM,EAAE,MAAAkD,GAAM,UAAA6I,GAAU,UAAAC,GAAU,QAAAC,GAAQ,aAAA9I,MAAgBnD,GACpD,CAACqD,GAAMC,CAAO,IAAI0H,EAAS,EAAK,GAEhCkB,IAAW,MAAM;AACrB,IAAAH,EAAA,GACAzI,EAAQ,EAAI;AAAA,EACd;AAEA,SACE,gBAAArH,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,MAAS,KAAK,aAAaxH,EAAY,aAAa,IACnD,UAAA,gBAAAjI,EAACiB,GAAA,EAAO,SAAQ,SAAQ,MAAK,MAAK,SAAS+P,GACxC,UAAAtC,EAAO,UACV,GACF;AAAA,IACA,gBAAA1O;AAAA,MAAC8H;AAAA,MAAA;AAAA,QACC,SAAS;AAAA,UACP,EAAE,QAAQ,KAAK,UAAUiJ,EAAA;AAAA,UACzB,EAAE,QAAQ,KAAK,UAAUD,EAAA;AAAA,QAAS;AAAA,QAEpC,MAAA9I;AAAA,QACA,UAAU;AAAA,QACV,UAAU+I;AAAA,QACV,aAAA9I;AAAA,QACA,WAAW,EAAE,MAAAE,GAAM,SAAAC,EAAA;AAAA,MAAQ;AAAA,IAAA;AAAA,EAC7B,GACF;AAEJ;AAEAwI,GAAY,YAAY;AAAA,EACtB,MAAM1Q,EAAU;AAAA,EAChB,UAAUA,EAAU,KAAK;AAAA,EACzB,QAAQA,EAAU,KAAK;AAAA,EACvB,UAAUA,EAAU,KAAK;AAAA,EACzB,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AACL;AAEAiM,GAAY,eAAe,CAAA;AC3C3B,SAASK,GAAYnM,GAAO;AAC1B,QAAM,EAAE,MAAAkD,GAAM,QAAAkJ,GAAQ,UAAAL,GAAU,aAAA5I,MAAgBnD,GAC1C,CAACqD,GAAMC,CAAO,IAAI0H,EAAS,EAAK,GAEhCkB,IAAW,MAAM;AACrB,IAAAH,EAAA,GACAzI,EAAQ,EAAI;AAAA,EACd;AAEA,SACE,gBAAArH,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,MAAS,KAAK,QAAQxH,EAAY,aAAa,IAC9C,UAAA,gBAAAjI,EAACiB,GAAA,EAAO,SAAQ,SAAQ,MAAK,MAAK,SAAS+P,GACxC,UAAAtC,EAAO,SACV,GACF;AAAA,IACA,gBAAA1O;AAAA,MAAC8H;AAAA,MAAA;AAAA,QACC,SAAS,CAAC,EAAE,QAAQ,MAAM,UAAUoJ,GAAQ;AAAA,QAC5C,MAAAlJ;AAAA,QACA,UAAQ;AAAA,QACR,UAAUkJ;AAAA,QACV,aAAAjJ;AAAA,QACA,WAAW,EAAE,MAAAE,GAAM,SAAAC,EAAA;AAAA,MAAQ;AAAA,IAAA;AAAA,EAC7B,GACF;AAEJ;AAEA6I,GAAY,YAAY;AAAA,EACtB,MAAM/Q,EAAU;AAAA,EAChB,QAAQA,EAAU,KAAK;AAAA,EACvB,UAAUA,EAAU,KAAK;AAAA,EACzB,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AACL;AAEAsM,GAAY,eAAe,CAAA;AC3C3B,MAAME,KAAgB,EAAE,MAAM,KAAM,MAAM,EAAA,GACpCC,KAAoB,OACpBC,KAAkB,CAAC,SAAS,OAAO,GAEnCC,KAAgB,CAACjQ,MACjB,OAAOA,KAAU,WACZ,EAAE,MAAMA,GAAO,MAAM,EAAA,IAE1BA,KAAS,OAAOA,KAAU,WACrB;AAAA,EACL,MAAMA,EAAM,QAAQ8P,GAAc;AAAA,EAClC,MAAM9P,EAAM,QAAQ8P,GAAc;AAAA,IAG/BA,IAGHI,KAAwB,CAACC,GAASC,MAAc;AACpD,MAA6BD,KAAY;AACvC,WAAOA;AAET,MAAI,CAACC,EAAW,QAAO;AAEvB,QAAM,CAACC,GAAMC,CAAI,IAAIF,EAAU,MAAM,GAAG,GAClCG,IAASrC,GAAImC,CAAI;AAEvB,SAAI,OAAOE,KAAW,aACbA,EAAOD,CAAI,IAGbC,KAAU;AACnB,GAEMC,KAAgBzR;AAAA,EACpB,CACE;AAAA,IACE,SAAAoR;AAAA,IACA,WAAAC;AAAA,IACA,WAAA9B;AAAA,IACA,OAAAmC;AAAA,IACA,SAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAtS;AAAA,IACA,GAAGuS;AAAA,EAAA,GAEL7R,MACG;AACH,UAAM,CAAC8R,CAAS,IAAIvC,EAAS,MAAM,kBAAkBC,GAAA,CAAQ,EAAE,GAEzDuC,IAAiBC;AAAA,MACrB,MAAMhB,GAAsBC,GAASC,CAAS;AAAA,MAC9C,CAACD,GAASC,CAAS;AAAA,IAAA,GAGfe,IAAaD,GAAQ,MAAMjB,GAAcQ,CAAK,GAAG,CAACA,CAAK,CAAC,GACxDW,IAAiB9C,KAAayB,IAC9BsB,IAAeX,KAAWV,IAE1BsB,IAAsB,EAAE,GAAGP,GAAa,KAAA7R,EAAA,GAExCqS,IAAgB,gBAAA5S,EAACiB,GAAA,EAAQ,GAAG0R,GAAsB,UAAA9S,GAAS;AAEjE,QAAI,CAACyS;AACH,aAAOM;AAKT,UAAMC,IAFW,EAAQF,EAAoB,WAG3C,gBAAA3S;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,CAAC,0BAA0B,iBAAiBkS,CAAgB,EACpE,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,QACX,OAAO;AAAA,UACL,eAAe;AAAA,UACf,QAAQ;AAAA,UACR,GAAGC;AAAA,QAAA;AAAA,QAEL,UAAU;AAAA,QAET,UAAAS;AAAA,MAAA;AAAA,IAAA,IAGHA;AAGF,WACE,gBAAA5S;AAAA,MAACmQ;AAAA,MAAA;AAAA,QACC,OAAOqC;AAAA,QACP,WAAWC;AAAA,QACX,SAASC;AAAA,QACT,SACE,gBAAA1S;AAAA,UAACoQ;AAAA,UAAA;AAAA,YACC,IAAIiC;AAAA,YACJ,WAAWL;AAAA,YACV,GAAGC;AAAA,YAEH,UAAAK;AAAA,UAAA;AAAA,QAAA;AAAA,QAIJ,UAAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEAhB,GAAc,cAAc;AAE5BA,GAAc,YAAY;AAAA,EACxB,SAAS3R,EAAU;AAAA,EACnB,WAAWA,EAAU;AAAA,EACrB,WAAWA,EAAU,MAAM,CAAC,OAAO,SAAS,UAAU,MAAM,CAAC;AAAA,EAC7D,OAAOA,EAAU,UAAU;AAAA,IACzBA,EAAU;AAAA,IACVA,EAAU,MAAM;AAAA,MACd,MAAMA,EAAU;AAAA,MAChB,MAAMA,EAAU;AAAA,IAAA,CACjB;AAAA,EAAA,CACF;AAAA,EACD,SAASA,EAAU,UAAU;AAAA,IAC3BA,EAAU;AAAA,IACVA,EAAU,QAAQA,EAAU,MAAM;AAAA,EAAA,CACnC;AAAA,EACD,kBAAkBA,EAAU;AAAA,EAC5B,cAAcA,EAAU;AAAA,EACxB,kBAAkBA,EAAU;AAAA,EAC5B,cAAcA,EAAU;AAAA,EACxB,UAAUA,EAAU,KAAK;AAC3B;AAEA2R,GAAc,eAAe;AAAA,EAC3B,SAAS;AAAA,EACT,WAAW;AAAA,EACX,WAAWT;AAAA,EACX,OAAOD;AAAA,EACP,SAASE;AAAA,EACT,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,cAAc;AAChB;AChJA,MAAMyB,KAAiB,CAACC,MAAW;AACjC,QAAM;AAAA,IACJ,MAAA/K;AAAA,IACA,QAAAkJ;AAAA,IACA,UAAAJ;AAAA,IACA,QAAAC;AAAA,IACA,YAAAiC;AAAA,IACA,MAAAC;AAAA,IACA,aAAAhL;AAAA,EAAA,IACE8K,GAEE/B,IAAW,MAAM;AACrB,IAAAiC,EAAK,YAAY,IAAM,EAAI;AAAA,EAC7B,GAEMC,IAAa,CAAChK,MAAM;AACxB,IAAA+J,EAAK,YAAY,IAAM,EAAI,GAC3BD,EAAW9J,CAAC;AAAA,EACd;AAEA,SACE,gBAAAnI,EAAC,QAAA,EAAK,WAAU,uBACd,UAAA;AAAA,IAAA,gBAAAf;AAAA,MAACiR;AAAA,MAAA;AAAA,QACC,MAAAjJ;AAAA,QACA,UAAUgJ;AAAA,QACV,QAAAE;AAAA,QACA,aAAAjJ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAjI;AAAA,MAAC4Q;AAAA,MAAA;AAAA,QACC,MAAA5I;AAAA,QACA,UAAUgJ;AAAA,QACV,UAAAF;AAAA,QACA,QAAAC;AAAA,QACA,aAAA9I;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAjI;AAAA,MAAC6R;AAAA,MAAA;AAAA,QACC,SAAS,UAAU5J,CAAW;AAAA,QAC9B,WAAU;AAAA,QACV,OAAO;AAAA,QACP,kBAAiB;AAAA,QACjB,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,SAAS,MAAMiL,EAAWlL,CAAI;AAAA,QAE7B,UAAA0G,EAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EACV,GACF;AAEJ,GC/CMyE,KAAgBC,GAAK,CAACtO,MAAU;AACpC,QAAM;AAAA,IACJ,KAAA4K;AAAA,IACA,IAAA2D;AAAA,IACA,MAAAC;AAAA,IACA,SAAAC;AAAA,IACA,SAAAlT;AAAA,IACA,OAAAmT;AAAA,IACA,IAAAC;AAAA,IACA,UAAAC;AAAA,IACA,KAAAC;AAAA,IACA,QAAAC;AAAA,IACA,IAAAC;AAAA,EAAA,IACE/O,GACEgP,IAAUH,IAAM,gBAAA5S,EAAC,QAAA,EAAM,UAAA;AAAA,IAAA4S;AAAA,IAAI;AAAA,EAAA,EAAA,CAAC,IAAU,IACtCI,IACJ,gBAAAhT;AAAA,IAACiT,GAAS;AAAA,IAAT;AAAA,MACC,UAAU,GAAGtE,CAAG;AAAA,MAChB,SAAS,MAAM6D,EAAQlT,CAAO;AAAA,MAE7B,UAAA;AAAA,QAAAqO,EAAO+E,CAAE;AAAA,QAAE;AAAA,QAAalE,GAAIG,CAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGpC,SAAImE,MAAO,SACFE,IAGP,gBAAAhT;AAAA,IAAC8Q;AAAA,IAAA;AAAA,MACC,WAAWnC;AAAA,MACX,WAAW8D;AAAA,MACX,SAASH,KAAM;AAAA,MACf,MAAMC,KAAQ;AAAA,MACd,WAAWM;AAAA,MACX,UAAAF;AAAA,MACA,SAAS,CAACxK,MAAM;AACd,QAAAA,EAAE,gBAAA,GACFqK,EAAQlT,CAAO;AAAA,MACjB;AAAA,MAEC,UAAA;AAAA,QAAAyT,MAAY,MAAMpF,EAAO+E,CAAE;AAAA,QAC3BK,MAAY,MACX,gBAAA/S,EAAAsI,GAAA,EACG,UAAA;AAAA,UAAAqF,EAAO+E,CAAE;AAAA,UAAE;AAAA,UACXK;AAAA,QAAA,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;AAEDX,GAAc,YAAY;AAAA,EACxB,KAAKjT,EAAU;AAAA,EACf,SAASA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,IAAI,CAAC;AAAA,EAC/D,SAASA,EAAU,KAAK;AAAA,EACxB,IAAIA,EAAU;AAAA,EACd,MAAMA,EAAU;AAAA,EAChB,OAAOA,EAAU;AAAA,EACjB,IAAIA,EAAU;AAAA,EACd,UAAUA,EAAU;AAAA,EACpB,KAAKA,EAAU;AAAA,EACf,QAAQA,EAAU;AAAA,EAClB,IAAIA,EAAU;AAChB;AAEAiT,GAAc,eAAe;AAAA,EAC3B,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,UAAU;AAAA,EACV,KAAK;AAAA,EACL,SAAS,CAAA;AAAA,EACT,QAAQ;AAAA,EACR,IAAI;AACN;AC/EA,MAAMc,KAAQ;AAAA,EACZ,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,EAAA;AAAA,EAEP,OAAO;AAAA,IACL,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,KAAK;AAAA,EAAA;AAET,GAEMC,KAAiB,CAACnB,MAAW;AACjC,QAAM,EAAE,MAAA/K,GAAM,cAAAmM,GAAc,MAAAlB,GAAM,OAAA5R,MAAU0R,GAEtCqB,IAAa,CAAClL,MAAM;AACxB,IAAA+J,EAAK,YAAY,IAAM,EAAI,GAC3BkB,EAAajL,CAAC;AAAA,EAChB;AAEA,SACE,gBAAAlJ;AAAA,IAACmT;AAAA,IAAA;AAAA,MACC,KAAKc,GAAM5S,CAAK,EAAE;AAAA,MAClB,SAAS+S;AAAA,MACT,SAASpM;AAAA,MACT,IAAIiM,GAAM5S,CAAK,EAAE;AAAA,MACjB,MAAK;AAAA,MACL,QAAQ4S,GAAM5S,CAAK,EAAE;AAAA,MACrB,IAAI4S,GAAM5S,CAAK,EAAE;AAAA,IAAA;AAAA,EAAA;AAGvB,GChCMgT,KAAe,CAAC,EAAE,MAAArM,GAAM,MAAAiL,GAAM,aAAAhL,QAAkB;AACpD,QAAM,CAACE,GAAMC,CAAO,IAAI0H,EAAS,EAAK,GAEhCwE,IAAS,MAAM;AACnB,IAAAlM,EAAQ,EAAI;AAAA,EACd,GAEMmM,IAAc,MAAM;AACxB,IAAAnM,EAAQ,EAAK;AAAA,EACf,GAGMoM,IAAiB,MACjBvM,MAAgBtD,EAAU,cAAc,UACnC;AAAA,IACL,OAAO;AAAA,IACP,OAAOqD,GAAM,eAAe;AAAA,IAC5B,QAAQ;AAAA,EAAA,IAGH;AAAA,IACL,OAAO;AAAA,IACP,OAAOA,GAAM,QAAQ;AAAA,IACrB,QAAQ;AAAA,EAAA,GAKRyM,IAAgB;AAAA,IACpB;AAAA,MACE,OAAO,GAAGxM,CAAW;AAAA,MACrB,OAAOD,GAAM,SAAS;AAAA,MACtB,QAAQ;AAAA,IAAA;AAAA,IAEVwM,EAAA;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAOxM,GAAM,WAAW;AAAA,MACxB,QAAQ;AAAA,IAAA;AAAA,IAEV;AAAA,MACE,OAAO;AAAA,MACP,OAAOA,GAAM,QAAQ;AAAA,MACrB,QAAQ;AAAA,MACR,QAAQ;AAAA,IAAA;AAAA,IAEV;AAAA,MACE,OAAO;AAAA,MACP,OAAOA,GAAM,eAAe;AAAA,MAC5B,QAAQ;AAAA,IAAA;AAAA,IAEV;AAAA,MACE,OAAO;AAAA,MACP,OAAOA,GAAM,cAAc;AAAA,MAC3B,QAAQ;AAAA,IAAA;AAAA,IAEV;AAAA,MACE,OAAO;AAAA,MACP,OAAOA,GAAM,aAAa;AAAA,MAC1B,QAAQ;AAAA,IAAA;AAAA,IAEV;AAAA,MACE,OAAO;AAAA,MACP,OAAOA,GAAM,cAAc;AAAA,MAC3B,QAAQ;AAAA,MACR,QAAQ;AAAA,IAAA;AAAA,EACV,GAGI0M,IAAaD,EAAc,OAAO,CAAArO,MAASA,EAAM,WAAW,MAAM,GAClEuO,IAAcF,EAAc,OAAO,CAAArO,MAASA,EAAM,WAAW,OAAO,GAEpEwO,IAAc,CAACxO,GAAOyO,MAC1B,gBAAA9T,EAAC,OAAA,EAAgB,WAAU,QACzB,UAAA;AAAA,IAAA,gBAAAf,EAAC,UAAA,EAAO,WAAU,cAAc,UAAAoG,EAAM,OAAM;AAAA,IAC5C,gBAAApG,EAAC,OAAA,EAAI,WAAU,QACZ,YAAM,SACL,gBAAAA,EAAC,QAAA,EAAK,WAAU,SAAS,UAAAoG,EAAM,OAAM,IAErCA,EAAM,MAAA,CAEV;AAAA,EAAA,EAAA,GARQyO,CASV;AAGF,SACE,gBAAA9T,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAAC,QAAA,EAAK,WAAU,0CACd,UAAA,gBAAAA;AAAA,MAACmT;AAAA,MAAA;AAAA,QACC,KAAI;AAAA,QACJ,IAAG;AAAA,QACH,SAAS,MAAMmB,EAAA;AAAA,QACf,MAAK;AAAA,QACL,IAAG;AAAA,QACH,KAAKtM,GAAM,WAAW;AAAA,QACtB,YAAYG;AAAA,MAAA;AAAA,IAAA,GAEhB;AAAA,IACA,gBAAApH;AAAA,MAACuI;AAAA,MAAA;AAAA,QACC,MAAAnB;AAAA,QACA,UAAS;AAAA,QACT,UAAU;AAAA,QACV,UAAQ;AAAA,QACR,MAAK;AAAA,QACL,QAAQoM;AAAA,QAER,UAAA;AAAA,UAAA,gBAAAvU,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,UAAA,gBAAAtJ,EAACsJ,EAAM,OAAN,EAAa,UAAA,GAAGrB,CAAW,eAAA,CAAe,GAC7C;AAAA,UACA,gBAAAjI,EAACsJ,EAAM,MAAN,EAAW,WAAU,OACnB,UAAAtB,IACC,gBAAAjH,EAAC,OAAA,EAAI,WAAU,OACb,UAAA;AAAA,YAAA,gBAAAf,EAAC,SAAI,WAAU,YACZ,UAAA0U,EAAW,IAAIE,CAAW,GAC7B;AAAA,8BACC,OAAA,EAAI,WAAU,YACZ,UAAAD,EAAY,IAAIC,CAAW,EAAA,CAC9B;AAAA,UAAA,EAAA,CACF,sBAEC,OAAA,EAAI,WAAU,0BACb,UAAA,gBAAA5U,EAAC,KAAA,EAAE,UAAA,qCAAA,CAAkC,EAAA,CACvC,EAAA,CAEJ;AAAA,UACA,gBAAAA,EAACsJ,EAAM,QAAN,EAAa,WAAU,yBACtB,UAAA,gBAAAtJ,EAACiB,GAAA,EAAO,SAAQ,aAAY,SAASsT,GAAa,mBAElD,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,GCtIaO,KAAS,CAAC,EAAE,OAAArP,GAAO,UAAA5F,0BAE3B,QAAA,EACC,UAAA;AAAA,EAAA,gBAAAkB,EAAC,QAAA,EAAK,WAAU,eAAe,UAAA;AAAA,IAAA0E;AAAA,IAAM;AAAA,EAAA,GAAE;AAAA,EACtC5F;AAAA,GACH;AAIJiV,GAAO,YAAY;AAAA,EACjB,OAAO5U,EAAU,OAAO;AAAA,EACxB,UAAUA,EAAU,KAAK;AAC3B;AAEO,MAAM6U,KAAM,CAAC,EAAE,IAAA7N,IAAK,SACpBA,IACE,gBAAAlH,EAAC,QAAA,EAAM,UAAA0O,EAAO,eAAA,CAAe,IADpB;AAIlBqG,GAAI,YAAY,EAAE,IAAI7U,EAAU,KAAA;AAChC6U,GAAI,eAAe,EAAE,IAAI,GAAA;ACpBzB,MAAMC,KAAc,CAAC,EAAE,MAAAhN,QACjB,CAACA,KAAS,CAACA,EAAK,QAAQ,CAACA,EAAK,aACzB,OAGF,gBAAAhI,EAAC+U,IAAA,EAAI,IAAE,GAAA,CAAC,GAGXE,KAAmB,CAAClC,MAAW;AACnC,QAAM,EAAE,MAAA/K,GAAM,QAAAkN,GAAQ,MAAAjC,EAAA,IAASF;AAO/B,SACE,gBAAAhS,EAAC,QAAA,EAAK,WAAU,0CACd,UAAA;AAAA,IAAA,gBAAAf;AAAA,MAACmT;AAAA,MAAA;AAAA,QACC,KAAI;AAAA,QACJ,IAAG;AAAA,QACH,SAASnL;AAAA,QACT,SAXS,CAACkB,MAAM;AACpB,UAAA+J,EAAK,YAAY,IAAM,EAAI,GAC3BiC,EAAOhM,CAAC;AAAA,QACV;AAAA,QASM,MAAK;AAAA,QACL,IAAG;AAAA,MAAA;AAAA,IAAA;AAAA,IAEL,gBAAAlJ,EAACgV,IAAA,EAAY,MAAMhN,EAAK,oBAAA,CAAqB;AAAA,EAAA,GAC/C;AAEJ,GCrBMmN,KAAgB;AAAA,EACpB,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AACZ,GAEMC,KAAU,CAAC,EAAE,YAAAC,GAAY,UAAAC,GAAU,UAAAC,GAAU,OAAAC,GAAO,aAAAC,GAAa,YAAAC,GAAY,iBAAAC,GAAiB,kBAAAC,QAAuB;AACzH,QAAM,CAACC,CAAO,IAAI/F,EAASuF,CAAU,GAC/BS,IAAUrV,GAAA,GACVsV,IAAYxD,GAAQ,OAAO,EAAE,QAAQ,QAAQ,OAAO,WAAW,EAAE,GACjE,CAACyD,GAASC,CAAU,IAAInG,EAASwF,KAAY,CAAA,CAAE,GAC/CY,IAAgBzV,GAAO,IAAI,GAE3B0V,IAAsBC,GAAY,MAAM;AAC5C,QAAI,CAACN,GAAS,SAAS,IAAK;AAE5B,UAAMO,IAAgBP,EAAQ,QAAQ,IAAI,iBAAA;AAC1C,QAAIO,EAAc,SAAS,GAAG;AAC5B,YAAMpD,IAAOoD,EAAc,CAAC;AAC5B,MAAAP,EAAQ,QAAQ,IAAI,kBAAkB7C,GAAM,KAAK;AAAA,IACnD;AAAA,EACF,GAAG,CAAA,CAAE,GAECqD,IAAgBF,GAAY,MAAM;AACtC,IAAIN,GAAS,SAAS,OACpB,WAAW,MAAM;AACf,eAAS,cAAc,kBAAkB,EAAE,MAAM,SAAS;AAAA,IAC5D,GAAG,GAAG;AAAA,EAEV,GAAG,CAAA,CAAE;AAGL,EAAAS,GAAU,MAAM;AACd,IAAIZ,KACFA,EAAgBW,CAAa;AAAA,EAEjC,GAAG,CAACX,GAAiBW,CAAa,CAAC;AAEnC,QAAME,IAAiBJ,GAAY,MAAM;AACvC,IAAIN,GAAS,SAAS,QACpBA,EAAQ,QAAQ,IAAI,YAAA,GACpBI,EAAc,UAAU;AAAA,EAE5B,GAAG,CAAA,CAAE;AAGL,EAAAK,GAAU,MAAM;AACd,IAAIX,KACFA,EAAiBY,CAAc;AAAA,EAEnC,GAAG,CAACZ,GAAkBY,CAAc,CAAC;AAErC,QAAMC,IAAiBL,GAAY,MAAM;AACvC,IAAIN,GAAS,SAAS,OACpB,WAAW,MAAM;AACf,eAAS,cAAc,kBAAkB,EAAE,MAAM,SAAS,QAC1DK,EAAA;AAAA,IACF,GAAG,GAAG;AAAA,EAEV,GAAG,CAAA,CAAE;AAEL,SAAAI,GAAU,MAAM;AACd,IAAId,IACFgB,EAAA,IAEAH,EAAA;AAAA,EAEJ,GAAG,CAACb,GAAaa,GAAeG,CAAc,CAAC,GAE/CF,GAAU,MAAM;AACd,UAAMG,IAAkBZ,GAAS,SAAS,KAAK,gBAAA,IAAoB,CAAC;AACpE,IAAIY,GAAiB,KACnBR,EAAc,UAAUQ,EAAgB,KAExCR,EAAc,UAAU,MAE1BD,EAAWX,CAAQ,GACnB,sBAAsB,MAAM;AAC1B,MAAIY,EAAc,WAAWJ,GAAS,SAAS,OAC7CA,EAAQ,QAAQ,IAAI,YAAY,CAAC7C,MAAS;AACxC,QAAIA,EAAK,KAAK,OAAOiD,EAAc,WACjCjD,EAAK,YAAY,EAAI;AAAA,MAEzB,CAAC;AAAA,IAEL,CAAC;AAAA,EACH,GAAG,CAACqC,CAAQ,CAAC,GAEbiB,GAAU,MAAM;AACd,IAAIT,GAAS,SAAS,OACpBA,EAAQ,QAAQ,IAAI,cAAc,mBAAmBJ,KAAc,EAAE;AAAA,EAEzE,GAAG,CAACA,CAAU,CAAC,GAGb,gBAAA1V,EAAAqJ,GAAA,EACE,4BAAC,OAAA,EAAI,IAAG,mBAAkB,OAAO0M,GAAW,WAAWP,GACrD,UAAA,gBAAAxV;AAAA,IAAC2W;AAAA,IAAA;AAAA,MACC,KAAKb;AAAA,MACL,YAAYD;AAAA,MAAA,eACZV;AAAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,sBAAsB;AAAA,MAAA;AAAA,MAGxB,SAAAa;AAAA,IAAA;AAAA,EAAA,GAEJ,EAAA,CACF;AAEJ;AAEAZ,GAAQ,YAAY;AAAA,EAClB,YAAYlV,EAAU,MAAM;AAAA,EAC5B,UAAUA,EAAU,MAAM;AAAA,EAC1B,UAAUA,EAAU;AAAA,EACpB,OAAOA,EAAU;AAAA,EACjB,aAAaA,EAAU;AAAA,EACvB,YAAYA,EAAU;AAAA,EACtB,iBAAiBA,EAAU;AAAA,EAC3B,kBAAkBA,EAAU;AAC9B;AAEAkV,GAAQ,eAAe;AAAA,EACrB,UAAUzQ,EAAU,WAAW,OAAO;AAAA,EACtC,OAAOA,EAAU,WAAW,OAAO;AAAA,EACnC,aAAa;AACf;ACpIA,MAAMiS,KAAQjS,EAAU,cAAc,SAEhCkS,KAAe,CAAC9D,MAAW;AAC/B,QAAM,EAAE,OAAA1R,GAAO,WAAAyV,EAAA,IAAc/D;AAC7B,SACE,gBAAA/S;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWqB;AAAA,MACX,eAAY;AAAA,MACZ,OAAOyV,KAAa,EAAE,OAAO,QAAA;AAAA,IAAQ;AAAA,EAAA;AAG3C,GAEMC,KAAY,CAACjS,MAAU;AAC3B,QAAM;AAAA,IACJ,UAAAwQ;AAAA,IACA,UAAAC;AAAA,IACA,OAAAC;AAAA,IACA,aAAAwB;AAAA,IACA,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,aAAA5B;AAAA,IACA,YAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,kBAAAC;AAAA,EAAA,IACE9Q,GAEEuQ,IAAa9C;AAAA,IACjB,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,gBAAgB,CAACQ,MAAW,GAAG,SAASA,EAAO,KAAK,IAAI,EAAE,IAAI,CAAC;AAAA,QAC/D,UAAU;AAAA,MAAA;AAAA,MAEZ;AAAA,QACE,YAAY;AAAA,QACZ,cAAcD;AAAA,QACd,oBAAoB;AAAA,UAClB,QAAQkE;AAAA,UACR,UAAUC;AAAA,UACV,QAAQC;AAAA,UACR,YAAYE;AAAA,UACZ,aAAaR;AAAAA,QAAA;AAAA,QAEf,UAAU;AAAA,MAAA;AAAA,MAEZ;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,cAAc1C;AAAA,QACd,oBAAoB,EAAE,cAAciD,EAAA;AAAA,MAAkB;AAAA,MAExD;AAAA,QACE,OAAO;AAAA,MAAA;AAAA,MAET,EAAE,YAAY,UAAU,OAAO,gBAAgB,OAAO,IAAA;AAAA,MACtD,EAAE,YAAY,iBAAiB,OAAO,SAAS,MAAM,EAAA;AAAA,MACrD;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,UAAU;AAAA,QACV,cAAcN;AAAA,MAAA;AAAA,MAEhB,EAAE,YAAY,eAAe,OAAO,QAAQ,MAAM,EAAA;AAAA,MAClD;AAAA,QACE,YAAY;AAAA,QACZ,cAAc5B;AAAA,QACd,OAAO;AAAA,QACP,oBAAoB,EAAE,QAAQoC,EAAA;AAAA;AAAA,QAC9B,UAAU;AAAA,MAAA;AAAA,MAEZ;AAAA,QACE,YAAY;AAAA,QACZ,cAAchD;AAAA,QACd,OAAO;AAAA,QACP,oBAAoB,EAAE,aAAauC,GAAA;AAAA,QACnC,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF;AAAA,MACEI;AAAA,MACAC;AAAA,MACAC;AAAA,MACAE;AAAA,MACAD;AAAA,MACAE;AAAA,IAAA;AAAA,EACF;AAGF,SACE,gBAAArX;AAAA,IAACoV;AAAA,IAAA;AAAA,MACC,YAAAC;AAAA,MACA,UAAAC;AAAA,MACA,UAAAC;AAAA,MACA,OAAAC;AAAA,MACA,aAAAC;AAAA,MACA,YAAAC;AAAA,MACA,iBAAAC;AAAA,MACA,kBAAAC;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAmB,GAAU,YAAY;AAAA,EACpB,UAAU7W,EAAU,MAAM;AAAA,EAC1B,aAAaA,EAAU,KAAK;AAAA,EAC5B,mBAAmBA,EAAU,KAAK;AAAA,EAClC,iBAAiBA,EAAU,KAAK;AAAA,EAChC,eAAeA,EAAU,KAAK;AAAA,EAC9B,aAAaA,EAAU,KAAK;AAAA,EAC5B,YAAYA,EAAU,KAAK;AAAA;AAAA,EAE3B,UAAUA,EAAU;AAAA,EACpB,OAAOA,EAAU;AAAA,EACjB,YAAYA,EAAU;AAAA,EACtB,aAAaA,EAAU;AAAA,EACvB,iBAAiBA,EAAU;AAAA,EAC3B,kBAAkBA,EAAU;AAC9B;AAEA6W,GAAU,eAAe;AAAA,EACvB,UAAU;AAAA,EACV,OAAOpS,EAAU,WAAW,OAAO;AACrC;ACjIA,MAAMiS,KAAQjS,EAAU,cAAc,SAEhC2S,KAAoB,CAACvE,MAAW;AACpC,QAAM,EAAE,MAAA/K,MAAS+K;AACjB,SACE,gBAAAhS,EAAAsI,GAAA,EACG,UAAA;AAAA,IAAArB,EAAK,eAAe;AAAA,IAAM;AAAA,sBAE1B,KAAA,EAAE,WAAWA,EAAK,eAAe,WAAW,eAAY,OAAA,CAAO;AAAA,EAAA,GAClE;AAEJ,GAEMuP,KAAY,CAACzS,MAAU;AAC3B,QAAM;AAAA,IACJ,UAAAwQ;AAAA,IACA,UAAAC;AAAA,IACA,OAAAC;AAAA,IACA,aAAAwB;AAAA,IACA,eAAAC;AAAA,IACA,aAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,aAAA5B;AAAA,IACA,YAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,kBAAAC;AAAA,EAAA,IACE9Q,GAEEuQ,IAAa9C;AAAA,IACjB,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,gBAAgB,CAACQ,MAAW,GAAG,SAASA,EAAO,KAAK,IAAI,EAAE,IAAI,CAAC;AAAA,QAC/D,UAAU;AAAA,MAAA;AAAA,MAEZ;AAAA,QACE,YAAY;AAAA,QACZ,cAAcD;AAAA,QACd,oBAAoB;AAAA,UAClB,QAAQkE;AAAA,UACR,UAAUC;AAAA,UACV,QAAQC;AAAA,UACR,YAAYE;AAAA,UACZ,aAAaR;AAAAA,QAAA;AAAA,QAEf,UAAU;AAAA,MAAA;AAAA,MAEZ;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,cAAc1C;AAAA,QACd,oBAAoB,EAAE,cAAciD,EAAA;AAAA,MAAkB;AAAA,MAExD,EAAE,YAAY,iBAAiB,OAAO,SAAS,MAAM,EAAA;AAAA,MACrD,EAAE,YAAY,eAAe,OAAO,QAAQ,MAAM,EAAA;AAAA,MAClD;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,cAAcG;AAAAA,MAAA;AAAA,MAEhB;AAAA,QACE,YAAY;AAAA,QACZ,cAAcrC;AAAA,QACd,OAAO;AAAA,QACP,oBAAoB,EAAE,QAAQoC,EAAA;AAAA,QAC9B,UAAU;AAAA,MAAA;AAAA,MAEZ;AAAA,QACE,YAAY;AAAA,QACZ,cAAchD;AAAA,QACd,OAAO;AAAA,QACP,oBAAoB,EAAE,aAAauC,GAAA;AAAA,QACnC,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF;AAAA,MACEI;AAAA,MACAC;AAAA,MACAC;AAAA,MACAE;AAAA,MACAD;AAAA,MACAE;AAAA,IAAA;AAAA,EACF;AAGF,SACE,gBAAArX;AAAA,IAACoV;AAAA,IAAA;AAAA,MACC,YAAAC;AAAA,MACA,UAAAC;AAAA,MACA,UAAAC;AAAA,MACA,OAAAC;AAAA,MACA,aAAAC;AAAA,MACA,YAAAC;AAAA,MACA,iBAAAC;AAAA,MACA,kBAAAC;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA2B,GAAU,YAAY;AAAA,EACpB,UAAUrX,EAAU,MAAM;AAAA,EAC1B,aAAaA,EAAU,KAAK;AAAA,EAC5B,mBAAmBA,EAAU,KAAK;AAAA,EAClC,iBAAiBA,EAAU,KAAK;AAAA,EAChC,eAAeA,EAAU,KAAK;AAAA,EAC9B,aAAaA,EAAU,KAAK;AAAA,EAC5B,YAAYA,EAAU,KAAK;AAAA;AAAA,EAE3B,UAAUA,EAAU;AAAA,EACpB,OAAOA,EAAU;AAAA,EACjB,YAAYA,EAAU;AAAA,EACtB,aAAaA,EAAU;AAAA,EACvB,iBAAiBA,EAAU;AAAA,EAC3B,kBAAkBA,EAAU;AAC9B;AAEAqX,GAAU,eAAe;AAAA,EACvB,UAAU;AAAA,EACV,OAAO5S,EAAU,WAAW,OAAO;AACrC;AC7HA,MAAMiS,KAAQjS,EAAU,cAAc,SAEhC6S,KAAY,CAAC1S,MAAU;AAC3B,QAAM,EAAE,UAAAwQ,GAAU,UAAAC,GAAU,OAAAC,GAAO,mBAAA2B,GAAmB,YAAAE,GAAY,aAAA5B,GAAa,YAAAC,GAAY,iBAAAC,GAAiB,kBAAAC,EAAA,IAAqB9Q,GAC3HuQ,IAAa9C;AAAA,IACjB,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,YAAY;AAAA,QACZ,gBAAgB,CAACQ,MAAW,GAAG,SAASA,EAAO,KAAK,IAAI,EAAE,IAAI,CAAC;AAAA,QAC/D,UAAU;AAAA,MAAA;AAAA,MAEZ;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,cAAcmB;AAAA,QACd,oBAAoB,EAAE,cAAciD,EAAA;AAAA,MAAkB;AAAA,MAExD;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,MAAA;AAAA,MAER;AAAA,QACE,YAAY;AAAA,QACZ,cAAclC;AAAA,QACd,OAAO;AAAA,QACP,oBAAoB,EAAE,QAAQoC,EAAA;AAAA;AAAA,QAC9B,UAAU;AAAA,MAAA;AAAA,MAEZ;AAAA,QACE,YAAY;AAAA,QACZ,cAAchD;AAAA,QACd,OAAO;AAAA,QACP,oBAAoB,EAAE,aAAauC,GAAA;AAAA,QACnC,UAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF,CAACO,GAAmBE,CAAU;AAAA,EAAA;AAGhC,SACE,gBAAArX;AAAA,IAACoV;AAAA,IAAA;AAAA,MACC,YAAAC;AAAA,MACA,UAAAC;AAAA,MACA,UAAAC;AAAA,MACA,OAAAC;AAAA,MACA,aAAAC;AAAA,MACA,YAAAC;AAAA,MACA,iBAAAC;AAAA,MACA,kBAAAC;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA4B,GAAU,YAAY;AAAA,EACpB,UAAUtX,EAAU,MAAM;AAAA,EAC1B,mBAAmBA,EAAU,KAAK;AAAA,EAClC,YAAYA,EAAU,KAAK;AAAA;AAAA,EAE3B,UAAUA,EAAU;AAAA,EACpB,OAAOA,EAAU;AAAA,EACjB,YAAYA,EAAU;AAAA,EACtB,aAAaA,EAAU;AAAA,EACvB,iBAAiBA,EAAU;AAAA,EAC3B,kBAAkBA,EAAU;AAC9B;AAEAsX,GAAU,eAAe;AAAA,EACvB,UAAU;AAAA,EACV,OAAO7S,EAAU,WAAW,OAAO;AACrC;AC/EA,MAAM8S,KAAsB,CAAAC,MACZ,OAAO,OAAO/S,EAAU,UAAU,EAAE;AAAA,EAChD,CAAAgT,MAAOA,EAAI,UAAUD;AAAA,GAET,aAAa,GCN7BE,KAAe,OAAO,OAAO;AAAA,EAC3B,UAAU;AACZ,CAAC,GCMKC,KAAc,CAAC/S,MAAU;AAC7B,QAAM,EAAE,QAAAgT,GAAQ,QAAAC,GAAQ,UAAAC,EAAA,IAAalT,GAC/B,CAACqD,GAAMC,CAAO,IAAI0H,EAAS,EAAK;AAEtC,EAAAyG,GAAU,MAAM;AACd,IAAAnO,EAAQ0P,MAAW,QAAQ,OAAO,KAAKA,KAAU,CAAA,CAAE,EAAE,SAAS,CAAC;AAAA,EACjE,GAAG,CAACA,CAAM,CAAC;AAEX,QAAMG,IAAU,CAACC,MAAU;AACzB,IAAAA,EAAM,gBAAA,GACN9P,EAAQ,EAAK;AAAA,EACf;AAEA,SACE,gBAAArH,EAAC,QAAA,EAAK,WAAU,4BACd,UAAA;AAAA,IAAA,gBAAAA,EAACwI,IAAA,EACC,UAAA;AAAA,MAAA,gBAAAvJ,EAACyP,IAAA,EAAS,KAAI,mBACZ,UAAA,gBAAAzP;AAAA,QAACiB;AAAA,QAAA;AAAA,UACC,WAAW8W,MAAW,MAAM,qBAAqB;AAAA,UACjD,SAASA,MAAW,MAAM,cAAc;AAAA,UACxC,SAAS,MAAMC,EAAS,GAAG;AAAA,UAC3B,QAAQD,MAAW;AAAA,UACpB,UAAA;AAAA,QAAA;AAAA,MAAA,GAGH;AAAA,MACA,gBAAA/X,EAACyP,IAAA,EAAS,KAAI,uBACZ,UAAA,gBAAAzP;AAAA,QAACiB;AAAA,QAAA;AAAA,UACC,WAAW8W,MAAW,MAAM,qBAAqB;AAAA,UACjD,SAASA,MAAW,MAAM,cAAc;AAAA,UACxC,SAAS,MAAMC,EAAS,GAAG;AAAA,UAC3B,QAAQD,MAAW;AAAA,UACpB,UAAA;AAAA,QAAA;AAAA,MAAA,EAED,CACF;AAAA,IAAA,GACF;AAAA,IACA,gBAAA/X;AAAA,MAACmQ;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,QACX,WAAU;AAAA,QACV,SAAS,gBAAAnQ,EAACoQ,IAAA,EAAQ,IAAG,yBAAwB,UAAA,cAAU;AAAA,QAEvD,UAAA,gBAAApQ;AAAA,UAACiB;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAM,CAAC2W,GAAU,UAAU,YAAY,mBAAmB,EAAE,KAAK,GAAG;AAAA,YACpE,QAAO;AAAA,YACP,SAAS,CAAC1O,MAAMA,EAAE,gBAAA;AAAA,YAEjB,UAAAwF,EAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MACV;AAAA,IAAA;AAAA,IAEDvG,KAAQ2P,MAAW,QAClB,gBAAA/W;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,SACT+W,EAAO,YAAY,kBAAkB,cACvC;AAAA,QAEA,UAAA;AAAA,UAAA,gBAAA/W,EAAC,QAAA,EACC,UAAA;AAAA,YAAA,gBAAAf,EAAC,KAAA,EAAG,YAAO,MAAA,CAAM;AAAA,YAChB,KAAK8X,EAAO,GAAG;AAAA,UAAA,GAClB;AAAA,UACA,gBAAA9X,EAACiB,KAAO,MAAK,MAAK,SAAAgX,GAAkB,SAAQ,SACzC,YAAO,QAAA,CACV;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GAEJ;AAEJ;AAEAJ,GAAY,YAAY;AAAA,EACtB,QAAQ3X,EAAU;AAAA,EAClB,QAAQA,EAAU;AAAA,EAClB,UAAUA,EAAU,KAAK;AAC3B;AACA2X,GAAY,eAAe,EAAE,QAAQ,MAAM,QAAQ,IAAA;ACnFnD,MAAMM,KAAM;ACEZ,MAAqBC,GAAgB;AAAA,EACnC,YAAYC,GAAM;AAChB,WAAO,OAAO,MAAMA,CAAI,GACnB,KAAK,OACR,KAAK,KAAKD,GAAgB,QAAA;AAAA,EAE9B;AAAA,EAEA,OAAO,UAAU;AACf,WAAOE,GAAA;AAAA,EACT;AACF;ACXA,MAAqBC,WAAcH,GAAgB;AAAA,EACjD,YAAYC,GAAM;AAChB,UAAM;AAAA,MACJ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,OAAO;AAAA,MACP,UAAU;AAAA,MACV,UAAU;AAAA,MACV,YAAY,CAAA;AAAA,MACZ,iBAAiB,CAAA;AAAA;AAAA,MAEjB,GAAGA;AAAA,IAAA,CACJ;AAAA,EACH;AACF;ACdA,MAAqBG,GAAM;AAAA,EACzB,YAAYH,GAAM;AAChB,SAAK,KAAK,CAAA,GACV,KAAK,QAAQ,QACb,KAAK,OAAO,GACZ,KAAK,QAAQ,IACb,KAAK,WAAW,GAChB,KAAK,QAAQ,yBACb,KAAK,KAAK,IACV,KAAK,cAAc,GAEnB,OAAO,OAAO,MAAMA,CAAI,GACnB,KAAK,QACR,KAAK,MAAMA,EAAK,MAAM,GAAGA,EAAK,GAAG,IAAIG,GAAM,QAAA,CAAS,KAAKA,GAAM,QAAA,IAEjE,KAAK,SAAS,CAAA;AAAA,EAChB;AAAA,EAEA,OAAO,UAAU;AACf,WAAO,KAAK,IAAA,EAAM,SAAA;AAAA,EACpB;AAAA,EAEA,SAASH,GAAM;AACb,UAAMjS,IAAQ,IAAImS,GAAMF,CAAI;AAC5B,SAAK,OAAO,KAAKjS,CAAK;AAAA,EACxB;AACF;AClBO,MAAMqS,KAAmB,CAACC,GAAWtR,MAAa;AACvD,QAAMuR,IAASvR,EAAS,UAAU,CAAA,GAC5BwR,IAAY,EAAE,GAAGF,EAAA,GAGjBG,wBAAuB,IAAA;AAC7B,EAAAF,EAAO,QAAQ,CAACtR,MAAU;AACxB,IAAAA,EAAM,QAAQ,QAAQ,CAACjD,MAAayU,EAAiB,IAAIzU,CAAQ,CAAC;AAAA,EACpE,CAAC;AAGD,QAAM0U,IAAkB,OAAO,OAAOF,CAAS,EAAE;AAAA,IAC/C,CAAC/R,MAAU,CAACgS,EAAiB,IAAIhS,EAAM,GAAG;AAAA,EAAA,GAItCkS,IAAQ;AAAA,IACZ,GAAGJ,EAAO,IAAI,CAACtR,OAAW;AAAA,MACxB,MAAM;AAAA,MACN,MAAMA;AAAA,MACN,UAAUA,EAAM,YAAY;AAAA,IAAA,EAC5B;AAAA,IACF,GAAGyR,EAAgB,IAAI,CAACjS,OAAW;AAAA,MACjC,MAAM;AAAA,MACN,MAAMA;AAAA,MACN,UAAUA,EAAM,YAAY;AAAA,IAAA,EAC5B;AAAA,EAAA,GAEEmS,IAAcjX,GAAOgX,GAAO,UAAU,GAGtCE,IAAgB,CAAC,GAAGN,CAAM,GAC1BO,IAAgB,EAAE,GAAGN,EAAA;AAE3B,SAAAI,EAAY,QAAQ,CAACG,GAAMtE,MAAU;AACnC,QAAIsE,EAAK,SAAS,SAAS;AACzB,YAAMC,IAAaH,EAAc,UAAU,CAAC3R,MAAMA,EAAE,OAAO6R,EAAK,KAAK,EAAE;AACvE,MAAIC,MAAe,OACjBH,EAAcG,CAAU,IAAI;AAAA,QAC1B,GAAGH,EAAcG,CAAU;AAAA,QAC3B,UAAUvE;AAAA,MAAA,GAGZoE,EAAcG,CAAU,EAAE,QAAQ,QAAQ,CAAChV,MAAa;AACtD,QAAI8U,EAAc9U,CAAQ,MACxB8U,EAAc9U,CAAQ,IAAI;AAAA,UACxB,GAAG8U,EAAc9U,CAAQ;AAAA,UACzB,UAAUyQ;AAAA,QAAA;AAAA,MAGhB,CAAC;AAAA,IAEL,WAAWsE,EAAK,SAAS,SAAS;AAChC,YAAM/U,IAAW+U,EAAK,KAAK;AAC3B,MAAID,EAAc9U,CAAQ,MACxB8U,EAAc9U,CAAQ,IAAI;AAAA,QACxB,GAAG8U,EAAc9U,CAAQ;AAAA,QACzB,UAAUyQ;AAAA,MAAA;AAAA,IAGhB;AAAA,EACF,CAAC,GAEM;AAAA,IACL,QAAQqE;AAAA,IACR,UACED,EAAc,SAAS,IAAI,EAAE,GAAG7R,GAAU,QAAQ6R,MAAkB,CAAA;AAAA,EAAC;AAE3E,GAEaI,KAAoB,CAACpU,MAAa;AAC7C,QAAM5E,IAAU4E;AAChB,SAAO,KAAK5E,EAAQ,oBAAoB,MAAM,EAAE,QAAQ,CAAC4G,MAAQ;AAE/D,QAAIqS,IADUjZ,EAAQ,oBAAoB,OAAO4G,CAAG,GAC1B,UAAU,CAAA;AACpC,KAACqS,KAAgB,CAAA,GAAI,QAAQ,CAAC/U,GAAGgV,MAAQ;AACvC,YAAMC,IAAKjV;AACX,aAAAiV,EAAG,WAAWD,IAAM,GAChBC,EAAG,SAASC,EAAW,qBACzBD,EAAG,gBAAgBE,GAAOF,EAAG,aAAa,IAE5CA,EAAG,WAAW,CAACC,EAAW,WAAWA,EAAW,MAAM,EAAE,SAASD,EAAG,IAAI,IACpEA,EAAG,WACH,IACJA,EAAG,aAAa;AAAA,QACdC,EAAW;AAAA,QACXA,EAAW;AAAA,QACXA,EAAW;AAAA,QACXA,EAAW;AAAA,MAAA,EACX,SAASD,EAAG,IAAI,IACdA,EAAG,aACH,CAAA,GACAA,EAAG,SAASC,EAAW,mBACzBD,EAAG,kBAAkB,CAAA,IAEhBA;AAAA,IACT,CAAC,GACDF,IAAevX,GAAOuX,GAAc,CAAChV,MAAMA,EAAE,QAAQ,GACrDjE,EAAQ,oBAAoB,OAAO4G,CAAG,EAAE,cAAc,GACtD5G,EAAQ,oBAAoB,OAAO4G,CAAG,EAAE,SAASqS;AAAA,EACnD,CAAC;AAED,QAAMK,IAAYlB;AAAA,IAChBpY,EAAQ,oBAAoB;AAAA,IAC5BA,EAAQ,YAAY,CAAA;AAAA,EAAC;AAEvB,SAAAA,EAAQ,WAAWsZ,EAAU,UAC7BtZ,EAAQ,oBAAoB,SAASsZ,EAAU,QACxCtZ;AACT,GCpHMuZ,KAAoB,CAACjB,MAAW;AACpC,QAAMkB,wBAAqB,IAAA;AAC3B,SAAAlB,EAAO,QAAQ,CAACtR,MAAU;AACxB,IAAIA,EAAM,UAAU,MAAM,QAAQA,EAAM,MAAM,KAC5CA,EAAM,OAAO,QAAQ,CAACR,MAAUgT,EAAe,IAAIhT,CAAK,CAAC;AAAA,EAE7D,CAAC,GACMgT;AACT,GAKMC,KAAkB,CAACnB,GAAQvU,MAC3B,CAACuU,KAAU,CAAC,MAAM,QAAQA,CAAM,KAAK,CAACvU,IACjC,OAGPuU,EAAO;AAAA,EACL,CAACtR,MACCA,EAAM,UACN,MAAM,QAAQA,EAAM,MAAM,KAC1BA,EAAM,OAAO,SAASjD,CAAQ;AAAA,KAC7B,MAOH2V,KAAsB,CAAC3S,GAAUhD,MAAa;AAClD,MAAI,CAACgD,KAAY,CAAChD;AAChB,WAAO;AAGT,QAAMuU,IAASvR,EAAS,UAAU,CAAA,GAC5B4S,IAAe5S,EAAS,YAAY,CAAA,GAEpCC,IAAQyS,GAAgBnB,GAAQvU,CAAQ;AAC9C,SAAKiD,IAIE;AAAA,IACL,OAAAA;AAAA,IACA,UAAU2S,EAAa3S,EAAM,EAAE,KAAK;AAAA,EAAA,IAL7B;AAOX,GAsCM4S,KAAiB,CAAC9S,GAAQ+S,GAAaC,MAAmB;AAC9D,MAAI,CAAChT,KAAU,CAAC,MAAM,QAAQA,CAAM,KAAKA,EAAO,WAAW;AACzD,WAAO,EAAE,SAAS,IAAO,OAAO,qBAAA;AAIlC,QAAMiT,IAAgBjT,EAAO,OAAO,CAACN,MAAU,CAACqT,EAAYrT,CAAK,CAAC;AAClE,MAAIuT,EAAc,SAAS;AACzB,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,mCAAmCA,EAAc,KAAK,IAAI,CAAC;AAAA,IAAA;AAKtE,QAAMP,IAAiBD,GAAkBO,CAAc,GACjDE,IAAkBlT,EAAO,OAAO,CAACN,MAAUgT,EAAe,IAAIhT,CAAK,CAAC;AAC1E,SAAIwT,EAAgB,SAAS,IACpB;AAAA,IACL,SAAS;AAAA,IACT,OAAO,6CAA6CA,EAAgB,KAAK,IAAI,CAAC;AAAA,EAAA,IAI3E,EAAE,SAAS,GAAA;AACpB,GAMMC,KAAW,CAAC3B,GAAQtR,GAAO6S,MAAgB;AAE/C,MAAI,CAAC7S,KAAS,OAAOA,KAAU;AAC7B,WAAO,EAAE,SAAS,IAAO,OAAO,uBAAA;AAGlC,MAAI,CAACA,EAAM;AACT,WAAO,EAAE,SAAS,IAAO,OAAO,wBAAA;AAGlC,MAAI,CAACA,EAAM;AACT,WAAO,EAAE,SAAS,IAAO,OAAO,0BAAA;AAIlC,MAAIsR,EAAO,KAAK,CAACrR,MAAMA,EAAE,OAAOD,EAAM,EAAE;AACtC,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,kBAAkBA,EAAM,EAAE;AAAA,IAAA;AAKrC,MAAI6S,GAAa;AACf,UAAMK,IAAaN,GAAe5S,EAAM,QAAQ6S,GAAavB,CAAM;AACnE,QAAI,CAAC4B,EAAW;AACd,aAAO,EAAE,SAAS,IAAO,OAAOA,EAAW,MAAA;AAAA,EAE/C;AAGA,MAAI,CAAClT,EAAM,UAAU,CAAC,MAAM,QAAQA,EAAM,MAAM;AAC9C,WAAO,EAAE,SAAS,IAAO,OAAO,iCAAA;AAIlC,QAAMmT,IAAW;AAAA,IACf,IAAInT,EAAM;AAAA,IACV,OAAOA,EAAM;AAAA,IACb,QAAQ,CAAC,GAAGA,EAAM,MAAM;AAAA;AAAA,EAAA;AAI1B,SAAIA,EAAM,aAAa,UAAaA,EAAM,aAAa,SACrDmT,EAAS,WAAWnT,EAAM,WAG5BsR,EAAO,KAAK6B,CAAQ,GAEb;AAAA,IACL,SAAS;AAAA,IACT,SAAS,UAAUnT,EAAM,KAAK,6BAA6BA,EAAM,OAAO,MAAM;AAAA,EAAA;AAElF,GAMMoT,KAAc,CAAC9B,GAAQ+B,MAAY;AACvC,QAAM7F,IAAQ8D,EAAO,UAAU,CAACrR,MAAMA,EAAE,OAAOoT,CAAO;AACtD,SAAI7F,MAAU,KAEL;AAAA,IACL,SAAS;AAAA,IACT,SAAS,UAHU8D,EAAO,OAAO9D,GAAO,CAAC,EAAE,CAAC,EAGZ,KAAK;AAAA,EAAA,IAGlC,EAAE,SAAS,IAAO,OAAO,kBAAkB6F,CAAO,cAAA;AAC3D,GAMMC,KAAkB,CAAChC,GAAQ+B,GAAStW,GAAU8V,MAAgB;AAElE,MAAIA,KAAe,CAACA,EAAY9V,CAAQ;AACtC,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO,UAAUA,CAAQ;AAAA,IAAA;AAK7B,QAAMiD,IAAQsR,EAAO,KAAK,CAACrR,MAAMA,EAAE,OAAOoT,CAAO;AACjD,SAAKrT,IAKDA,EAAM,UAAUA,EAAM,OAAO,SAASjD,CAAQ,IACzC;AAAA,IACL,SAAS;AAAA,IACT,OAAO,UAAUA,CAAQ;AAAA,EAAA,IAKNwV,GAAkBjB,CAAM,EAC5B,IAAIvU,CAAQ,IACtB;AAAA,IACL,SAAS;AAAA,IACT,OAAO,UAAUA,CAAQ;AAAA,EAAA,KAKxBiD,EAAM,WACTA,EAAM,SAAS,CAAA,IAEjBA,EAAM,OAAO,KAAKjD,CAAQ,GAEnB;AAAA,IACL,SAAS;AAAA,IACT,SAAS,UAAUA,CAAQ,qBAAqBiD,EAAM,KAAK;AAAA,EAAA,KA5BpD,EAAE,SAAS,IAAO,OAAO,kBAAkBqT,CAAO,cAAA;AA8B7D,GAMME,KAAuB,CAACjC,GAAQ+B,GAAStW,MAAa;AAE1D,QAAMiD,IAAQsR,EAAO,KAAK,CAACrR,MAAMA,EAAE,OAAOoT,CAAO;AACjD,SAAKrT,IAKD,CAACA,EAAM,UAAU,CAACA,EAAM,OAAO,SAASjD,CAAQ,IAC3C;AAAA,IACL,SAAS;AAAA,IACT,OAAO,UAAUA,CAAQ;AAAA,EAAA,KAK7BiD,EAAM,SAASA,EAAM,OAAO,OAAO,CAACJ,MAAQA,MAAQ7C,CAAQ,GAErD;AAAA,IACL,SAAS;AAAA,IACT,SAAS,UAAUA,CAAQ,yBAAyBiD,EAAM,KAAK;AAAA,IAC/D,SAASA,EAAM,OAAO,WAAW;AAAA;AAAA,EAAA,KAjB1B,EAAE,SAAS,IAAO,OAAO,kBAAkBqT,CAAO,cAAA;AAmB7D,GAiBMG,KAA2B,CAACX,GAAavB,IAAS,OAAO;AAC7D,MAAI,CAACuB,KAAe,OAAOA,KAAgB;AACzC,WAAO,CAAA;AAGT,QAAML,IAAiBD,GAAkBjB,CAAM,GACzCmC,IAAe,CAAA;AAGrB,SAAAnC,EAAO,QAAQ,CAACtR,MAAU;AACxB,QAAI,CAACA,EAAM,UAAU,CAAC,MAAM,QAAQA,EAAM,MAAM;AAC9C;AAIF,UAAM0T,IAAc1T,EAAM,OACvB,OAAO,CAACjD,MAAa8V,EAAY9V,CAAQ,CAAC,EAC1C,IAAI,CAACA,OAAc;AAAA,MAClB,KAAKA;AAAA,MACL,UAAU8V,EAAY9V,CAAQ,EAAE,YAAY;AAAA,MAC5C,MAAM8V,EAAY9V,CAAQ;AAAA,IAAA,EAC1B;AAEJ,IAAI2W,EAAY,SAAS,KACvBD,EAAa,KAAK;AAAA,MAChB,MAAM;AAAA,MACN,IAAIzT,EAAM;AAAA,MACV,OAAOA,EAAM;AAAA,MACb,UAAUA,EAAM,YAAY;AAAA,MAC5B,QAAQ0T;AAAA,IAAA,CACT;AAAA,EAEL,CAAC,GAGD,OAAO,KAAKb,CAAW,EAAE,QAAQ,CAAC9V,MAAa;AAC7C,IAAKyV,EAAe,IAAIzV,CAAQ,KAC9B0W,EAAa,KAAK;AAAA,MAChB,MAAM;AAAA,MACN,KAAK1W;AAAA,MACL,UAAU8V,EAAY9V,CAAQ,EAAE,YAAY;AAAA,MAC5C,MAAM8V,EAAY9V,CAAQ;AAAA,IAAA,CAC3B;AAAA,EAEL,CAAC,GAGD0W,EAAa,KAAK,CAACE,GAAGC,MAAMD,EAAE,WAAWC,EAAE,QAAQ,GAE5CH;AACT,GCtUaI,KAAW,CAACC,GAAUC,GAASC,MAAS;AACnD,QAAM,CAACrX,GAAS4N,GAAQ3K,CAAG,IAAI,CAACkU,GAAUC,GAASC,CAAI,GACjD,EAAE,UAAAjU,IAAW,CAAA,EAAC,IAAMpD,GACpB,EAAE,QAAAmD,MAAWnD,EAAQ,YACrBsX,IAAevZ,GAAOoF,GAAQ,CAAC,YAAY,aAAa,CAAC,GACzDoU,IAASD,EAAa,UAAU,OAAKpS,EAAE,QAAQ0I,EAAO,GAAG;AAC/D,MAAI2J,MAAW,IAAI;AACjB,UAAM1U,IAAQ,IAAI2R,GAAM,EAAE,KAAKvR,GAAK;AACpC,IAAAJ,EAAM,SAAS;AAAA,MACb,MAAM4S,EAAW;AAAA,MACjB,OAAO;AAAA,MACP,WAAW;AAAA,IAAA,CACZ,GAGD6B,EAAa,OAAOC,IAAS,GAAG,GAAG1U,CAAK;AAGxC,UAAMQ,IAAQD,EAAS,QAAQ,KAAK,CAACE,MAAMA,EAAE,QAAQ,SAASsK,EAAO,GAAG,CAAC;AACzE,IAAIvK,KACFA,EAAM,OAAO,OAAOA,EAAM,OAAO,QAAQuK,EAAO,GAAG,IAAI,GAAG,GAAG/K,EAAM,GAAG,GACtEA,EAAM,WAAWQ,EAAM,WAAW,OAElCR,EAAM,WAAW+K,EAAO,WAAW;AAIrC,UAAM8G,IAAY8C,GAAeF,CAAY,GACvC3B,IAAYlB,GAAiBC,GAAWtR,CAAQ;AACtD,IAAApD,EAAQ,WAAW,SAAS2V,EAAU,QACtC3V,EAAQ,WAAW2V,EAAU,UAC7B3V,EAAQ,UAAU;AAAA,EACpB;AACF,GAEayX,KAAoB,CAACN,GAAUO,GAAQC,MAAc;AAChE,QAAM,CAAC3X,GAASoC,GAAOhC,CAAQ,IAAI,CAAC+W,GAAUO,GAAQC,CAAS;AAE/D,EADkB3X,EAAQ,WAAW,OAAOI,CAAQ,GACrC,QAAQ,SAAS,MAC9BJ,EAAQ,WAAW,OAAOI,CAAQ,EAAE,OAAO,CAAC,IAAIgC,GAChDpC,EAAQ,UAAU;AAEtB,GAEa4X,KAAe,CAACzU,GAAQ/C,GAAUuU,IAAS,CAAA,MAAO;AAC7D,MAAI,CAACxR,KAAU,OAAOA,KAAW,YAAY,CAAC/C;AAC5C,WAAO;AAIT,QAAM0W,IAAeD,GAAyB1T,GAAQwR,CAAM;AAC5D,MAAImC,EAAa,WAAW,EAAG,QAAO;AAEtC,QAAMe,IAAYf,EAAa,CAAC;AAChC,SAAIe,EAAU,SAAS,UACdA,EAAU,QAAQzX,IAGvByX,EAAU,SAAS,UAEdA,EAAU,SAAS,CAAC,GAAG,QAAQzX,IAGjC;AACT,GC9DM0X,KAAsB,KACtBC,KAAmB,2BACnBC,KAAsB,QAAQC,EAAmB,YAEjDC,KAAsB,CAAC;AAAA,EAC3B,KAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAzc;AAAA,EACA,OAAA0c;AACF,MAAM;AACJ,QAAMC,IAAmBC;AAAA,IACvBL;AAAA,IACA,MAAMC,KAAYA,EAASD,CAAQ;AAAA,EAAA;AAErC,SACE,gBAAArb,EAAC,SAAI,WAAW,GAAGib,EAAmB,IAAIM,KAAY,aAAa,IACjE,UAAA;AAAA,IAAA,gBAAAtc;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,eAAeic,EAAmB;AAAA,QAC7C,SAASM,IAAQ,SAAYC;AAAA,QAC7B,OAAO,EAAE,QAAQD,IAAQ,YAAY,UAAA;AAAA,QACrC,cAAW;AAAA,QACX,MAAK;AAAA,QAEJ,UAAA1c;AAAA,MAAA;AAAA,IAAA;AAAA,IAEFsc;AAAA,EAAA,GACH;AAEJ;AAEAD,GAAoB,YAAY;AAAA,EAC9B,KAAKhc,EAAU;AAAA,EACf,UAAUA,EAAU,OAAO;AAAA,EAC3B,UAAUA,EAAU;AAAA,EACpB,UAAUA,EAAU;AAAA,EACpB,UAAUA,EAAU,KAAK;AAAA,EACzB,OAAOA,EAAU,KAAK;AACxB;AAEAgc,GAAoB,eAAe;AAAA,EACjC,KAAK;AAAA,EACL,UAAU;AAAA,EACV,UAAU;AACZ;AAEA,MAAMQ,KAAO,CAAC;AAAA,EACZ,KAAAP,IAAM;AAAA,EACN,UAAAG,IAAW;AAAA,EACX,UAAAlY;AAAA,EACA,YAAAuY;AAAA,EACA,QAAAxV;AAAA,EACA,WAAAyV;AAAA,EACA,QAAAjE;AAAA,EACA,UAAA9Y;AACF,MAAM;AACJ,QAAM,CAACgd,GAAaC,CAAc,IAAIhN,EAAS,EAAI,GAC7CyM,IAAQnY,EAAS,WAAWO,EAAU,YAAY,GAClDoY,IAAUnB,GAAazU,GAAQ/C,GAAUuU,CAAM,GAC/C,CAACqE,GAAQC,CAAS,IAAInN,EAAS,MAC/B8M,KAGA,GAAAC,KAAeE,EAIpB;AAED,EAAAxG,GAAU,MAAM;AACd,IAAIqG,KAAa,SACfK,EAAUL,CAAS,GACnBE,EAAe,EAAK;AAAA,EAExB,GAAG,CAACF,CAAS,CAAC;AAEd,QAAMM,IAAe,MAAM;AACzB,IAAKX,MACHU,EAAU,CAACD,CAAM,GACjBF,EAAe,EAAK;AAAA,EAExB;AAEA,MAAIK,IAAaH;AACjB,SAAIT,MACFY,IAAa,KAGb,gBAAAnd;AAAA,IAACod;AAAA,IAAA;AAAA,MAEC,IAAI,IAAIrB,EAAgB,GAAG3X,CAAQ;AAAA,MACnC,WAAW+Y,IAAarB,KAAsB;AAAA,MAE9C,UAAA,gBAAA/a;AAAA,QAACqc,GAAU;AAAA,QAAV;AAAA,UAEC,WAAU;AAAA,UACV,UAAUtB;AAAA,UAEV,UAAA;AAAA,YAAA,gBAAA9b;AAAA,cAACkc;AAAA,cAAA;AAAA,gBACC,KAAAC;AAAA,gBACA,UAAUL;AAAA,gBACV,UAAUoB;AAAA,gBACV,UAAAZ;AAAA,gBACA,OAAAC;AAAA,gBAEC,UAAAI;AAAA,cAAA;AAAA,YAAA;AAAA,8BAEFS,GAAU,MAAV,EAAe,WAAU,aAAa,UAAAvd,EAAA,CAAS;AAAA,UAAA;AAAA,QAAA;AAAA,QAb3C,IAAIkc,EAAgB,QAAQ3X,CAAQ;AAAA,MAAA;AAAA,IAc3C;AAAA,IAnBK,GAAG2X,EAAgB,GAAG3X,CAAQ;AAAA,EAAA;AAsBzC;AAEAsY,GAAK,YAAY;AAAA,EACf,KAAKxc,EAAU;AAAA,EACf,UAAUA,EAAU;AAAA,EACpB,UAAUA,EAAU,OAAO;AAAA,EAC3B,YAAYA,EAAU,KAAK;AAAA,EAC3B,QAAQA,EAAU;AAAA,EAClB,WAAWA,EAAU;AAAA,EACrB,QAAQA,EAAU;AAAA,EAClB,UAAUA,EAAU,KAAK;AAC3B;AAEAwc,GAAK,eAAe;AAAA,EAClB,KAAK;AAAA,EACL,UAAU;AAAA,EACV,QAAQ,CAAA;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,CAAA;AACV;ACvHA,SAASW,GAAO,EAAE,SAAAC,GAAS,OAAAhO,GAAO,MAAAvM,GAAM,UAAAlD,GAAU,WAAAC,KAAa;AAC7D,QAAMgU,IAAUjU,KAAYkD;AAG5B,MAAI,CAAC+Q,KAAWA,MAAY,EAAG,QAAO;AAGtC,QAAMyJ,IAAU,CAAC,MAAM;AACvB,EAAIzd,KAAWyd,EAAQ,KAAKzd,CAAS,GACjCwd,MAAY,aAAWC,EAAQ,KAAK,eAAejO,CAAK,EAAE;AAC9D,QAAMkO,IAAoBD,EAAQ,KAAK,GAAG;AAG1C,SAAID,MAAY,UAEZ,gBAAAtd,EAACyd,MAAM,MAAI,IAAC,WAAWD,GAAmB,IAAIlO,GAC3C,UAAAwE,EAAA,CACH,sBAMD2J,IAAA,EAAM,MAAI,IAAC,WAAWD,GACpB,UAAA1J,GACH;AAEJ;AAEAuJ,GAAO,YAAY;AAAA;AAAA,EAEjB,SAASnd,EAAU,MAAM,CAAC,SAAS,SAAS,CAAC;AAAA,EAC7C,OAAOA,EAAU,OAAO;AAAA;AAAA,EAExB,MAAMA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,MAAM,CAAC;AAAA;AAAA,EAE9D,UAAUA,EAAU;AAAA;AAAA,EAEpB,WAAWA,EAAU;AACvB;AAEAmd,GAAO,eAAe;AAAA,EACpB,SAAS;AAAA,EACT,MAAM;AAAA,EACN,UAAU;AAAA,EACV,WAAW;AACb;ACxDA,SAASK,GAAY,EAAE,OAAA7W,GAAO,WAAA8W,KAAa;AACzC,QAAMC,IAAc/W,GAAO,QAAQ,UAAU,GACvCgX,IAAuBhX,GAAO,aAAa,SAAS,GACpDiX,IAAuBH,GAAW,UAAU,MAAM,SAAS;AAEjE,SACE,gBAAA5c,EAAC,QAAA,EAAK,WAAU,eAEb,UAAA;AAAA,IAAA4c,KACC,gBAAA5c,EAACsc,IAAA,EAAO,SAAQ,SAAQ,OAAM,WAAU,UAAA;AAAA,MAAA;AAAA,MAC9BM,EAAU,MAAM;AAAA,MACvBG,KAAwB,gBAAA/c,EAAAsI,GAAA,EAAE,UAAA;AAAA,QAAA;AAAA,QAAEqF,EAAO;AAAA,QAAQ;AAAA,MAAA,EAAA,CAAC;AAAA,IAAA,GAC/C;AAAA,IAGDiP,KAAa;AAAA,IAGd,gBAAA3d,EAAC,QAAA,EAAK,WAAU,WAAW,YAAM,OAAM;AAAA,IACvC,gBAAAA,EAACqd,MAAO,SAAQ,SAAQ,OAAM,QAAO,MAAMxW,EAAM,KAAK;AAAA,IAGrDgX,uBACER,IAAA,EAAO,SAAQ,SAAQ,OAAM,WAC3B,YAAO,QAAA,CACV;AAAA,IAIF,gBAAArd;AAAA,MAACqd;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,OAAM;AAAA,QACN,MAAM,GAAGxW,EAAM,IAAI,IAAIgI,GAAGhI,EAAM,MAAM,KAAK,CAAC,SAAS+W,CAAW,IAAI/O,GAAG+O,GAAa,OAAO,CAAC;AAAA,MAAA;AAAA,IAAA;AAAA,IAI7F/W,GAAO,MACN,gBAAA7G,EAACqd,IAAA,EAAO,SAAQ,WAAU,OAAM,WAAU,MAAK,WAAA,CAAW;AAAA,EAAA,GAE9D;AAEJ;AAEAK,GAAY,YAAY;AAAA;AAAA,EAEtB,OAAOxd,EAAU,MAAM;AAAA,IACrB,KAAKA,EAAU,OAAO;AAAA,IACtB,OAAOA,EAAU,OAAO;AAAA,IACxB,MAAMA,EAAU;AAAA,IAChB,QAAQA,EAAU;AAAA,IAClB,IAAIA,EAAU;AAAA,EAAA,CACf,EAAE;AAAA,EACH,WAAWA,EAAU,MAAM;AAAA,IACzB,OAAOA,EAAU,MAAM;AAAA,MACrB,IAAIA,EAAU,OAAO;AAAA,MACrB,OAAOA,EAAU,OAAO;AAAA,MACxB,QAAQA,EAAU,MAAM;AAAA,MACxB,UAAUA,EAAU;AAAA,IAAA,CACrB,EAAE;AAAA,IACH,UAAUA,EAAU;AAAA,EAAA,CACrB;AACH;AAEAwd,GAAY,eAAe;AAAA,EACzB,WAAW;AACb;ACpEO,MAAMK,KAAgB,CAACC,MAC5BA,EAAS,SAAS,IAAI,gBAAAhe,EAAC,QAAA,EAAM,UAAA,cAAcge,EAAS,CAAC,CAAC,IAAG,IAAU,MAGxDC,KAAgB,CAACC,MAAW;AACvC,QAAMC,IAAU;AAChB,MAAI,CAACD,KAAU,CAACA,EAAO,OAAQ,QAAOC;AACtC,QAAM,EAAE,OAAA9c,IAAQ,CAAA,MAAO6c,EAAO,CAAC;AAC/B,SAAO7c,EAAM,WAAW,GAAG8c,CAAO,IAAI9c,EAAM,QAAQ,KAAK8c;AAC3D,GAGaC,KAAuB,gBAAApe,EAAC,MAAA,EAAG,UAAA,uBAAA,CAAoB,GAG/Cqe,KAAuB,gBAAAre,EAAC,MAAA,EAAG,UAAA,uBAAA,CAAoB,GAG/Cse,KAAqB,CAChCxe,GACAye,GACAtX,GACAiX,GACAhX,IAAK,SACF;AAEH,QAAM4M,IADQ7M,EAAI,WAAWtC,EAAU,YAAY,IAC3BsZ,GAAcC,CAAM,IAAI,GAAGK,CAAK,IAAItX,CAAG,KACzD+W,IAAW/W,EAAI,MAAM,GAAG;AAC9B,2BACG,QAAA,EAAK,WAAW,GAAGkR,EAAG,IAAIrY,CAAS,IACjC,UAAA;AAAA,IAAAgU;AAAA,IACAiK,GAAcC,CAAQ;AAAA,IACtB9W,KAAM,gBAAAlH,EAAC+U,IAAA,EAAI,IAAA7N,EAAA,CAAQ;AAAA,EAAA,GACtB;AAEJ;AAGO,SAASsX,GAAmB;AAAA,EACjC,WAAA1e;AAAA,EACA,OAAAye;AAAA,EACA,SAAAE;AAAA,EACA,QAAAP;AAAA,EACA,IAAAhX,IAAK;AAAA,EACL,UAAArH;AACF,GAAG;AAED,QAAMiU,IADQ2K,EAAQ,WAAW9Z,EAAU,YAAY,IAC/BsZ,GAAcC,CAAM,IAAI,GAAGK,CAAK,IAAIE,CAAO,KAC7DT,IAAWS,EAAQ,MAAM,GAAG;AAElC,SACE,gBAAA1d,EAAC,QAAA,EAAK,WAAW,mCAAmCjB,CAAS,IAC3D,UAAA;AAAA,IAAA,gBAAAiB,EAAC,QAAA,EACE,UAAA;AAAA,MAAA+S;AAAA,MACAiK,GAAcC,CAAQ;AAAA,MACtB9W,KAAM,gBAAAlH,EAAC+U,IAAA,EAAI,IAAA7N,EAAA,CAAQ;AAAA,IAAA,GACtB;AAAA,IACCrH;AAAA,EAAA,GACH;AAEJ;AAEA2e,GAAmB,YAAY;AAAA,EAC7B,WAAWte,EAAU;AAAA,EACrB,OAAOA,EAAU,OAAO;AAAA,EACxB,SAASA,EAAU,OAAO;AAAA,EAC1B,QAAQA,EAAU;AAAA,EAClB,IAAIA,EAAU;AAAA,EACd,UAAUA,EAAU;AACtB;AAGO,MAAMwe,KAAqB,CAACH,GAAOnY,GAAOJ,MAAS;AAExD,QAAM8N,IADU9N,MAAS,UACC,kBAAkB,GAAGuY,CAAK,IAAInY,CAAK;AAC7D,2BAAQ,QAAA,EAAK,WAAW,WAAW+R,EAAG,IAAK,UAAArE,GAAQ;AACrD;AC7EA,SAAwB6K,GAAU,EAAE,wBAAAC,KAA0B;AAC5D,QAAMC,IAAmBpe,GAAO,IAAI,GAE9B,EAAE,MAAA0Y,GAAM,YAAA2F,GAAY,eAAAC,EAAA,IAAkBC;AAAA,IAC1C,CAACC,OAAa;AAAA,MACZ,MAAMA,EAAQ,QAAA;AAAA,MACd,YAAYA,EAAQ,WAAA;AAAA,MACpB,eAAeA,EAAQ,gBAAA;AAAA,IAAgB;AAAA,EACzC;AAiFF,MA7EA1I,GAAU,MAAM;AACd,QAAI,CAACuI,KAAc,CAACC,KAAiB,CAACH,GAAwB,SAAS;AAErE,MAAIC,EAAiB,YACnB,aAAaA,EAAiB,OAAO,GACrCA,EAAiB,UAAU;AAE7B;AAAA,IACF;AAEA,UAAMK,IAAYN,EAAuB,SACnCO,IAAgBD,EAAU,sBAAA,GAC1B,EAAE,GAAAE,EAAAA,IAAML;AAOd,QAAI,EAHFA,EAAc,KAAKI,EAAc,QACjCJ,EAAc,KAAKI,EAAc,QAEX;AACtB,MAAIN,EAAiB,YACnB,aAAaA,EAAiB,OAAO,GACrCA,EAAiB,UAAU;AAE7B;AAAA,IACF;AAEA,UAAMQ,IAAkB,IAClBC,IAAc;AAEpB,QAAIC,IAAe,IACfC,IAAY;AAGhB,QAAIJ,IAAID,EAAc,MAAME,KAAmBH,EAAU,YAAY;AACnE,MAAAK,IAAe,IACfC,IAAY;AAAA,aAGLJ,IAAID,EAAc,SAASE,GAAiB;AACnD,YAAMI,IAAYP,EAAU,eAAeA,EAAU;AACrD,MAAIA,EAAU,YAAYO,MACxBF,IAAe,IACfC,IAAY;AAAA,IAEhB;AAEA,QAAID,KAAgB,CAACV,EAAiB,SAAS;AAC7C,YAAMa,IAAgB,MAAM;AAC1B,YAAKZ,GAEL;AAAA,cAAIU,MAAc;AAChB,YAAAN,EAAU,YAAY,KAAK,IAAI,GAAGA,EAAU,YAAYI,CAAW;AAAA,mBAC1DE,MAAc,QAAQ;AAC/B,kBAAMC,IAAYP,EAAU,eAAeA,EAAU;AACrD,YAAAA,EAAU,YAAY,KAAK,IAAIO,GAAWP,EAAU,YAAYI,CAAW;AAAA,UAC7E;AAGA,UAAAT,EAAiB,UAAU,WAAWa,GAAe,EAAE;AAAA;AAAA,MACzD;AAEA,MAAAb,EAAiB,UAAU,WAAWa,GAAe,GAAG;AAAA,IAC1D,MAAA,CAAW,CAACH,KAAgBV,EAAiB,YAC3C,aAAaA,EAAiB,OAAO,GACrCA,EAAiB,UAAU;AAI7B,WAAO,MAAM;AACX,MAAIA,EAAiB,YACnB,aAAaA,EAAiB,OAAO,GACrCA,EAAiB,UAAU;AAAA,IAE/B;AAAA,EACF,GAAG,CAACC,GAAYC,GAAeH,CAAsB,CAAC,GAElD,CAACE,KAAc,CAACC,KAAiB,CAAC5F,EAAM,QAAO;AAEnD,QAAM,EAAE,GAAAtR,GAAG,GAAAuX,EAAA,IAAML,GA4BXY,KAzBiB,MAAM;AAC3B,UAAM9Y,IAAQsS,EAAK,SAAS,CAAA;AAG5B,QAAItS,EAAM,UAAU,QAAW;AAC7B,YAAM,EAAE,OAAA0X,GAAO,OAAAnY,GAAO,MAAAJ,EAAA,IAASa;AAE/B,aADgB4S,EAAW,YAAYzT,IACtB,kBAAkB,GAAGuY,CAAK,IAAInY,CAAK;AAAA,IACtD;AAGA,QAAIS,EAAM,QAAQ,QAAW;AAC3B,YAAM,EAAE,OAAA0X,GAAO,KAAAtX,GAAK,QAAAiX,EAAA,IAAWrX,GAEzBiN,IADQ7M,KAAOA,EAAI,WAAWtC,EAAU,YAAY,IAClCsZ,GAAcC,CAAM,IAAI,GAAGK,CAAK,IAAItX,CAAG,KACzD+W,IAAW/W,IAAMA,EAAI,MAAM,GAAG,IAAI,CAAA,GAClC2Y,IAAiB7B,GAAcC,CAAQ;AAE7C,aAAO4B,IAAiB,GAAG9L,CAAO,MAAM8L,EAAe,MAAM,QAAQ,KAAK9L;AAAA,IAC5E;AAGA,WAAOjN,EAAM,SAASsS,EAAK,SAAS;AAAA,EACtC,GAEoB;AAEpB,SACE,gBAAAnZ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,UAAU;AAAA,QACV,eAAe;AAAA,QACf,KAAKof;AAAA,QACL,MAAMvX;AAAA,QACN,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,SAAS;AAAA,MAAA;AAAA,MAGX,UAAA,gBAAA7H;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO;AAAA,YACL,iBAAiB;AAAA,YACjB,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,cAAc;AAAA,YACd,WAAW;AAAA,YACX,YAAY;AAAA,YACZ,OAAO;AAAA,YACP,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,UAAU;AAAA,YACV,WAAW;AAAA,UAAA;AAAA,UAGZ,UAAA2f;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN;AC3JA,MAAME,KAAM,CAAC/a,MAAU;AACrB,QAAM,EAAE,SAAAgb,GAAS,MAAA9Z,GAAM,OAAAa,GAAO,OAAAT,GAAO,YAAA2Z,GAAY,UAAAlgB,MAAaiF,GACxDkb,IAAevf,GAAO,IAAI,GAE1B,CAAC,EAAE,kBAAAwf,EAAA,GAAoBC,GAAMC,CAAO,IAAIC,GAAQ;AAAA,IACpD,MAAApa;AAAA,IACA,MAAM,EAAE,MAAAA,GAAM,OAAAa,GAAO,OAAAT,GAAO,OAAOS,GAAO,SAAShH,EAAS,OAAO,MAAA;AAAA;AAAA,IACnE,SAAS,MAAMigB;AAAA,IACf,SAAS,CAACb,OACD;AAAA,MACL,kBAAkBA,EAAQ,WAAA;AAAA,IAAW;AAAA,EAEzC,CACD;AAGD,EAAA1I,GAAU,MAAM;AACd,IAAA4J,EAAQE,GAAA,GAAiB,EAAE,sBAAsB,IAAM;AAAA,EACzD,GAAG,CAACF,CAAO,CAAC;AAEZ,QAAM,CAAC,EAAE,QAAAG,GAAQ,mBAAAC,KAAqBC,CAAI,IAAIC,GAAQ;AAAA,IACpD,QAAQza;AAAA,IACR,SAAS,CAACmT,MAAS,CAACtS,EAAM,MAAM,CAACsS,EAAK,MAAM;AAAA,IAC5C,MAAM,CAACA,GAAM8F,MAAY;AAEvB,MAAI7Y,MAAU+S,EAAK,SAAStS,EAAM,QAAQsS,EAAK,MAAM,OACnD4G,EAAW5G,EAAK,MAAM,KAAKtS,EAAM,GAAG;AAAA,IAExC;AAAA,IACA,SAAS,CAACoY,OACD;AAAA,MACL,QAAQA,EAAQ,OAAA;AAAA,MAChB,mBAAmBA,EAAQ,QAAA;AAAA,IAAQ;AAAA,EAEvC,CACD;AAGD,MAAIyB,IAAW;AACf,EAAIJ,MAAQI,KAAY,aACpBH,MAAmBG,KAAY;AAGnC,QAAMC,IAAgB;AAAA,IACpB,SAASV,IAAmB,IAAI;AAAA,IAChC,UAAU;AAAA,IACV,QAAQA,IAAmB,MAAO;AAAA,IAClC,YAAY;AAAA,IACZ,GAAIK,KAAUC,KAAqB;AAAA,MACjC,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,WAAW;AAAA,IAAA;AAAA,EACb;AAGF,SACE,gBAAAvgB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK,CAACiT,MAAS;AACb,QAAAiN,EAAKjN,CAAI,GACTuN,EAAKvN,CAAI,GACT+M,EAAa,UAAU/M,GAAM;AAAA,MAC/B;AAAA,MACA,WAAW,iBAAiByN,CAAQ;AAAA,MACpC,OAAOC;AAAA,MAEP,UAAA,gBAAA3gB,EAAC,OAAA,EAAI,WAAU,OAAO,UAAAH,EAAA,CAAS;AAAA,IAAA;AAAA,EAAA;AAGrC;AAEAggB,GAAI,YAAY;AAAA,EACd,SAAS3f,EAAU;AAAA,EACnB,MAAMA,EAAU,OAAO;AAAA,EACvB,OAAOA,EAAU,OAAO;AAAA,EACxB,OAAOA,EAAU,OAAO;AAAA,EACxB,YAAYA,EAAU,KAAK;AAAA,EAC3B,UAAUA,EAAU,KAAK;AAC3B;AAEA2f,GAAI,eAAe;AAAA,EACjB,SAAS;AACX;AChFA,SAASe,GAAc,EAAE,YAAAC,GAAY,QAAA1Z,KAAU;AAC7C,QAAM,EAAE,aAAa2Z,IAAa,CAAA,GAAI,eAAeC,IAAU,MAC7DF;AAEF,MAAI,CAACC,EAAW,OAAQ,QAAO;AAE/B,QAAM3c,IAAkBgD,IACpB,OAAO,KAAKA,CAAM,EAAE,IAAI,CAACF,OAAS;AAAA,IAChC,KAAAA;AAAA,IACA,OAAOE,EAAOF,CAAG,EAAE;AAAA,IACnB,QAAQE,EAAOF,CAAG,EAAE,UAAU,CAAA;AAAA,EAAC,EAC/B,IACF,CAAA;AAEJ,MAAI,CAAC9C,EAAgB,OAAQ,QAAO;AAEpC,QAAM6c,IAAeC,GAAgBF,CAAO;AAC5C,SACE,gBAAAhgB,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAtI,EAAC,SAAA,EAAM,WAAU,2BACd,UAAA;AAAA,MAAA2N,EAAO;AAAA,MAAQ;AAAA,MAAuBsS;AAAA,IAAA,GACzC;AAAA,IACCF,EAAW,IAAI,CAACpc,MACf,gBAAA1E;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAEV,UAAA,gBAAAe,EAAC,SAAA,EAAM,WAAU,eACf,UAAA;AAAA,UAAA,gBAAAf,EAAC,UAAA,EAAQ,UAAAwE,GAAcL,GAAiBO,EAAK,KAAK,GAAE;AAAA,UAAS;AAAA,UAAG;AAAA,UAC/DR,GAAcC,GAAiBO,EAAK,OAAOA,EAAK,KAAK;AAAA,UAAE;AAAA,UACvD,OAAOA,EAAK,SAAU,YAAY,OAAOA,EAAK,KAAK,IAAIA,EAAK;AAAA,UAAM;AAAA,QAAA,EAAA,CAErE;AAAA,MAAA;AAAA,MARKA,EAAK;AAAA,IAAA,CAUb;AAAA,EAAA,GACH;AAEJ;AAEAkc,GAAc,YAAY;AAAA,EACxB,YAAY1gB,EAAU,MAAM;AAAA,IAC1B,aAAaA,EAAU;AAAA,MACrBA,EAAU,MAAM;AAAA,QACd,IAAIA,EAAU;AAAA,QACd,OAAOA,EAAU;AAAA,QACjB,OAAOA,EAAU;AAAA,QACjB,OAAOA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,IAAI,CAAC;AAAA,MAAA,CAC9D;AAAA,IAAA;AAAA,IAEH,eAAeA,EAAU;AAAA,EAAA,CAC1B,EAAE;AAAA,EACH,QAAQA,EAAU;AAAA,IAChBA,EAAU,MAAM;AAAA,MACd,OAAOA,EAAU,OAAO;AAAA,MACxB,QAAQA,EAAU;AAAA,QAChBA,EAAU,MAAM;AAAA,UACd,OAAOA,EAAU,OAAO;AAAA,UACxB,OAAOA,EAAU,OAAO;AAAA,QAAA,CACzB;AAAA,MAAA;AAAA,IACH,CACD;AAAA,EAAA,EACD;AACJ;AC5CA,MAAMghB,KAAyB9gB,GAAW,CAAC,EAAE,SAAAC,EAAA,GAAWE,MAAQ;AAC9D,QAAM4G,IAAS9G,GAAS,qBAAqB,UAAU,CAAA,GAEjD8gB,IAAkB9gB,GAAS,YAAY,EAAE,QAAQ,CAAA,GAAI,UAAU,GAAC,GAEhE,CAAC+gB,GAAWC,CAAY,IAAIvR,EAAS3I,CAAM,GAC3C,CAACma,GAAaC,CAAc,IAAIzR,EAASqR,CAAe,GACxDvC,IAAyBne,GAAO,IAAI,GACpC,CAAC+gB,GAAoBC,CAAqB,IAAI3R,EAAS,oBAAI,KAAK;AAoBtE,MAjBAyG,GAAU,MAAM;AACd,UAAMoD,IAAYlB,GAAiBtR,GAAQga,CAAe;AAC1D,IAAAE,EAAa1H,EAAU,MAAM,GAC7B4H,EAAe5H,EAAU,QAAQ;AAAA,EACnC,GAAG,CAAA,CAAE,GAGL7Y,GAAoBP,GAAK,OAAO;AAAA,IAC9B,YAAY,OAAO;AAAA,MACjB,QAAQ6gB;AAAA,MACR,UAAUE;AAAA,IAAA;AAAA,EACZ,EACA,GAEE,CAACjhB,GAAS,qBAAqB,UAEf,OAAO,OAAO8G,CAAM,EACxB,WAAW,EAAG,QAAOiX;AAGrC,QAAMsD,IAAyB,CAAChJ,GAAWtR,MAAa;AACtD,UAAMuR,IAASvR,EAAS,UAAU,CAAA,GAC5BwR,IAAY,OAAO,OAAOF,CAAS,GAGnCG,wBAAuB,IAAA;AAC7B,IAAAF,EAAO,QAAQ,CAACtR,MAAU;AACxB,MAAAA,EAAM,QAAQ,QAAQ,CAACjD,MAAayU,EAAiB,IAAIzU,CAAQ,CAAC;AAAA,IACpE,CAAC;AAGD,UAAM0U,IAAkBF,EAAU;AAAA,MAChC,CAAC/R,MAAU,CAACgS,EAAiB,IAAIhS,EAAM,GAAG;AAAA,IAAA,GAItCkS,IAAQ;AAAA,MACZ,GAAGJ,EAAO,IAAI,CAACtR,OAAW;AAAA,QACxB,MAAM;AAAA,QACN,MAAMA;AAAA,QACN,UAAUA,EAAM,YAAY;AAAA,MAAA,EAC5B;AAAA,MACF,GAAGyR,EAAgB,IAAI,CAACjS,OAAW;AAAA,QACjC,MAAM;AAAA,QACN,MAAMA;AAAA,QACN,UAAUA,EAAM,YAAY;AAAA,MAAA,EAC5B;AAAA,IAAA;AAKJ,WAAO;AAAA,MACL,OAHkB9E,GAAOgX,GAAO,UAAU;AAAA,MAI1C,WAAWL;AAAA,IAAA;AAAA,EAEf,GAEMiJ,IAAmBD,EAAuBva,GAAQga,CAAe,GACjES,IAAeF,EAAuBN,GAAWE,CAAW,GAG5DO,IAAkB,CAACC,GAAWC,GAAWrH,MAAY;AAGzD,UAAMzB,IAAgB,CAAC,GAAIqI,EAAY,UAAU,CAAA,CAAG,GAC9ClI,IAAaH,EAAc,UAAU,CAAC3R,MAAMA,EAAE,OAAOoT,CAAO;AAElE,QAAItB,MAAe,GAAI;AAEvB,UAAM/R,IAAQ4R,EAAcG,CAAU,GAChC4I,IAAc3a,EAAM,UAAU,CAAA,GAE9B4a,IAAcD,EAAY,QAAQF,CAAS,GAC3CI,IAAcF,EAAY,QAAQD,CAAS;AAEjD,QAAIE,MAAgB,MAAMC,MAAgB,GAAI;AAG9C,UAAMC,IAAiB,CAAC,GAAGH,CAAW,GAChC,CAACI,CAAO,IAAID,EAAe,OAAOF,GAAa,CAAC;AACtD,IAAAE,EAAe,OAAOD,GAAa,GAAGE,CAAO,GAE7CnJ,EAAcG,CAAU,IAAI;AAAA,MAC1B,GAAG/R;AAAA,MACH,QAAQ8a;AAAA,IAAA,GAGVZ,EAAe;AAAA,MACb,GAAGD;AAAA,MACH,QAAQrI;AAAA,IAAA,CACT;AAAA,EACH,GAIMoJ,IAAqB,CAACC,GAAeC,MAAkB;AAE3D,UAAMN,IAAcL,EAAa,MAAM;AAAA,MACrC,CAACzI,MACEA,EAAK,SAAS,WAAWA,EAAK,KAAK,OAAOmJ,KAC1CnJ,EAAK,SAAS,WAAWA,EAAK,KAAK,QAAQmJ;AAAA,IAAA,GAG1CJ,IAAcN,EAAa,MAAM;AAAA,MACrC,CAACzI,MACEA,EAAK,SAAS,WAAWA,EAAK,KAAK,OAAOoJ,KAC1CpJ,EAAK,SAAS,WAAWA,EAAK,KAAK,QAAQoJ;AAAA,IAAA;AAGhD,QAAIN,MAAgB,MAAMC,MAAgB,GAAI;AAG9C,UAAMM,IAAiB,CAAC,GAAGZ,EAAa,KAAK,GACvC,CAACa,CAAS,IAAID,EAAe,OAAOP,GAAa,CAAC;AACxD,IAAAO,EAAe,OAAON,GAAa,GAAGO,CAAS;AAG/C,UAAMxJ,IAAgB,CAAC,GAAIqI,EAAY,UAAU,CAAA,CAAG,GAC9CpI,IAAgB,EAAE,GAAGkI,EAAA;AAE3B,IAAAoB,EAAe,QAAQ,CAACrJ,GAAMtE,MAAU;AACtC,UAAIsE,EAAK,SAAS,SAAS;AACzB,cAAMC,IAAaH,EAAc;AAAA,UAC/B,CAAC3R,MAAMA,EAAE,OAAO6R,EAAK,KAAK;AAAA,QAAA;AAE5B,QAAIC,MAAe,OACjBH,EAAcG,CAAU,IAAI;AAAA,UAC1B,GAAGH,EAAcG,CAAU;AAAA,UAC3B,UAAUvE;AAAA,QAAA,GAGZoE,EAAcG,CAAU,EAAE,QAAQ,QAAQ,CAAChV,MAAa;AACtD,UAAI8U,EAAc9U,CAAQ,MACxB8U,EAAc9U,CAAQ,IAAI;AAAA,YACxB,GAAG8U,EAAc9U,CAAQ;AAAA,YACzB,UAAUyQ;AAAA,UAAA;AAAA,QAGhB,CAAC;AAAA,MAEL,WAAWsE,EAAK,SAAS,SAAS;AAChC,cAAM/U,IAAW+U,EAAK,KAAK;AAC3B,QAAID,EAAc9U,CAAQ,MACxB8U,EAAc9U,CAAQ,IAAI;AAAA,UACxB,GAAG8U,EAAc9U,CAAQ;AAAA,UACzB,UAAUyQ;AAAA,QAAA;AAAA,MAGhB;AAAA,IACF,CAAC,GAGD0M,EAAe;AAAA,MACb,GAAGD;AAAA,MACH,QAAQrI;AAAA,IAAA,CACT,GACDoI,EAAanI,CAAa;AAAA,EAC5B,GAGMwJ,IAAc,CAAC7b,GAAO8b,IAAQ,IAAOjI,IAAU,SAAS;AAC5D,UAAM;AAAA,MACJ,OAAA6D;AAAA,MACA,OAAAjP;AAAA,MACA,OAAAsT,IAAQ;AAAA,MACR,KAAA3b;AAAA,MACA,QAAAiX;AAAA,IAAA,IACErX,GAEEgc,IAAe,6BACnBF,IAAQ,YAAY,WACtB,IAEMG,IAAgBjc,EAAM,eAAeA,EAAM,YAAY,SAAS,GAChEsW,IAAaqE,EAAmB,IAAIva,CAAG,GAEvC8b,IAAyB,CAAC7Z,MAAM;AACpC,MAAAA,EAAE,gBAAA;AACF,YAAM8Z,IAAc,IAAI,IAAIxB,CAAkB;AAC9C,MAAIrE,IACF6F,EAAY,OAAO/b,CAAG,IAEtB+b,EAAY,IAAI/b,CAAG,GAErBwa,EAAsBuB,CAAW;AAAA,IACnC,GAEMlP,sBACH,OAAA,EAAI,WAAW,GAAGzE,GAAA,CAAS,IAAIwT,CAAY,IAC1C,UAAA;AAAA,MAAA,gBAAA7iB,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA,gBAAAA;AAAA,QAACwe;AAAA,QAAA;AAAA,UACC,WAAWoE;AAAA,UACX,OAAArE;AAAA,UACA,SAAStX;AAAA,UACT,QAAAiX;AAAA,UACA,IAAIrX,EAAM;AAAA,UAEV,UAAA,gBAAA7G,EAAC,QAAA,EAAK,WAAU,WAMb,UAAA8iB,KACC,gBAAA/hB;AAAA,YAACE;AAAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,MAAK;AAAA,cACL,SAAS8hB;AAAA,cAER,UAAA;AAAA,gBAAArU,EAAO;AAAA,gBAAQ;AAAA,gBAAEyO,IAAa,SAAS;AAAA,gBAAO;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA,EACjD,CAEJ;AAAA,QAAA;AAAA,MAAA,GAEJ;AAAA,MACC2F,KAAiB3F,KAChB,gBAAAnd,EAAC,OAAA,EAAI,WAAU,QACb,UAAA,gBAAAA,EAAC4gB,IAAA,EAAc,YAAY/Z,GAAO,QAAAM,EAAA,CAAgB,EAAA,CACpD;AAAA,IAAA,GAEJ;AAGF,WAAKwb,IAWDjI,IAEA,gBAAA1a;AAAA,MAAC6f;AAAA,MAAA;AAAA,QAEC,MAAM,kBAAkBnF,CAAO;AAAA,QAC/B,OAAA7T;AAAA,QACA,OAAM;AAAA,QACN,YAAY,CAACib,GAAWC,MACtBF,EAAgBC,GAAWC,GAAWrH,CAAO;AAAA,QAE/C,SAAO;AAAA,QAEN,UAAA5G;AAAA,MAAA;AAAA,MATI,SAAS7M,CAAG;AAAA,IAAA,IAgBrB,gBAAAjH;AAAA,MAAC6f;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,OAAO,EAAE,MAAM,SAAS,KAAA5Y,GAAK,OAAAsX,GAAO,UAAU1X,EAAM,SAAA;AAAA,QACpD,OAAM;AAAA,QACN,YAAY,CAACib,GAAWC,MACtBM,EAAmBP,GAAWC,CAAS;AAAA,QAEzC,SAAO;AAAA,QAEN,UAAAjO;AAAA,MAAA;AAAA,MATI,SAAS7M,CAAG;AAAA,IAAA,IA9BZyT,sBACJ,OAAA,EAAiC,WAAU,iBACzC,UAAA5G,EAAA,GADO,SAAS7M,CAAG,UAEtB,IAEA6M;AAAA,EAqCN,GAGMmP,IAAc,CAAC5b,GAAOsb,IAAQ,OAAU;AAS5C,UAAMO,IAPJ7b,EAAM,QACF;AAAA,MACA,CAACjD,OACEue,IAAQf,IAAeD,GAAkB,UAAUvd,CAAQ;AAAA,IAAA,EAE/D,OAAO,OAAO,KAAK,CAAA,GAMlB+e,KADWR,IAAQrB,IAAcH,IACP,WAAW9Z,EAAM,EAAE,GAC7Cyb,IACJK,KAAiBA,EAAc,QAAQA,EAAc,KAAK,SAAS,GAC/DhG,IAAaqE,EAAmB,IAAI,SAASna,EAAM,EAAE,EAAE,GAEvD0b,IAAyB,CAAC7Z,MAAM;AACpC,MAAAA,EAAE,gBAAA;AACF,YAAM8Z,IAAc,IAAI,IAAIxB,CAAkB,GACxC4B,IAAW,SAAS/b,EAAM,EAAE;AAClC,MAAI8V,IACF6F,EAAY,OAAOI,CAAQ,IAE3BJ,EAAY,IAAII,CAAQ,GAE1B3B,EAAsBuB,CAAW;AAAA,IACnC,GAGMK,IAAkBP,IACpB;AAAA,MACE,aAAaK,EAAc,KAAK,IAAI,CAACG,OAAO,EAAE,GAAGA,EAAA,EAAI;AAAA,MACrD,eAAeH,EAAc;AAAA,IAAA,IAE/B,MAEEI,IACJ,gBAAAxiB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,mBAAmB4hB,IAAQ,gBAAgB,kBAAkB;AAAA,QAExE,UAAA;AAAA,UAAA,gBAAA5hB,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA;AAAA,YAAA,gBAAAf,EAACyd,IAAA,EAAM,IAAIkF,IAAQ,SAAS,aAAa,WAAU,QAChD,YAAO,aAAA,CACV;AAAA,8BACC,UAAA,EAAO,WAAWA,IAAQ,cAAc,IAAK,YAAM,OAAM;AAAA,YAIzDG,KACC,gBAAA/hB;AAAA,cAACE;AAAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,SAAS8hB;AAAA,gBACT,WAAU;AAAA,gBAET,UAAA;AAAA,kBAAArU,EAAO;AAAA,kBAAQ;AAAA,kBAAEyO,IAAa,SAAS;AAAA,kBAAO;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACjD,GAEJ;AAAA,UACC2F,KAAiB3F,KAAckG,KAC9B,gBAAArjB,EAAC,OAAA,EAAI,WAAU,QACb,UAAA,gBAAAA,EAAC4gB,IAAA,EAAc,YAAYyC,GAAiB,QAAAlc,EAAA,CAAgB,GAC9D;AAAA,4BAED,OAAA,EACE,UAAA;AAAA,YAAA+b,EAAkB;AAAA,cAAI,CAACrc,MACtB6b,EAAY7b,GAAO8b,GAAOtb,EAAM,EAAE;AAAA,YAAA;AAAA,YAEnC6b,EAAkB,WAAW,uBAC3B,OAAA,EAAI,WAAU,yBAAwB,UAAA,0BAAA,CAAuB;AAAA,UAAA,EAAA,CAElE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAIJ,WAAKP,IAUH,gBAAA3iB;AAAA,MAAC6f;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,OAAO;AAAA,UACL,MAAM;AAAA,UACN,IAAIxY,EAAM;AAAA,UACV,OAAOA,EAAM;AAAA,UACb,KAAKA,EAAM;AAAA,UACX,UAAUA,EAAM;AAAA,QAAA;AAAA,QAElB,OAAM;AAAA,QACN,YAAY,CAACya,GAAWC,MACtBM,EAAmBP,GAAWC,CAAS;AAAA,QAEzC,SAAO;AAAA,QAEN,UAAAwB;AAAA,MAAA;AAAA,MAfI,SAASlc,EAAM,EAAE;AAAA,IAAA,IATtB,gBAAArH,EAAC,SAAsC,WAAU,iBAC9C,eADO,SAASqH,EAAM,EAAE,UAE3B;AAAA,EAyBN,GAGMmc,IAA2B,MAAM;AACrC,UAAM,EAAE,OAAAzK,MAAU4I;AAElB,WACE,gBAAA3hB,EAAAqJ,GAAA,EACG,UAAA0P,EAAM,IAAI,CAACI,MACNA,EAAK,SAAS,UACT8J,EAAY9J,EAAK,MAAM,EAAK,IAGnC,gBAAAnZ;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAET,UAAA0iB,EAAYvJ,EAAK,MAAM,IAAO,IAAI;AAAA,MAAA;AAAA,MAH9B,SAASA,EAAK,KAAK,GAAG;AAAA,IAAA,CAMhC,EAAA,CACH;AAAA,EAEJ,GAGMsK,IAAuB,MAAM;AACjC,UAAM,EAAE,OAAA1K,MAAU6I;AAElB,WACE,gBAAA5hB,EAAAqJ,GAAA,EACG,UAAA0P,EAAM,IAAI,CAACI,MACNA,EAAK,SAAS,UACT8J,EAAY9J,EAAK,MAAM,EAAI,IAE7BuJ,EAAYvJ,EAAK,MAAM,IAAM,IAAI,CACzC,EAAA,CACH;AAAA,EAEJ;AAEA,SACE,gBAAApY,EAAC,OAAA,EAAI,WAAU,4BACb,UAAA;AAAA,IAAA,gBAAAA,EAAC2iB,IAAA,EAAI,WAAU,YACb,UAAA;AAAA,MAAA,gBAAA1jB,EAAC2jB,IAAA,EAAI,IAAI,GACP,UAAA,gBAAA3jB,EAAC8U,MAAO,OAAM,uBAAsB,2DAEpC,EAAA,CACF;AAAA,MACA,gBAAA9U,EAAC2jB,MAAI,IAAI,GAAG,WAAU,gBACpB,UAAA,gBAAA5iB,EAAC+T,IAAA,EAAO,OAAM,mBAAkB,UAAA;AAAA,QAAA;AAAA,QACvBpG,EAAO;AAAA,QAAwB;AAAA,MAAA,EAAA,CAGxC,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IACA,gBAAA1O;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK4e;AAAA,QACL,WAAU;AAAA,QACV,OAAO;AAAA,UACL,WAAW;AAAA,UACX,WAAW;AAAA,UACX,WAAW;AAAA,UACX,UAAU;AAAA,QAAA;AAAA,QAGZ,UAAA,gBAAA7d,EAAC2iB,IAAA,EAAI,WAAU,cACb,UAAA;AAAA,UAAA,gBAAA1jB,EAAC2jB,IAAA,EAAI,IAAI,GAAG,OAAO,EAAE,UAAU,WAAA,GAC5B,UAAAH,EAAA,EAAyB,CAC5B;AAAA,UACA,gBAAAxjB,EAAC2jB,IAAA,EAAI,IAAI,GAAG,OAAO,EAAE,UAAU,WAAA,GAC5B,UAAAF,EAAA,EAAqB,CACxB;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAzjB,EAAC2e,MAAU,wBAAAC,EAAA,CAAgD;AAAA,EAAA,GAC7D;AAEJ,CAAC;AAEDsC,GAAuB,cAAc;ACverC,SAAS0C,GAAa,EAAE,QAAAC,GAAQ,WAAA3b,GAAW,UAAArI,KAAY;AACrD,QAAM,EAAE,MAAAsI,GAAM,SAAAC,EAAA,IAAYF;AAC1B,MAAI,CAACC,EAAM,QAAO;AAElB,QAAM2b,IAAa,MAAM;AACvB,UAAMpb,IAAU7I,EAAS,KAAK,SAAS,WAAA;AACvC,IAAI6I,MACFmb,EAAOnb,CAAO,GACdN,EAAQ,EAAK;AAAA,EAEjB;AAEA,SACE,gBAAArH;AAAA,IAACuI;AAAA,IAAA;AAAA,MACC,UAAQ;AAAA,MACR,MAAAnB;AAAA,MACA,QAAQ,MAAMC,EAAQ,EAAK;AAAA,MAC3B,YAAU;AAAA,MACV,UAAS;AAAA,MAET,UAAA;AAAA,QAAA,gBAAApI,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,4BAACA,EAAM,OAAN,EAAY,UAAA,oBAAA,CAAiB,EAAA,CAChC;AAAA,QACA,gBAAAtJ;AAAA,UAACsJ,EAAM;AAAA,UAAN;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,UAAU,SAAA;AAAA,YAElB,UAAAzJ;AAAA,UAAA;AAAA,QAAA;AAAA,QAEH,gBAAAkB,EAACuI,EAAM,QAAN,EAAa,WAAU,yBACtB,UAAA;AAAA,UAAA,gBAAAtJ,EAACiB,GAAA,EAAO,SAAQ,aAAY,SAAS,MAAMmH,EAAQ,EAAK,GAAG,UAAA,SAAA,CAE3D;AAAA,4BACCnH,GAAA,EAAO,SAAQ,WAAU,SAAS6iB,GAAY,UAAA,OAAA,CAE/C;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAF,GAAa,YAAY;AAAA,EACvB,QAAQ1jB,EAAU,KAAK;AAAA,EACvB,WAAWA,EAAU,MAAM;AAAA,IACzB,MAAMA,EAAU,KAAK;AAAA,IACrB,SAASA,EAAU,KAAK;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,UAAUA,EAAU,KAAK;AAC3B;ACvCA,SAAS6jB,GAAmB,EAAE,SAAA/f,IAAU,CAAA,GAAI,aAAAiE,GAAa,QAAA+b,IAAS,MAAM;AAAC,KAAK;AAC5E,QAAM,CAAC7b,GAAMC,CAAO,IAAI0H,EAAS,EAAK,GAChCmU,IAAoBxjB,GAAO,IAAI;AAErC,MAAI,OAAO,KAAKuD,EAAQ,mBAAmB,EAAE,WAAW,EAAG,QAAO;AAElE,QAAM8f,IAAa,CAACI,MAAgB;AAClC,UAAMxb,IAAUxD,EAAUlB,CAAO;AACjC,IAAA0E,EAAQ,oBAAoB,SAASwb,EAAY;AAEjD,UAAMvL,IAASuL,EAAY,UAAU,UAAU,CAAA;AAC/C,IAAIvL,EAAO,WAAW,IACpBjQ,EAAQ,WAAW,CAAA,IAEnBA,EAAQ,WAAW;AAAA,MACjB,QAAAiQ;AAAA,MACA,UAAUuL,EAAY,UAAU,YAAY,CAAA;AAAA,IAAC,GAIjDxb,EAAQ,UAAU,IAClBsb,EAAO,IAAIjf,GAASW,GAAA,GAAiBgD,CAAO,CAAC;AAAA,EAC/C;AAEA,SACE,gBAAA3H,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,IAAA,EAAS,KAAI,uBACZ,UAAA,gBAAA1O;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,SAAS,MAAMmH,EAAQ,EAAI;AAAA,QAE1B,UAAA;AAAA,UAAAsG,EAAO;AAAA,UAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEnB;AAAA,IACA,gBAAA1O;AAAA,MAAC4jB;AAAA,MAAA;AAAA,QACC,aAAA3b;AAAA,QACA,WAAW,EAAE,MAAAE,GAAM,SAAAC,EAAA;AAAA,QACnB,QAAQ0b;AAAA,QAER,UAAA,gBAAA9jB;AAAA,UAACkhB;AAAA,UAAA;AAAA,YACC,KAAK+C;AAAA,YACL,SAAS/e,EAAUlB,KAAW,CAAA,CAAE;AAAA,UAAA;AAAA,QAAA;AAAA,MAClC;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAEA+f,GAAmB,YAAY;AAAA,EAC7B,SAAS7jB,EAAU;AAAA,EACnB,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,QAAQzE,EAAU;AACpB;AACA6jB,GAAmB,eAAe;AAAA,EAChC,SAAS,CAAA;AAAA,EACT,QAAQ,MAAM;AAAA,EAAC;AACjB;ACzEA,MAAMI,KAAiB;AAAA,EACrB,EAAE,OAAO1K,EAAW,WAAW,MAAMA,EAAW,WAAW,OAAO,UAAA;AAAA,EAClE;AAAA,IACE,OAAOA,EAAW;AAAA,IAClB,MAAMA,EAAW;AAAA,IACjB,OAAO;AAAA,EAAA;AAAA,EAET;AAAA,IACE,OAAOA,EAAW;AAAA,IAClB,MAAMA,EAAW;AAAA,IACjB,OAAO;AAAA,EAAA;AAAA,EAET;AAAA,IACE,OAAOA,EAAW;AAAA,IAClB,MAAMA,EAAW;AAAA,IACjB,OAAO;AAAA,EAAA;AAAA,EAET,EAAE,OAAOA,EAAW,QAAQ,MAAMA,EAAW,QAAQ,OAAO,OAAA;AAAA,EAC5D;AAAA,IACE,OAAOA,EAAW;AAAA,IAClB,MAAMA,EAAW;AAAA,IACjB,OAAO;AAAA,EAAA;AAAA,EAET,EAAE,OAAOA,EAAW,UAAU,MAAMA,EAAW,UAAU,OAAO,SAAA;AAAA,EAChE,EAAE,OAAOA,EAAW,gBAAgB,MAAMA,EAAW,gBAAgB,OAAO,oBAAA;AAAA,EAC5E;AAAA,IACE,OAAOA,EAAW;AAAA,IAClB,MAAMA,EAAW;AAAA,IACjB,OAAO;AAAA,EAAA;AAAA,EAET;AAAA,IACE,OAAOA,EAAW;AAAA,IAClB,MAAMA,EAAW;AAAA,IACjB,OAAO;AAAA,EAAA;AAAA,EAET;AAAA,IACE,OAAOA,EAAW;AAAA,IAClB,MAAMA,EAAW;AAAA,IACjB,OAAO;AAAA,EAAA;AAEX,GCvCM2K,KAAoB;AAAA,EACxB;AAAA,IACE,OAAO3K,EAAW;AAAA,IAClB,MAAMA,EAAW;AAAA,IACjB,OAAO;AAAA,EAAA;AAAA,EAET;AAAA,IACE,OAAOA,EAAW;AAAA,IAClB,MAAMA,EAAW;AAAA,IACjB,OAAO;AAAA,EAAA;AAAA,EAET;AAAA,IACE,OAAOA,EAAW;AAAA,IAClB,MAAMA,EAAW;AAAA,IACjB,OAAO;AAAA,EAAA;AAAA,EAET;AAAA,IACE,OAAOA,EAAW;AAAA,IAClB,MAAMA,EAAW;AAAA,IACjB,OAAO;AAAA,EAAA;AAAA,EAET,EAAE,OAAOA,EAAW,SAAS,MAAMA,EAAW,SAAS,OAAO,QAAA;AAAA,EAC9D,EAAE,OAAOA,EAAW,UAAU,MAAMA,EAAW,UAAU,OAAO,SAAA;AAClE,GAEM4K,KAAoBD,IAEpBE,KAAc;AAAA,EAClB;AAAA,IACE,OAAO7K,EAAW;AAAA,IAClB,MAAMA,EAAW;AAAA,IACjB,OAAO;AAAA,EAAA;AAAA,EAET;AAAA,IACE,OAAOA,EAAW;AAAA,IAClB,MAAMA,EAAW;AAAA,IACjB,OAAO;AAAA,EAAA;AAAA,EAET;AAAA,IACE,OAAOA,EAAW;AAAA,IAClB,MAAMA,EAAW;AAAA,IACjB,OAAO;AAAA,EAAA;AAAA,EAET;AAAA,IACE,OAAOA,EAAW;AAAA,IAClB,MAAMA,EAAW;AAAA,IACjB,OAAO;AAAA,EAAA;AAEX,GAEa8K,KAAYJ,IACZK,KAAcL,GAAe,OAAOC,EAAiB,GACrDK,KAAcN,GAAe,OAAOE,EAAiB,GACrDK,KAAaJ,ICtDpBK,KAAgB,CAAC1d,MAAQ;AAC7B,QAAM2d,IAAMJ,GAAY,KAAK,CAACtb,MAAMA,EAAE,UAAUjC,CAAG;AACnD,SAAO2d,IAAMA,EAAI,QAAQ3d;AAC3B;ACMA,SAAS4d,GAAW,EAAE,UAAAC,GAAU,MAAAC,KAAQ;AACtC,QAAM1jB,IAAQyjB,EAASC,CAAI,GAyBrBC,IAtBU;AAAA,IACd,OAAO;AAAA,MACL,MAAM3jB,KAAS;AAAA,MACf,SAAS;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,IAET,MAAM;AAAA,MACJ,MACEyjB,EAAS,SAASrL,EAAW,WACzB,GAAGkL,GAAcG,EAAS,IAAI,CAAC,KAAKA,GAAU,aAAa,KAC3DH,GAAcG,EAAS,IAAI;AAAA,MACjC,SAAS;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,IAET,MAAM;AAAA,MACJ,MAAMzjB,IAAQ,0BAA0BA,CAAK,KAAK;AAAA,MAClD,SAAS;AAAA,MACT,OAAO;AAAA,IAAA;AAAA,EACT,EAI0B0jB,CAAI,KAAK;AAAA,IACnC,MAAM1jB,KAAS;AAAA,IACf,SAAS;AAAA,IACT,OAAO;AAAA,EAAA;AAGT,SACE,gBAAArB;AAAA,IAACqd;AAAA,IAAA;AAAA,MACC,SAAS2H,EAAY;AAAA,MACrB,OAAOA,EAAY;AAAA,MACnB,MAAMA,EAAY;AAAA,IAAA;AAAA,EAAA;AAGxB;AAEAH,GAAW,YAAY;AAAA,EACrB,MAAM3kB,EAAU,MAAM,CAAC,SAAS,QAAQ,MAAM,CAAC,EAAE;AAAA,EACjD,UAAUA,EAAU,OAAO;AAC7B;ACnCA,MAAM+kB,KAAe;AAAA,EACnB,EAAE,OAAO,QAAQ,OAAO,QAAQ,IAAI,SAAS,MAAM,OAAA;AAAA,EACnD,EAAE,OAAO,WAAW,OAAO,SAAS,IAAI,WAAW,MAAM,QAAA;AAAA,EACzD;AAAA,IACE,OAAO;AAAA,IACP,OAAO;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,EAAE,OAAO,QAAQ,OAAO,mBAAmB,IAAI,QAAQ,MAAM,QAAA;AAAA,EAC7D,EAAE,OAAO,UAAU,OAAO,WAAW,IAAI,UAAU,MAAM,QAAA;AAAA,EACzD,EAAE,OAAO,WAAW,OAAO,eAAe,IAAI,WAAW,MAAM,QAAA;AAAA,EAC/D,EAAE,OAAO,WAAW,OAAO,QAAQ,IAAI,aAAa,MAAM,OAAA;AAC5D,GAEMC,KAAgB9kB,GAAW,CAAC,EAAE,OAAAyG,GAAO,YAAAse,GAAY,cAAAC,EAAA,GAAgB7kB,MAAQ;AAC7E,QAAM8kB,IAAc5kB,GAAA,GACd6kB,IAAW7kB,GAAA,GACX8kB,IAAU9kB,GAAA,GAEV+kB,IAAW/kB,GAAA,GACXglB,IAAWhlB,GAAA,GACXilB,IAAQjlB,GAAA,GACR,CAACklB,GAAeC,CAAgB,IAAI9V,EAASjJ,EAAM,SAAS,MAAM,GAClE,CAACgf,GAAkBC,CAAmB,IAAIhW,EAAS,EAAK,GACxD,CAACiW,GAAaC,CAAc,IAAIlW,EAASjJ,EAAM,gBAAgB,EAAE,GACjE,CAAA,EAAGof,CAAe,IAAInW,EAASjJ,EAAM,SAAS,EAAE,GAGhDqf,IAAoB,CAACzM,EAAW,UAAUA,EAAW,MAAM,GAQ3D0M,IANCtf,EAAM,SACJA,EAAM,OAAO;AAAA,IAAO,CAACT,MAC1B8f,EAAkB,SAAS9f,EAAM,IAAI;AAAA,EAAA,IAFb,CAAA,GAStBggB,IAAqB,MACzBD,EAAY,OAAO,CAAC/f,MAAU,CAAC2f,EAAY,SAAS3f,EAAM,KAAK,CAAC,GAG5DigB,IAAiB,CAACC,MAAc;AACpC,IAAAN,EAAe,CAAC,GAAGD,GAAaO,CAAS,CAAC;AAAA,EAC5C,GAGMC,IAAoB,CAACD,MAAc;AACvC,IAAAN,EAAeD,EAAY,OAAO,CAACxhB,MAAMA,MAAM+hB,CAAS,CAAC;AAAA,EAC3D,GAGME,IAAe,CAAC3R,MAAU;AAC9B,QAAIA,MAAU,EAAG;AACjB,UAAM4R,IAAY,CAAC,GAAGV,CAAW;AACjC,KAACU,EAAU5R,IAAQ,CAAC,GAAG4R,EAAU5R,CAAK,CAAC,IAAI;AAAA,MACzC4R,EAAU5R,CAAK;AAAA,MACf4R,EAAU5R,IAAQ,CAAC;AAAA,IAAA,GAErBmR,EAAeS,CAAS;AAAA,EAC1B,GAGMC,IAAiB,CAAC7R,MAAU;AAChC,QAAIA,MAAUkR,EAAY,SAAS,EAAG;AACtC,UAAMU,IAAY,CAAC,GAAGV,CAAW;AACjC,KAACU,EAAU5R,CAAK,GAAG4R,EAAU5R,IAAQ,CAAC,CAAC,IAAI;AAAA,MACzC4R,EAAU5R,IAAQ,CAAC;AAAA,MACnB4R,EAAU5R,CAAK;AAAA,IAAA,GAEjBmR,EAAeS,CAAS;AAAA,EAC1B;AAEA,SAAA3lB,GAAoBP,GAAK,OAAO;AAAA,IAC9B,aAAa8kB,EAAY;AAAA,IACzB,UAAUC,EAAS;AAAA,IACnB,SAASC,EAAQ;AAAA;AAAA,IAEjB,UAAUC,EAAS;AAAA,IACnB,UAAUC,EAAS;AAAA,IACnB,OAAOC,EAAM;AAAA,IACb,aAAAK;AAAA,EAAA,EACA,GAGA,gBAAAhlB,EAACd,GAAA,EAAK,WAAU,kBACd,UAAA;AAAA,IAAA,gBAAAc,EAACnB,IAAA,EAAW,WAAU,uBACpB,UAAA;AAAA,MAAA,gBAAAmB,EAACC,IAAA,EACC,UAAA;AAAA,QAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAgB,UAAA,OAAA,CAAI;AAAA,QACrB,gBAAAhB;AAAA,UAACC,EAAK;AAAA,UAAL;AAAA,YACC,MAAK;AAAA,YACL,cAAc4G,EAAM;AAAA,YACpB,KAAKwe;AAAA,YACL,UAAU,CAAC,CAACxe,EAAM;AAAA,YAClB,WAAWA,EAAM,MAAM,wBAAwB;AAAA,UAAA;AAAA,QAAA;AAAA,MACjD,GACF;AAAA,MACA,gBAAA9F,EAAC,OAAA,EAAI,WAAU,QAAO,UAAA;AAAA,QAAA;AAAA,0BAEnB,MAAA,EAAG;AAAA,QAAE;AAAA,0BAGL,MAAA,EAAG;AAAA,QAAE;AAAA,MAAA,EAAA,CAER;AAAA,IAAA,GACF;AAAA,IACA,gBAAAf,EAACJ,IAAA,EAAW,WAAU,yBACpB,4BAACoB,IAAA,EACC,UAAA;AAAA,MAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAgB,UAAA,eAAA,CAAY;AAAA,MAC7B,gBAAAhB;AAAA,QAACC,EAAK;AAAA,QAAL;AAAA,UACC,MAAK;AAAA,UACL,cAAc4G,EAAM;AAAA,UACpB,KAAKye;AAAA,UACL,UAAU,CAACpc,MAAM+c,EAAgB/c,EAAE,OAAO,KAAK;AAAA,QAAA;AAAA,MAAA;AAAA,IACjD,EAAA,CACF,EAAA,CACF;AAAA,IACA,gBAAAlJ,EAACJ,IAAA,EAAW,WAAU,wBACpB,4BAACoB,IAAA,EACC,UAAA;AAAA,MAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAgB,UAAA,kBAAA,CAAe;AAAA,MAChC,gBAAAhB,EAACC,EAAK,QAAL,EAAY,cAAc4G,EAAM,QAAQ,GAAG,KAAK0e,GAC9C,UAAA,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,CAAClkB,MACvB,gBAAArB,EAAC,UAAA,EAAmB,OAAAqB,GACjB,UAAAA,EAAA,GADUA,CAEb,CACD,EAAA,CACH;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,IAYA,gBAAArB,EAACJ,IAAA,EAAW,WAAU,yBACpB,4BAACoB,IAAA,EACC,UAAA;AAAA,MAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAgB,UAAA,eAAA,CAAY;AAAA,MAC7B,gBAAAhB;AAAA,QAACC,EAAK;AAAA,QAAL;AAAA,UACC,cAAc4G,EAAM;AAAA,UACpB,KAAK2e;AAAA,UACL,UAAU,CAACtc,MAAM0c,EAAiB1c,EAAE,OAAO,KAAK;AAAA,UAE/C,UAAA+b,GAAa,IAAI,CAAC0B,MACjB,gBAAA3mB,EAAC,UAAA,EAA0B,OAAO2mB,EAAO,OACtC,UAAAA,EAAO,MAAA,GADGA,EAAO,KAEpB,CACD;AAAA,QAAA;AAAA,MAAA;AAAA,MAEH,gBAAA3mB,EAACgB,GAAW,MAAX,EAAgB,WAAU,YACzB,UAAA,gBAAAhB;AAAA,QAACyd;AAAA,QAAA;AAAA,UACC,IACEwH,GAAa,KAAK,CAAC2B,MAAQA,EAAI,UAAUjB,CAAa,GAAG,MACzD;AAAA,UAEF,MACEV,GAAa,KAAK,CAAC2B,MAAQA,EAAI,UAAUjB,CAAa,GAAG,QACzD;AAAA,UAEF,WAAWA,MAAkB,YAAY,gBAAgB;AAAA,UAExD,UAAAV,GAAa,KAAK,CAAC2B,MAAQA,EAAI,UAAUjB,CAAa,GAAG,SACxD;AAAA,QAAA;AAAA,MAAA,EACJ,CACF;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,IACA,gBAAA3lB,EAACJ,IAAA,EAAW,WAAU,sBACpB,4BAACoB,IAAA,EACC,UAAA;AAAA,MAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAgB,UAAA,aAAA,CAAU;AAAA,MAC3B,gBAAAD,EAACd,EAAK,QAAL,EAAY,cAAc4G,EAAM,OAAO,KAAK4e,GAC3C,UAAA;AAAA,QAAA,gBAAAzlB,EAAC,UAAA,EAAO,OAAM,yBAAwB,UAAA,QAAI;AAAA,QAC1C,gBAAAA,EAAC,UAAA,EAAO,OAAM,4BAA2B,UAAA,oBAAgB;AAAA,QACzD,gBAAAA,EAAC,UAAA,EAAO,OAAM,6BAA4B,UAAA,4BAAA,CAE1C;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,IACA,gBAAAA,EAACJ,MAAW,WAAU,aAAY,QAAQ,CAACulB,GACzC,4BAACnkB,IAAA,EACC,UAAA;AAAA,MAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAgB,UAAA,oBAAA,CAAiB;AAAA,MAClC,gBAAAD,EAACd,EAAK,QAAL,EAAY,cAAc4G,GAAO,IAAI,KAAK6e,GACzC,UAAA;AAAA,QAAA,gBAAA1lB,EAAC,UAAA,EAAO,OAAO,IAAO,UAAA,MAAE;AAAA,QACxB,gBAAAA,EAAC,UAAA,EAAO,OAAK,IAAC,UAAA,MAAA,CAAG;AAAA,MAAA,EAAA,CACnB;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,IAGC,CAAColB,KACA,gBAAArkB,EAACnB,IAAA,EAAW,WAAU,uBACpB,UAAA;AAAA,MAAA,gBAAAmB;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,SAAS,MAAM6kB,EAAoB,CAACD,CAAgB;AAAA,UACpD,iBAAc;AAAA,UACd,iBAAeA;AAAA,UACf,WAAU;AAAA,UAET,UAAA;AAAA,YAAAA,IAAmB,MAAM;AAAA,YAAI;AAAA,YAC7BE,EAAY,SAAS,KACpB,gBAAAhlB,EAAC0c,MAAM,IAAG,QAAO,WAAU,QACxB,UAAA;AAAA,cAAAsI,EAAY;AAAA,cAAO;AAAA,cAAOA,EAAY,SAAS,IAAI,MAAM;AAAA,cAAI;AAAA,cAAI;AAAA,YAAA,EAAA,CAEpE;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGJ,gBAAA/lB,EAAC6mB,IAAA,EAAS,IAAIhB,GACZ,UAAA,gBAAA7lB,EAAC,OAAA,EAAI,IAAG,0BACN,UAAA,gBAAAe,EAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,KAAA,EAAE,WAAU,yBAAwB,UAAA;AAAA,UAAA;AAAA,UAG1B;AAAA,UACT,gBAAAf,EAAC,YAAO,UAAA,6CAAA,CAA0C;AAAA,QAAA,GACpD;AAAA,QAGC+lB,EAAY,SAAS,KACpB,gBAAAhlB,EAAC,OAAA,EAAI,WAAU,QACb,UAAA;AAAA,UAAA,gBAAAf,EAAC,UAAA,EAAO,WAAU,gBAAe,UAAA,+BAEjC;AAAA,4BACC8mB,IAAA,EACE,UAAAf,EAAY,IAAI,CAACO,GAAWzR,MAAU;AACrC,kBAAMzO,IAAQ+f,EAAY;AAAA,cACxB,CAAC5hB,MAAMA,EAAE,UAAU+hB;AAAA,YAAA;AAErB,mBAAKlgB,IAEH,gBAAArF;AAAA,cAAC+lB,GAAU;AAAA,cAAV;AAAA,gBAEC,WAAU;AAAA,gBAEV,UAAA;AAAA,kBAAA,gBAAA/lB,EAAC,QAAA,EACC,UAAA;AAAA,oBAAA,gBAAAf,EAAC,UAAA,EAAQ,UAAAoG,EAAM,SAAS,IAAG;AAAA,oBAC3B,gBAAApG,EAAC6kB,IAAA,EAAW,UAAUze,GAAO,MAAK,QAAA,CAAQ;AAAA,kBAAA,GAI5C;AAAA,oCACC,OAAA,EACC,UAAA;AAAA,oBAAA,gBAAApG;AAAA,sBAACiB;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,SAAQ;AAAA,wBACR,SAAS,MAAMulB,EAAa3R,CAAK;AAAA,wBACjC,UAAUA,MAAU;AAAA,wBACpB,WAAU;AAAA,wBACV,OAAM;AAAA,wBACP,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGD,gBAAA7U;AAAA,sBAACiB;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,SAAQ;AAAA,wBACR,SAAS,MAAMylB,EAAe7R,CAAK;AAAA,wBACnC,UAAUA,MAAUkR,EAAY,SAAS;AAAA,wBACzC,WAAU;AAAA,wBACV,OAAM;AAAA,wBACP,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGD,gBAAA/lB;AAAA,sBAACiB;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,SAAQ;AAAA,wBACR,SAAS,MAAMslB,EAAkBD,CAAS;AAAA,wBAC1C,OAAM;AAAA,wBACP,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAED,EAAA,CACF;AAAA,gBAAA;AAAA,cAAA;AAAA,cAvCKA;AAAA,YAAA,IAHU;AAAA,UA6CrB,CAAC,EAAA,CACH;AAAA,QAAA,GACF;AAAA,QAIDF,IAAqB,SAAS,KAC7B,gBAAArlB,EAAC,OAAA,EAAI,WAAU,QACb,UAAA;AAAA,UAAA,gBAAAf,EAAC,UAAA,EAAO,WAAU,gBAAe,UAAA,qBAAiB;AAAA,4BACjD8mB,IAAA,EACE,UAAAV,EAAA,EAAqB,IAAI,CAAChgB,MACzB,gBAAArF;AAAA,YAAC+lB,GAAU;AAAA,YAAV;AAAA,cAEC,WAAU;AAAA,cAEV,UAAA;AAAA,gBAAA,gBAAA/lB,EAAC,QAAA,EACC,UAAA;AAAA,kBAAA,gBAAAf,EAAC,UAAA,EAAQ,UAAAoG,EAAM,SAASA,EAAM,OAAM;AAAA,kBACpC,gBAAApG,EAAC6kB,IAAA,EAAW,UAAUze,GAAO,MAAK,QAAA,CAAQ;AAAA,gBAAA,GAC5C;AAAA,gBACA,gBAAApG;AAAA,kBAACiB;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAQ;AAAA,oBACR,SAAS,MAAMolB,EAAejgB,EAAM,KAAK;AAAA,oBAC1C,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAED;AAAA,YAAA;AAAA,YAbKA,EAAM;AAAA,UAAA,CAed,EAAA,CACH;AAAA,QAAA,GACF;AAAA,QAGD+f,EAAY,WAAW,uBACrB,OAAA,EAAI,WAAU,yBAAwB,UAAA,oDAAA,CAEvC;AAAA,MAAA,EAAA,CAEJ,GACF,EAAA,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GAEJ;AAEJ,CAAC;AAEDjB,GAAc,YAAY;AAAA,EACxB,OAAOhlB,EAAU,OAAO;AAAA,EACxB,YAAYA,EAAU,KAAK;AAAA,EAC3B,cAAcA,EAAU;AAC1B;AAEAglB,GAAc,eAAe;AAAA,EAC3B,cAAc;AAChB;AAEAA,GAAc,cAAc;AC9V5B,SAAS6B,GAAejiB,GAAO;AAC7B,QAAM,EAAE,SAAAiD,GAAS,YAAAod,GAAY,OAAAte,GAAO,WAAAqB,MAAcpD,GAC5C,EAAE,MAAAqD,GAAM,SAAAC,EAAA,IAAYF,GACpBG,IAAU5H,GAAA,GAEV6H,IAAe,CAACC,MAAc;AAClC,UAAMye,IAAa;AAAA,MACjB,KAAK3e,EAAQ,QAAQ,YAAY,MAAM,KAAA;AAAA,MACvC,OAAOA,EAAQ,QAAQ,SAAS,MAAM,KAAA;AAAA,MACtC,OAAOA,EAAQ,QAAQ,SAAS,MAAM,KAAA;AAAA,MACtC,OAAOA,EAAQ,QAAQ,SAAS,MAAM,KAAA;AAAA,MACtC,MAAM,SAASA,EAAQ,QAAQ,QAAQ,MAAM,KAAA,KAAU,GAAG,EAAE;AAAA,MAC5D,UAAU;AAAA;AAAA,MACV,IACEA,EAAQ,QAAQ,MAAM,UAAU,UAChCA,EAAQ,QAAQ,MAAM,UAAU,MAChC;AAAA,MACF,cAAcA,EAAQ,QAAQ,eAAe,CAAA;AAAA,IAAC;AAEhD,IAAAE,EAAUye,CAAU,GACpB5e,EAAQ,EAAK;AAAA,EACf,GAEMQ,IAAe,CAACL,MAAc;AAClC,UAAMG,IAAU;AAAA,MACd,KAAKL,EAAQ,QAAQ,YAAY,MAAM,KAAA;AAAA,MACvC,OAAOA,EAAQ,QAAQ,SAAS,MAAM,KAAA;AAAA,MACtC,OAAOA,EAAQ,QAAQ,SAAS,MAAM,KAAA;AAAA,MACtC,OAAOA,EAAQ,QAAQ,SAAS,MAAM,KAAA;AAAA,MACtC,MAAM,SAASA,EAAQ,QAAQ,QAAQ,MAAM,KAAA,KAAU,GAAG,EAAE;AAAA,MAC5D,UAAUxB,EAAM;AAAA;AAAA,MAChB,IACEwB,EAAQ,QAAQ,MAAM,UAAU,UAChCA,EAAQ,QAAQ,MAAM,UAAU,MAChC;AAAA,MACF,cAAcA,EAAQ,QAAQ,eAAe,CAAA;AAAA,IAAC;AAEhD,IAAAE,EAAU1B,EAAM,KAAK6B,CAAO,GAC5BN,EAAQ,EAAK;AAAA,EACf,GAEMS,IAAY,CAACC,GAASP,MAAc;AACxC,QAAIQ,IAAS;AACb,YAAQD,GAAA;AAAA,MACN,KAAK;AACH,QAAAC,IACE,gBAAA/I;AAAA,UAACiB;AAAA,UAAA;AAAA,YAEC,SAAQ;AAAA,YACR,SAASsH,IAAY,MAAMD,EAAaC,CAAS,IAAI,MAAM;AAAA,YAAC;AAAA,YAC7D,UAAA;AAAA,UAAA;AAAA,UAHM,yBAAyBO,CAAO;AAAA,QAAA;AAOzC;AAAA,MACF,KAAK;AACH,QAAAC,IACE,gBAAA/I;AAAA,UAACiB;AAAA,UAAA;AAAA,YAEC,SAAQ;AAAA,YACR,SAASsH,IAAY,MAAMK,EAAaL,CAAS,IAAI,MAAM;AAAA,YAAC;AAAA,YAC7D,UAAA;AAAA,UAAA;AAAA,UAHM,yBAAyBO,CAAO;AAAA,QAAA;AAOzC;AAAA,MACF;AACE,QAAAC,IAAS;AAAA,IAAA;AAEb,WAAOA;AAAA,EACT,GAEMC,IAAa,MAAM;AACvB,UAAMC,IAAU,CAAA;AAChB,WAAAlB,EAAQ,QAAQ,CAACmB,MAAM;AACrB,MAAAD,EAAQ,KAAKJ,EAAUK,EAAE,QAAQA,EAAE,QAAQ,CAAC;AAAA,IAI9C,CAAC,GACMD;AAAA,EACT,GAEME,IAAY,MAAM;AACtB,UAAM1D,IAAQ,CAAA,GACR2D,IAAU,EAAE,GAAG,aAAa,GAAG,wBAAA;AACrC,WAAArB,EAAQ,IAAI,CAACmB,MAAMzD,EAAM,KAAK2D,EAAQF,EAAE,MAAM,CAAC,CAAC,GACzCzD,EAAM,KAAK,GAAG;AAAA,EACvB;AAEA,SACE,gBAAA1E;AAAA,IAACuI;AAAA,IAAA;AAAA,MACC,UAAQ;AAAA,MACR,MAAK;AAAA,MACL,UAAS;AAAA,MACT,MAAAnB;AAAA,MACA,QAAQ,MAAMC,EAAQ,EAAK;AAAA,MAE3B,UAAA;AAAA,QAAA,gBAAApI,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,UAAA,gBAAAtJ,EAACsJ,EAAM,OAAN,EAAa,UAAAH,EAAA,EAAU,CAAE,EAAA,CAC5B;AAAA,QACA,gBAAAnJ,EAACsJ,EAAM,MAAN,EAAW,OAAO,EAAE,WAAW,QAAQ,UAAU,OAAA,GAChD,UAAA,gBAAAtJ,EAAC,OAAA,EAAI,WAAU,aACb,UAAA,gBAAAA;AAAA,UAACklB;AAAA,UAAA;AAAA,YACC,KAAK7c;AAAA,YACL,OAAAxB;AAAA,YACA,YAAAse;AAAA,YACA,cAAcpd,EAAQ,KAAK,CAACiT,MAAMA,EAAE,WAAW,GAAG;AAAA,UAAA;AAAA,QAAA,GAEtD,EAAA,CACF;AAAA,QACA,gBAAAja,EAACuI,EAAM,QAAN,EAAa,WAAU,yBACtB,UAAA;AAAA,UAAA,gBAAAtJ,EAACiB,GAAA,EAAO,SAAQ,aAAY,SAAS,MAAMmH,EAAQ,EAAK,GAAG,UAAA,SAAA,CAE3D;AAAA,UACCY,EAAA;AAAA,QAAW,EAAA,CACd;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA+d,GAAe,YAAY;AAAA,EACzB,SAAS7mB,EAAU;AAAA,IACjBA,EAAU,MAAM;AAAA,MACd,QAAQA,EAAU,MAAM,CAAC,KAAK,GAAG,CAAC;AAAA,MAClC,UAAUA,EAAU;AAAA,IAAA,CACrB;AAAA,EAAA,EACD;AAAA,EACF,YAAYA,EAAU;AAAA,EACtB,OAAOA,EAAU;AAAA,EACjB,WAAWA,EAAU,MAAM;AAAA,IACzB,MAAMA,EAAU,KAAK;AAAA,IACrB,SAASA,EAAU,KAAK;AAAA,EAAA,CACzB,EAAE;AACL;AAEA6mB,GAAe,eAAe,EAAE,YAAY,IAAO,OAAO,CAAA,EAAC;ACrI3D,MAAME,KAAmB,CAACniB,MAAU;AAClC,QAAM,EAAE,UAAAoiB,GAAU,YAAA/B,GAAY,OAAAte,GAAO,IAAAgN,MAAO/O,GACtC,CAACqD,GAAMC,CAAO,IAAI0H,EAAS,EAAK,GAEhCE,IAAU,CAACmX,MAAS;AACxB,UAAMvX,IAAOuX,EAAK,MAAM,GAAG;AAC3B,WAAO,OAAO5X,GAAIK,EAAK,CAAC,CAAC,KAAM,aAC3BL,GAAIK,EAAK,CAAC,CAAC,EAAEA,EAAK,CAAC,CAAC,IACpBL,GAAIK,EAAK,CAAC,CAAC,KAAK;AAAA,EACtB,GAEMmE,IACJ,gBAAAhT;AAAA,IAACiT,GAAS;AAAA,IAAT;AAAA,MACC,UAAU,mBAAmBnN,EAAM,KAAK;AAAA,MACxC,SAAS,MAAMuB,EAAQ,EAAI;AAAA,MAE1B,UAAA;AAAA,QAAAsG,EAAO;AAAA,QAAS;AAAA,QAAasB,EAAQ,mBAAmBnJ,EAAM,KAAK,EAAE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAI1E,SACE,gBAAA9F,EAAAsI,GAAA,EACG,UAAA;AAAA,IAAAwK,MAAO,SACNE,IAEA,gBAAA/T,EAACyP,IAAA,EAAS,KAAK,mBAAmB5I,EAAM,KAAK,IAC3C,UAAA,gBAAA7G,EAACiB,KAAO,MAAK,MAAK,SAAS,MAAMmH,EAAQ,EAAI,GAC1C,UAAAsG,EAAO,UACV,EAAA,CACF;AAAA,IAEF,gBAAA1O;AAAA,MAAC+mB;AAAA,MAAA;AAAA,QACC,SAAS,CAAC,EAAE,QAAQ,KAAK,UAAUG,GAAU;AAAA,QAC7C,YAAA/B;AAAA,QACA,OAAAte;AAAA,QACA,WAAW,EAAE,MAAAsB,GAAM,SAAAC,EAAA;AAAA,MAAQ;AAAA,IAAA;AAAA,EAC7B,GACF;AAEJ;AAEA6e,GAAiB,YAAY;AAAA,EAC3B,UAAU/mB,EAAU,KAAK;AAAA,EACzB,YAAYA,EAAU;AAAA,EACtB,OAAOA,EAAU,OAAO;AAAA,EACxB,IAAIA,EAAU;AAChB;AAEA+mB,GAAiB,eAAe,EAAE,YAAY,IAAO,IAAI,OAAA;ACjDzD,MAAMG,KAAkB,CAACtiB,MAAU;AACjC,QAAM,EAAE,UAAAwL,GAAU,YAAA6U,EAAA,IAAergB,GAC3B,CAACqD,GAAMC,CAAO,IAAI0H,EAAS,EAAK;AAEtC,SACE,gBAAA/O,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,IAAA,EAAS,KAAI,aACZ,UAAA,gBAAA1O;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,SAAS,MAAMmH,EAAQ,EAAI;AAAA,QAE1B,UAAA;AAAA,UAAAsG,EAAO;AAAA,UAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEnB;AAAA,IACA,gBAAA1O;AAAA,MAAC+mB;AAAA,MAAA;AAAA,QACC,SAAS,CAAC,EAAE,QAAQ,KAAK,UAAUzW,GAAU;AAAA,QAC7C,YAAA6U;AAAA,QACA,WAAW,EAAE,MAAAhd,GAAM,SAAAC,EAAA;AAAA,MAAQ;AAAA,IAAA;AAAA,EAC7B,GACF;AAEJ;AAEAgf,GAAgB,YAAY;AAAA,EAC1B,UAAUlnB,EAAU,KAAK;AAAA,EACzB,YAAYA,EAAU;AACxB;AAEAknB,GAAgB,eAAe,EAAE,YAAY,GAAA;ACtC7C,MAAMC,KAAS,WACTC,KAAc;AAAA,EAClB,aAAa;AAAA,EACb,SAAS;AAAA,IACP,QAAQ;AAAA,EAAA;AAEZ,GAEMC,KAAe,CAACC,OACb;AAAA,EACL,GAAGF;AAAA,EACH,QAAAE;AAAA,IAIEC,KAAY,CAACzf,GAAMwf,OAChB;AAAA,EACL,GAAGF;AAAA,EACH,QAAAE;AAAA,EACA,SAAS;AAAA,IACP,GAAGF,GAAY;AAAA,IACf,gBAAgB;AAAA,EAAA;AAAA,EAElB,MAAM,KAAK,UAAUtf,CAAI;AAAA,IAIvB0f,KAAiB,OAAOC,MAAa;AACzC,MAAI,CAACA,EAAS,IAAI;AAChB,UAAMC,IAAY,MAAMD,EAAS,KAAA;AACjC,UAAM,IAAI,MAAMC,EAAU,SAASD,EAAS,UAAU;AAAA,EACxD;AACA,QAAM3f,IAAO,MAAM2f,EAAS,KAAA;AAC5B,SAAM,QAAQ3f,IAGPA,IAFE,EAAE,IAAI,OAAA;AAGjB,GAEM6f,KAAc,CAACC,OAEZ,EAAE,IAAI,QAAQ,KADAA,aAAiB,QAAQA,EAAM,UAAUA,EACpC;AAG5B,MAAqBC,GAAI;AAAA;AAAA;AAAA;AAAA,EAIvB,OAAO,WAAW,CAACC,GAAUjV,IAAS,CAAA,MAAO;AAE3C,UAAMkV,IADe,IAAI,gBAAgBlV,CAAM,EACd,SAAA;AACjC,WAAO,GAAGsU,EAAM,IAAIW,CAAQ,GAAGC,IAAc,IAAIA,CAAW,KAAK,EAAE;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,aAAa,OACX;AAAA,IACL,QAAU;AAAA,IACV,gBAAgB;AAAA,EAAA;AAAA,EAIpB,OAAO,UAAU,OAAOC,GAAMV,IAAS,OAAOzU,IAAS,OAAO;AAE5D,UAAMkV,IADe,IAAI,gBAAgBlV,CAAM,EACd,SAAA,GAC3BoV,IAAM,GAAGd,EAAM,IAAIa,CAAI,GAAGD,IAAc,IAAIA,CAAW,KAAK,EAAE;AACpE,QAAI;AACF,YAAMG,IAAM,MAAM,MAAMD,GAAKZ,GAAaC,CAAM,CAAC;AACjD,aAAO,MAAME,GAAeU,CAAG;AAAA,IACjC,SAASN,GAAO;AACd,aAAOD,GAAYC,CAAK;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,OAAO,cAAc,OAAO9f,GAAMkgB,GAAMV,IAAS,WAAW;AAC1D,QAAI;AACF,YAAMY,IAAM,MAAM,MAAM,GAAGf,EAAM,IAAIa,CAAI,IAAIT,GAAUzf,GAAMwf,CAAM,CAAC;AACpE,aAAO,MAAME,GAAeU,CAAG;AAAA,IACjC,SAASN,GAAO;AACd,aAAOD,GAAYC,CAAK;AAAA,IAC1B;AAAA,EACF;AAAA;AAAA;AAAA,EAIA,OAAO,cAAc,OAAOI,GAAMV,IAAS,OAAOzU,IAAS,OAAO;AAEhE,UAAMkV,IADe,IAAI,gBAAgBlV,KAAU,CAAA,CAAE,EACpB,SAAA,GAC3BoV,IAAM,GAAGd,EAAM,IAAIa,CAAI,GAAGD,IAAc,IAAIA,CAAW,KAAK,EAAE;AACpE,QAAI;AAEF,aAAO,OADK,MAAM,MAAME,GAAKZ,GAAaC,CAAM,CAAC,GAChC,KAAA;AAAA,IACnB,SAASM,GAAO;AACd,aAAOD,GAAYC,CAAK;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,OAAO,kBAAkB,OAAO9f,GAAMkgB,GAAMV,IAAS,WAAW;AAC9D,QAAI;AAEF,aAAO,OADK,MAAM,MAAM,GAAGH,EAAM,IAAIa,CAAI,IAAIT,GAAUzf,GAAMwf,CAAM,CAAC,GACnD,KAAA;AAAA,IACnB,SAASM,GAAO;AACd,aAAOD,GAAYC,CAAK;AAAA,IAC1B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,aAAa,OAAOE,GAAUR,IAAS,OAAOzU,IAAS,OAAO;AACnE,UAAMoV,IAAMJ,GAAI,SAASC,GAAUjV,CAAM;AACzC,QAAI;AACF,YAAM4U,IAAW,MAAM,MAAMQ,GAAK;AAAA,QAChC,QAAAX;AAAA,QACA,SAASO,GAAI,WAAA;AAAA,QACb,aAAa;AAAA,MAAA,CACd;AAED,UAAI,CAACJ,EAAS;AACZ,cAAM,IAAI,MAAM,cAAcA,EAAS,MAAM,EAAE;AAGjD,aAAOA;AAAA,IACT,SAASG,GAAO;AACd,oBAAQ,MAAM,iBAAiBK,CAAG,KAAKL,CAAK,GACtCA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,iBAAiB,OAAO9f,GAAMggB,MAAa;AAChD,UAAMG,IAAMJ,GAAI,SAASC,CAAQ;AACjC,QAAI;AACF,YAAML,IAAW,MAAM,MAAMQ,GAAK;AAAA,QAChC,QAAQ;AAAA,QACR,SAASJ,GAAI,WAAA;AAAA,QACb,aAAa;AAAA,QACb,MAAM,KAAK,UAAU/f,CAAI;AAAA,MAAA,CAC1B;AAED,UAAI,CAAC2f,EAAS;AACZ,cAAM,IAAI,MAAM,cAAcA,EAAS,MAAM,EAAE;AAGjD,aAAOA;AAAA,IACT,SAASG,GAAO;AACd,oBAAQ,MAAM,sBAAsBK,CAAG,KAAKL,CAAK,GAC3CA;AAAA,IACR;AAAA,EACF;AACF;ACtJA,MAAMO,KAAS;AAEf,MAAMC,GAAa;AAAA;AAAA,EAEjB,OAAOC,KAAQ,OAAOP,GAAUR,IAAS,OAAOzU,IAAS,SAAS;AAChE,UAAMyV,IAAe,GAAGH,EAAM,IAAIL,CAAQ,IACpCI,IAAMrV,IACR,MAAMgV,GAAI,YAAYhV,GAAQyV,CAAY,IAC1C,MAAMT,GAAI,QAAQS,GAAchB,CAAM;AAG1C,WAAO,IAAIziB,GAASkK,GAAOmZ,EAAI,IAAIA,EAAI,OAAO,EAAE,GAAG,EAAE,MAAMA,EAAI,MAAM;AAAA,EACvE;AAAA,EAEA,OAAO,oBAAoB,CAACrV,IAAS,CAAA,MACnCuV,GAAaC,GAAM,uBAAuB,QAAQxV,CAAM;AAAA,EAE1D,OAAO,sBAAsB,CAAC0V,MAC5BH,GAAaC,GAAM,yBAAyBE,CAAO,IAAI,QAAQ;AAAA,EAEjE,OAAO,mBAAmB,CAACA,MACzBH,GAAaC,GAAM,sBAAsBE,CAAO,EAAE;AAAA,EAEpD,OAAO,eAAe,MAAMH,GAAaC,GAAM,gBAAgB;AACjE;ACvBA,MAAMG,KAAW,CAAC,EAAE,KAAAhZ,GAAK,SAAAoE,GAAS,SAAA/B,GAAS,WAAApC,GAAW,UAAA9P,QAAe;AACnE,QAAM+P,IAAOF,EAAI,MAAM,GAAG,GACpB,CAACG,CAAG,IAAIC,EAAS,OAAOF,EAAK,CAAC,CAAC,IAAIG,GAAA,CAAQ,EAAE;AAGnD,SACE,gBAAA/P;AAAA,IAACmQ;AAAA,IAAA;AAAA,MACC,WAAS;AAAA,MACT,WAAWR,KAAa;AAAA,MACxB,SAAAoC;AAAA,MACA,SAPY,gBAAA/R,EAAC2oB,IAAA,EAAQ,IAAI9Y,GAAM,UAAAiE,GAAQ;AAAA,MAStC,UAAAjU;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA6oB,GAAS,YAAY;AAAA,EACnB,KAAKxoB,EAAU;AAAA,EACf,SAASA,EAAU,KAAK;AAAA,EACxB,SAASA,EAAU,QAAQA,EAAU,MAAM,EAAE;AAAA,EAC7C,WAAWA,EAAU;AAAA,EACrB,UAAUA,EAAU,KAAK;AAC3B;AAEAwoB,GAAS,eAAe,EAAE,KAAK,OAAO,WAAW,MAAA;ACvBjD,SAASE,GAAc9jB,GAAO;AAC5B,QAAM,EAAE,KAAAU,GAAK,KAAAqjB,GAAK,SAAAtV,GAAS,MAAAD,GAAM,UAAAwV,GAAU,OAAAtV,GAAO,IAAAC,GAAI,UAAAC,EAAA,IAAa5O,GAC7DmT,IAAU,CAACC,MAAU;AACzB,IAAA3E,EAAQuV,CAAQ,GAChB5Q,EAAM,gBAAA;AAAA,EACR,GACM6Q,IACJ,gBAAAhoB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,UAAU,QAAA;AAAA,MAEnB,UAAA;AAAA,QAAA,gBAAAf,EAAC,MAAA,EAAG,WAAU,QAAO,UAAA,kBAAc;AAAA,QACnC,gBAAAe,EAAC,KAAA,EAAE,WAAU,QACV,UAAA;AAAA,UAAA2N,EAAO;AAAA,UAAsB;AAAA,UAAElJ,KAAO;AAAA,QAAA,GACzC;AAAA,QACA,gBAAAzE,EAAC,OAAA,EAAI,WAAU,oCACb,UAAA;AAAA,UAAA,gBAAAf;AAAA,YAACiB;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,SAAS,CAACiI,MAAMA,EAAE,gBAAA;AAAA,cAClB,eAAY;AAAA,cACb,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGD,gBAAAlJ;AAAA,YAACiB;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAQ;AAAA,cACR,SAAAgX;AAAA,cACA,eAAY;AAAA,cACb,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGJ,SACE,gBAAAjY,EAAC0oB,MAAS,SAASK,GAAgB,SAAS,CAAC,OAAO,GAAG,WAAWvV,GAChE,UAAA,gBAAAxT;AAAA,IAACiB;AAAA,IAAA;AAAA,MACC,MAAMqS,KAAQ;AAAA,MACd,WAAWuV;AAAA,MACX,UAAAnV;AAAA,MACA,eAAY;AAAA,MACZ,SAAQ;AAAA,MACR,SAAS,CAACxK,MAAMA,EAAE,gBAAA;AAAA,MAClB,MAAK;AAAA,MAEJ,YAAOuK,CAAE;AAAA,IAAA;AAAA,EAAA,GAEd;AAEJ;AAEAmV,GAAc,YAAY;AAAA,EACxB,KAAK1oB,EAAU,OAAO;AAAA,EACtB,UAAUA,EAAU,OAAO;AAAA,EAC3B,SAASA,EAAU,KAAK;AAAA,EACxB,KAAKA,EAAU;AAAA,EACf,MAAMA,EAAU;AAAA,EAChB,OAAOA,EAAU;AAAA,EACjB,IAAIA,EAAU;AAAA,EACd,UAAUA,EAAU;AACtB;AAEA0oB,GAAc,eAAe;AAAA,EAC3B,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,UAAU;AACZ;ACpEA,MAAMI,KAAa,CAAC,EAAE,eAAAC,GAAe,eAAAC,GAAe,aAAAC,QAAkB;AACpE,QAAM,CAACnT,GAASC,CAAU,IAAInG,EAAS,CAAA,CAAE;AAEzC,EAAAyG,GAAU,MAAM;AAOd,KANoB,YAAY;AAC9B,YAAM6R,IAAM,MAAME,GAAa,aAAA;AAC/B,MAAIF,EAAI,OAAO,aACbnS,EAAWmS,EAAI,QAAQ,QAAQ,CAAA,CAAE;AAAA,IAErC,GACA;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,QAAM/S,IAAa;AAAA,IACjB;AAAA,MACE,YAAY;AAAA,MACZ,cAAc,CAACtC,MACb,gBAAAhS,EAAAsI,GAAA,EACE,UAAA;AAAA,QAAA,gBAAArJ,EAACyP,IAAA,EAAS,KAAI,eACZ,UAAA,gBAAAzP,EAACiB,GAAA,EAAO,MAAK,MAAK,SAAS,MAAMgoB,EAAclW,CAAM,GAAG,iBAExD,GACF;AAAA,QACA,gBAAA/S,EAACyP,IAAA,EAAS,KAAI,YACZ,UAAA,gBAAAzP;AAAA,UAACiB;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,MAAK;AAAA,YACL,SAAS,MAAMkoB,EAAYpW,CAAM;AAAA,YAClC,UAAA;AAAA,UAAA;AAAA,QAAA,GAGH;AAAA,QACA,gBAAA/S;AAAA,UAAC4oB;AAAA,UAAA;AAAA,YACC,KAAI;AAAA,YACJ,KAAI;AAAA,YACJ,SAASM;AAAA,YACT,UAAUnW;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ,GACF;AAAA,MAEF,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,MAAM;AAAA,IAAA;AAAA,IAER;AAAA,MACE,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,WAAW,EAAE,YAAY,YAAY,YAAY,OAAA;AAAA,MACjD,cAAc,CAACA,MACNA,EAAO,QACZ,gBAAA/S;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,YAAY;AAAA,YACZ,iBAAiB;AAAA,YACjB,QAAQ;AAAA,UAAA;AAAA,UAGT,UAAA+S,EAAO;AAAA,QAAA;AAAA,MAAA,IAGV;AAAA,MAGJ,YAAY;AAAA,MACZ,MAAM;AAAA,IAAA;AAAA,EACR;AAGF,SACE,gBAAA/S;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW2E,EAAU,WAAW,OAAO;AAAA,MACvC,OAAO,EAAE,QAAQ,SAAS,OAAO,QAAQ,UAAU,OAAA;AAAA,MAEnD,UAAA,gBAAA3E,EAAC2W,IAAA,EAAY,YAAAtB,GAAwB,SAAAW,GAAkB,kBAAgB,GAAA,CAAC;AAAA,IAAA;AAAA,EAAA;AAG9E,GCtGMoT,KAAc,CAAAtkB,MAAS;AAC3B,QAAM,EAAE,MAAAqD,GAAM,OAAA1C,GAAO,QAAA4jB,EAAA,IAAWvkB;AAChC,SACE,gBAAA/D,EAACuI,KAAM,UAAQ,IAAC,MAAAnB,GAAY,MAAK,MAAK,QAAQkhB,GAC5C,UAAA;AAAA,IAAA,gBAAArpB,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,4BAACA,EAAM,OAAN,EAAa,UAAA7D,EAAA,CAAM,EAAA,CACtB;AAAA,IACA,gBAAAzF,EAACsJ,EAAM,MAAN,EAAW,UAAA,UAAA,CAAO;AAAA,EAAA,GACrB;AAEJ,GAEMggB,KAAc,CAAAxkB,MAAS;AAC3B,QAAM,EAAE,MAAAqD,GAAM,SAAAnE,GAAS,OAAA6C,GAAO,QAAAwiB,GAAQ,QAAAE,MAAWzkB;AACjD,MAAI,CAACqD,EAAM,QAAO;AAClB,QAAM,EAAE,MAAAhD,GAAM,WAAA+Z,GAAW,YAAAsK,EAAA,IAAexlB,GAClCylB,IAAYD,KAAcA,EAAW,UAAUA,EAAW,OAAO3iB,CAAK,GACtEpB,IAAQgkB,EAAU,SAAS;AACjC,MAAIC,IACDxK,KAAaA,EAAU,YAAYA,EAAU,SAAS,CAAC,EAAE,YAAa,CAAA;AAEzE,MADAwK,IAAKA,EAAG,OAAO,CAAA7hB,MAAK,CAACA,EAAE,MAAM,GACzB6hB,EAAG,SAAS,KAAK,CAACjkB;AACpB,WACE,gBAAAzF;AAAA,MAACopB;AAAA,MAAA;AAAA,QACC,MAAAjhB;AAAA,QACA,OAAO,qCAAqC1C,CAAK;AAAA,QACjD,QAAA4jB;AAAA,MAAA;AAAA,IAAA;AAKN,QAAMM,IAAUF,EAAU,MAAM,CAAA,GAC1BG,IAAM,CAAAC,MACV,gBAAA9oB,EAAC,OAAA,EACC,UAAA;AAAA,IAAA,gBAAAf,EAAC,OAAA,EAAI,WAAU,0CAA0C,UAAA6pB,EAAI,MAAK;AAAA,IAClE,gBAAA9oB,EAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,MAAA,gBAAAf;AAAA,QAACiB;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,WAAU;AAAA,UACV,SAAS,MAAMsoB,EAAOM,EAAI,IAAIhjB,GAAOlC,EAAU,WAAW;AAAA,UAC1D,UAAUglB,EAAQ,SAASE,EAAI,EAAE;AAAA,UAEhC,UAAAllB,EAAU;AAAA,QAAA;AAAA,MAAA;AAAA,MAEb,gBAAA3E;AAAA,QAACiB;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,WAAU;AAAA,UACV,SAAS,MAAMsoB,EAAOM,EAAI,IAAIhjB,GAAOlC,EAAU,aAAa;AAAA,UAC5D,UAAU,CAACglB,EAAQ,SAASE,EAAI,EAAE;AAAA,UAEjC,UAAAllB,EAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IACb,EAAA,CACF;AAAA,EAAA,EAAA,GArBQ,wBAAwBklB,EAAI,EAAE,IAAIhjB,CAAK,EAsBjD,GAGIijB,IAAO,CAAA;AACb,SAAAJ,EAAG,QAAQ,CAAAG,MAAO;AAChB,IAAAC,EAAK,KAAKF,EAAIC,CAAG,CAAC;AAAA,EACpB,CAAC,GAGC,gBAAA9oB,EAACuI,KAAM,UAAQ,IAAC,MAAK,MAAK,MAAAnB,GAAY,QAAQkhB,GAC5C,UAAA;AAAA,IAAA,gBAAArpB,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,UAAA,gBAAAvI,EAACuI,EAAM,OAAN,EACC,UAAA;AAAA,MAAA,gBAAAtJ,EAAC,OAAG,UAAAmF,EAAA,CAAK;AAAA,MAAI;AAAA,wBACZ,MAAA,EAAG;AAAA,MAAE;AAAA,MACyB,gBAAAnF,EAAC,OAAG,UAAAyF,EAAA,CAAM;AAAA,IAAA,EAAA,CAC3C,EAAA,CACF;AAAA,sBACC6D,EAAM,MAAN,EACC,UAAA,gBAAAtJ,EAAC,OAAA,EAAI,OAAO,EAAE,WAAW,QAAQ,UAAU,OAAA,GACzC,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,gBAAgB,UAAA8pB,GAAK,GACtC,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AAEAR,GAAY,YAAY;AAAA,EACtB,MAAMppB,EAAU,KAAK;AAAA,EACrB,SAASA,EAAU,OAAO;AAAA,EAC1B,OAAOA,EAAU,OAAO;AAAA,EACxB,QAAQA,EAAU,KAAK;AAAA,EACvB,QAAQA,EAAU,KAAK;AACzB;AChFA,MAAM6pB,KAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACMC,KAAa;AAAA,EACjB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,KAAK;AAAA,EACL,GAAG;AACL,GAEMC,KAAgB;AAAA,EACpB,GAAG;AAAA,EACH,GAAG;AAAA,EACH,KAAK;AAAA,EACL,GAAG;AACL,GAEMC,KAAgB,CAAAplB,MAAS;AAC7B,QAAM,EAAE,OAAA+B,GAAO,KAAA+f,GAAK,eAAAuD,GAAe,UAAAzmB,MAAaoB,GAC1CslB,IAAkB;AAExB,MAAIC,IAAYzD,EAAI,MAAM,cAAc,CAAA;AACxC,EAAIyD,EAAU,SAAS,MACrBA,IAAYN,GAAoB,IAAI,CAAA7gB,MAC9BA,MAAM,aACD,IAAIkP,GAAgB;AAAA,IACzB,MAAMqB,EAAW;AAAA,IACjB,OAAO;AAAA,IACP,UAAUvQ;AAAA,IACV,eAAe;AAAA,IACf,cAAc;AAAA,EAAA,CACf,IAEI,IAAIkP,GAAgB,EAAE,MAAMqB,EAAW,QAAQ,OAAO,IAAI,UAAUvQ,GAAG,CAC/E;AAEH,QAAMohB,IAAYD,EAAU,KAAK,OAAK9lB,EAAE,aAAa,WAAW,KAAK,IAC/DgmB,IAAWF,EAAU,KAAK,OAAK9lB,EAAE,aAAa,UAAU,KAAK,IAC7DimB,IAAWH,EAAU,KAAK,OAAK9lB,EAAE,aAAa,UAAU,KAAK,IAE7DkmB,IAAe,CAACC,GAASC,GAAQC,IAAU,OAAU;AACzD,QAAIF,KAAWC,GAAQ;AACrB,YAAMpnB,IAAQsnB,GAAOH,GAAS,qBAAqB,GAC7CI,IAAOD,GAAOF,GAAQ,qBAAqB;AACjD,UAAIpnB,IAAQunB;AACV,eAAOF,IACHC,GAAO,YAAYtnB,GAAOunB,CAAI,IAC9BD,GAAO,SAASC,EAAK,KAAKvnB,CAAK,CAAC;AAAA,IAExC;AACA,WAAO;AAAA,EACT,GAEMwnB,IAA0B,CAACC,GAAGC,IAAY,MAC1CD,EAAE,OAAA,KAAYC,IACT,MAELD,EAAE,QAAA,KAAaC,IACV,MAELD,EAAE,UAAA,KAAeC,IACZ,QAELD,EAAE,UAAA,KAAeC,IACZ,MAEF,KAGHC,IAAa,CAAAnY,MAAU;AAC3B,UAAM,EAAE,OAAA3M,GAAO,OAAA8R,EAAA,IAAUnF;AACzB,QAAImF,MAAU,cAAc;AAC1B,YAAMiT,KAAc,oBAAI,KAAA,GACrB,eAAe,OAAO,EACtB,MAAM,IAAI,EACV,KAAK,GAAG;AACX,MAAAd,EAAU,KAAK,CAAA9lB,MAAKA,EAAE,aAAa6B,CAAK,EAAE,QAAQ+kB;AAAA,IACpD,WAAWjT,MAAU,cAAc;AACjC,YAAMkT,IAAMf,EAAU,KAAK,CAAA9lB,MAAKA,EAAE,aAAa6B,CAAK,GAC9CilB,IAAQC,GAAS,UAAU;AACjC,UAAIC,IAAOF,EAAM,UAAU,OAAKG,EAAE,QAAQJ,EAAI,YAAY;AAC1D,MAAIG,IAAOF,EAAM,SAAS,IAAGE,KAAQ,IAChCA,IAAO,GACZH,EAAI,eAAeC,EAAM,SAAS,IAAIA,EAAME,CAAI,EAAE,MAAM,IACxDH,EAAI,QAAQK,GAAe,YAAYL,EAAI,cAAcA,EAAI,KAAK;AAAA,IACpE,WAAWlT,MAAU,UAAU;AAC7B,YAAMwT,IAAUjB,EAAaH,EAAU,OAAOC,EAAS,KAAK;AAC5D,UAAImB,GAAS;AACX,cAAMC,IAAcZ,EAAwBW,CAAO,GAC7CN,IAAMf,EAAU,KAAK,CAAA9lB,MAAKA,EAAE,aAAa6B,CAAK;AACpD,QAAAglB,EAAI,eAAeO,GACnBP,EAAI,QAAQQ,GAAMF,EAAQ,GAAG1B,GAAW2B,CAAW,CAAC,GAAG,CAAC;AAAA,MAC1D;AAAA,IACF,OAAO;AACL,YAAM,EAAE,OAAAtqB,MAAU6W,EAAM;AACxB,MAAAmS,EAAU,KAAK,CAAA9lB,MAAKA,EAAE,aAAa6B,CAAK,EAAE,QAAQ/E;AAAA,IACpD;AACA,IAAA8oB,EAAc;AAAA,MACZ,OAAOvD,EAAI,MAAM;AAAA,MACjB,OAAO/f,EAAM;AAAA,MACb,WAAAwjB;AAAA,MACA,MAAMzD,EAAI,MAAM;AAAA,IAAA,CACjB;AAAA,EACH,GAEMiF,IAAOpB,EAAaH,EAAU,OAAOC,EAAS,OAAO,EAAI,GACzDuB,IAAUxrB,GAASoD,GAAU,EAAE4mB,EAAU,YAAY,GAAM;AAEjE,2BACG5G,IAAA,EACC,UAAA;AAAA,IAAA,gBAAA1jB,EAAC2jB,IAAA,EAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GACtB,UAAA,gBAAA5iB,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,MAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,UAAA,QAAA,CAAK;AAAA,wBAChBe,IAAA,EACC,UAAA;AAAA,QAAA,gBAAAhB;AAAA,UAACC,EAAK;AAAA,UAAL;AAAA,YACC,MAAK;AAAA,YACL,OAAOqqB,EAAU;AAAA,YACjB,aAAaF;AAAA,YACb,UAAU,CAAClS,MAAUgT,EAAW,EAAE,OAAO,aAAa,OAAAhT,GAAO;AAAA,YAC7D,UAAU,CAAC4T;AAAA,UAAA;AAAA,QAAA;AAAA,QAEb,gBAAA9rB;AAAA,UAACiB;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,OAAO,EAAE,SAAS,MAAA;AAAA,YAClB,SAAS,MACPiqB,EAAW,EAAE,OAAO,aAAa,OAAO,cAAc;AAAA,YAExD,UAAU,CAACY;AAAA,YAEV,UAAApd,EAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MACV,EAAA,CACF;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,IACA,gBAAA1O,EAAC2jB,IAAA,EAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GACtB,UAAA,gBAAA5iB,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,MAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,UAAA,OAAA,CAAI;AAAA,wBACfe,IAAA,EACC,UAAA;AAAA,QAAA,gBAAAhB;AAAA,UAACC,EAAK;AAAA,UAAL;AAAA,YACC,MAAK;AAAA,YACL,OAAOsqB,EAAS;AAAA,YAChB,aAAaH;AAAA,YACb,UAAU,CAAClS,MAAUgT,EAAW,EAAE,OAAO,YAAY,OAAAhT,GAAO;AAAA,YAC5D,UAAU,CAAC4T;AAAA,UAAA;AAAA,QAAA;AAAA,QAEb,gBAAA9rB;AAAA,UAACiB;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,OAAO,EAAE,SAAS,MAAA;AAAA,YAClB,SAAS,MACPiqB,EAAW,EAAE,OAAO,YAAY,OAAO,cAAc;AAAA,YAEvD,UAAU,CAACY;AAAA,YAEV,UAAApd,EAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MACV,EAAA,CACF;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,IACA,gBAAA1O,EAAC2jB,IAAA,EAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GACtB,UAAA,gBAAA5iB,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,MAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,UAAA,WAAA,CAAQ;AAAA,wBACnBe,IAAA,EACC,UAAA;AAAA,QAAA,gBAAAhB;AAAA,UAACC,EAAK;AAAA,UAAL;AAAA,YACC,MAAK;AAAA,YACL,OAAO4rB;AAAA,YACP,UAAQ;AAAA,YACR,aAAY;AAAA,YACZ,UAAU,CAACC;AAAA,UAAA;AAAA,QAAA;AAAA,QAEb,gBAAA9rB,EAACyP,IAAA,EAAS,KAAI,aACZ,UAAA,gBAAAzP;AAAA,UAACiB;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,SAAS,MAAM;AACb,wBAAU,UAAU,UAAU4qB,CAAI;AAAA,YACpC;AAAA,YACA,UAAU,CAACC;AAAA,YAEV,UAAApd,EAAO;AAAA,UAAA;AAAA,QAAA,GAEZ;AAAA,QACA,gBAAA1O,EAACyP,IAAA,EAAS,KAAI,oBACZ,UAAA,gBAAAzP;AAAA,UAACiB;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,WAAU;AAAA,YACV,SAAS,MACPiqB,EAAW,EAAE,OAAO,YAAY,OAAO,UAAU;AAAA,YAEnD,UAAU,CAACY;AAAA,YAEV,UAAApd,EAAO;AAAA,UAAA;AAAA,QAAA,EACV,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,IACA,gBAAA1O,EAAC2jB,IAAA,EAAI,IAAI,IAAI,IAAI,GAAG,IAAI,GACtB,UAAA,gBAAA5iB,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,MAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,UAAA,IAAA,CAAM;AAAA,wBACjBe,IAAA,EACC,UAAA;AAAA,QAAA,gBAAAhB;AAAA,UAACC,EAAK;AAAA,UAAL;AAAA,YACC,MAAK;AAAA,YACL,OAAOuqB,EAAS,SAAS;AAAA,YACzB,aAAY;AAAA,YACZ,UAAU,CAACtS,MAAUgT,EAAW,EAAE,OAAO,YAAY,OAAAhT,GAAO;AAAA,YAC5D,UAAU,CAAC4T;AAAA,UAAA;AAAA,QAAA;AAAA,QAEb,gBAAA9rB;AAAA,UAACiB;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,SAAS,MACPiqB,EAAW,EAAE,OAAO,YAAY,OAAO,cAAc;AAAA,YAEvD,UAAU,CAACY;AAAA,YAEV,aAAcC,GAAQ,YAAYvB,EAAS,YAAY,EAAE,GAAG,KAC3D;AAAA,UAAA;AAAA,QAAA;AAAA,MACJ,EAAA,CACF;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AAEAN,GAAc,YAAY;AAAA,EACxB,KAAKhqB,EAAU,OAAO;AAAA,EACtB,OAAOA,EAAU,OAAO;AAAA,EACxB,eAAeA,EAAU,KAAK;AAAA,EAC9B,UAAUA,EAAU,KAAK;AAC3B;AC7OA,SAAS8rB,GAASC,GAAWC,IAAQ,IAAI;AACvC,QAAMC,IAAQC,GAAQH,CAAS;AAC/B,MAAI,CAACE,EAAO,QAAO;AACnB,QAAM,EAAE,OAAA5N,MAAU0N;AAClB,SACE,gBAAAjsB,EAACyP,IAAA,EAAS,KAAK,aAAa8O,CAAK,IAC/B,UAAA,gBAAAve;AAAA,IAACiB;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,SAAQ;AAAA,MACR,MAAMkrB;AAAA,MACN,QAAO;AAAA,MACP,SAAS,CAACjjB,MAAMA,EAAE,gBAAA;AAAA,MAEjB,UAACgjB,KAAQxd,EAAO;AAAA,IAAmB;AAAA,EAAA,GAExC;AAEJ;ACjBA,MAAM2d,KAAa,CAACvnB,MAAU;AAC5B,QAAM,EAAE,OAAAyZ,GAAO,MAAA+N,GAAM,UAAAC,GAAU,UAAAC,MAAa1nB,GACtC2nB,IAAMF,IACR,iDACA;AACJ,SAAOD,KAAQA,MAAS,MAAM,CAACC,IAC7B,gBAAAxrB,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ;AAAA,MAACmQ;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS,gBAAAnQ,EAACoQ,IAAA,EAAQ,IAAIkI,MAAS,UAAAgU,GAAK;AAAA,QAEpC,UAAA,gBAAAtsB,EAAC,QAAA,EAAK,WAAWysB,GAAM,UAAAlO,EAAA,CAAM;AAAA,MAAA;AAAA,IAAA;AAAA,IAE9ByN,GAASQ,CAAQ;AAAA,EAAA,EAAA,CACpB,IAEA,gBAAAzrB,EAAC,QAAA,EAAK,WAAW0rB,GACd,UAAA;AAAA,IAAAlO;AAAA,IAAM;AAAA,IAAOyN,GAASQ,CAAQ;AAAA,EAAA,GACjC;AAEJ;AAEAH,GAAW,YAAY;AAAA,EACrB,OAAOnsB,EAAU,OAAO;AAAA,EACxB,MAAMA,EAAU;AAAA,EAChB,UAAUA,EAAU;AAAA,EACpB,UAAUA,EAAU;AACtB;AACAmsB,GAAW,eAAe,EAAE,MAAM,IAAI,UAAU,IAAO,UAAU,KAAA;AChCjE,MAAMK,KAAc,CAAC9F,MAAQ;AAC3B,QAAM,EAAE,OAAArI,GAAO,aAAAoO,GAAa,UAAAJ,GAAU,OAAOK,MAAShG;AACtD,SAAIrI,MAAU,SAAkB,OAC5BA,MAAU,KAAW,gBAAAve,EAACqsB,IAAA,EAAW,OAAO,KAAK,IAC7C9N,MAAU,MAAM,CAACqO,IAAa,gBAAA5sB,EAACqsB,MAAW,OAAA9N,GAAc,IAE1D,gBAAAve;AAAA,IAACqsB;AAAA,IAAA;AAAA,MACC,OAAA9N;AAAA,MACA,MAAMoO;AAAA,MACN,UAAAJ;AAAA,MACA,UAAUK,EAAK;AAAA,IAAA;AAAA,EAAA;AAGrB;ACdA,MAAqBC,GAAW;AAAA,EAC9B,YAAYxU,GAAM;AAChB,WAAO,OAAO,MAAMA,CAAI,GACnB,KAAK,OAAM,KAAK,KAAKwU,GAAW,QAAA;AAAA,EACvC;AAAA,EAEA,OAAO,UAAU;AAAE,WAAOvU,GAAA;AAAA,EAAQ;AAAA,EAElC,OAAO,SAASwU,GAAM;AACpB,WAAO,IAAID,GAAW;AAAA,MACpB,MAAAC;AAAA,MACA,MAAMA,EAAK;AAAA,MACX,UAAUA,EAAK;AAAA,MACf,YAAYA,EAAK;AAAA,MACjB,YAAY;AAAA,IAAA,CACb;AAAA,EACH;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO,KAAK,WAAW;AAAA,EACzB;AAAA,EAEA,YAAY;AACV,WAAO,MAAM,UAAU;AAAA,MACrB,UAAU,KAAK;AAAA,MACf,YAAY,KAAK;AAAA,MACjB,MAAM,KAAK;AAAA,MACX,OAAO,KAAK;AAAA,MACZ,cAAc,KAAK;AAAA,MACnB,YAAY,KAAK;AAAA,MACjB,IAAI,KAAK;AAAA,MACT,QAAQ,KAAK,SAAS;AAAA,IAAA,CACvB;AAAA,EACH;AACF;AC9BA,SAASC,GAAa,EAAE,MAAAC,KAAQ;AAC9B,SAAKA,IAEH,gBAAAhtB;AAAA,IAACmQ;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,MACX,WAAU;AAAA,MACV,SAAS,gBAAAnQ,EAACoQ,IAAA,EAAQ,IAAG,sBAAqB,UAAA,cAAU;AAAA,MAEpD,UAAA,gBAAApQ;AAAA,QAACiB;AAAA,QAAA;AAAA,UACC,OAAO,EAAE,SAAS,IAAA;AAAA,UAClB,SAAQ;AAAA,UACR,MAAM+rB;AAAA,UACN,QAAO;AAAA,UACP,SAAS,CAAC,MAAM,EAAE,gBAAA;AAAA,UAEjB,UAAAte,EAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IACV;AAAA,EAAA,IAfc;AAkBpB;AAEAqe,GAAa,YAAY,EAAE,MAAM7sB,EAAU,OAAO,WAAA;ACjBlD,MAAM+sB,KAAU,CAACR,GAAKS,wBAAY,QAAA,EAAK,WAAWT,GAAK,OAAOS,GAAQ,GAGhEC,KAAc,CAAC3D,GAAYtR,GAAO9R,GAAOS,MAAU;AACvD,QAAMumB,IAAQ,CAAA,GAGR/rB,KADJmoB,EAAW,OAAO,GAAG3iB,CAAK,EAAE,EAAE,OAAO,KAAK,CAACqC,MAAMA,EAAE,UAAU9C,CAAK,KAAK,CAAA,GAClD,SAAS,CAAA;AAChC,UAAQ8R,EAAM,QAAA;AAAA,IACZ,KAAK,KAAK;AACR,YAAMmV,IAASC,GAAUjsB,EAAM,SAAS,CAAA,GAAI,CAACksB,MAAMA,EAAE,QAAQrV,EAAM,GAAG,GAChEqG,IACJrG,KAASA,EAAM,OAAOA,EAAM,IAAI,UAAUA,EAAM,IAAI,OAAO;AAC7D,MAAI7W,EAAM,MAAMgsB,CAAM,KAAK9O,MAAOld,EAAM,MAAMgsB,CAAM,EAAE,QAAQ9O;AAC9D;AAAA,IACF;AAAA,IACA,KAAK,KAAK;AACR,OAACrG,EAAM,OAAO,CAAA,GAAI,QAAQ,CAAC4U,MAAS;AAClC,cAAMU,IAAMlV,GAAA;AACZ,SAAI,OAAOjX,EAAM,QAAU,OAAeA,EAAM,UAAU,UACxDA,EAAM,QAAQ,CAAA,IAChBA,EAAM,MAAM,KAAK,EAAE,KAAAmsB,GAAK,UAAUV,EAAK,MAAM,GAC7CM,EAAM,KAAK;AAAA,UACT,KAAAI;AAAA,UACA,UAAUV,EAAK;AAAA,UACf,MAAMD,GAAW,SAASC,CAAI;AAAA,QAAA,CAC/B;AAAA,MACH,CAAC;AACD;AAAA,IACF;AAAA,IACA,KAAK,KAAK;AACR,YAAMO,IAASC,GAAUjsB,EAAM,SAAS,CAAA,GAAI,CAACksB,MAAMA,EAAE,QAAQrV,EAAM,GAAG;AACtE,aAAImV,KAAU,KAAKhsB,EAAM,SAASA,EAAM,MAAM,SAAS,KACrDA,EAAM,MAAM,OAAOgsB,GAAQ,CAAC,GACvB,CAAChsB,GAAO+rB,GAAOlV,EAAM,GAAG;AAAA,IACjC;AAAA,IACA;AACE,cAAQ,IAAIA,CAAK;AAAA,EAAA;AAErB,SAAO,CAAC7W,GAAO+rB,CAAK;AACtB;AAEA,MAAMK,GAAa;AAAA,EACjB,cAAc;AACZ,SAAK,OAAOhU,EAAW,SACvB,KAAK,QAAQnB,GAAA,GACb,KAAK,WAAW,KAChB,KAAK,QAAQ,IACb,KAAK,UAAU,IACf,KAAK,WAAW;AAAA,EAClB;AACF;AAsBA,MAAMoV,KAAa,CAACprB,MAAQ;AAC1B,MAAI,OAAOA,IAAQ,OAAeA,MAAQ,QAAQA,MAAQ,GAAI,QAAO;AAIrE,QAAMqrB,IAHOrrB,EAAI;AAAA,IACf;AAAA,EAAA,EAEe,IAAI,CAACsrB,MAAM;AAC1B,UAAMC,IAASD,EAAE,MAAM,0BAA0B;AACjD,QAAIC,UAAe,gBAAA7tB,EAAC,OAAA,EAAkB,YAAO,CAAC,KAAjBsY,IAAmB;AAChD,UAAMwV,IAASF,EAAE,MAAM,0BAA0B;AACjD,WAAIE,IAAe,gBAAA9tB,EAAC,OAAA,EAAkB,YAAO,CAAC,KAAjBsY,IAAmB,IACzCsV;AAAA,EACT,CAAC;AACD,SAAO,gBAAA5tB,EAAC,UAAM,UAAA2tB,EAAA,CAAI;AACpB,GAEMI,KAAa;AAAA,EACjB,EAAE,OAAO,YAAY,OAAO,WAAA;AAAA,EAC5B,EAAE,OAAO,UAAU,OAAO,SAAA;AAAA,EAC1B,EAAE,OAAO,SAAS,OAAO,QAAA;AAAA,EACzB,EAAE,OAAO,QAAQ,OAAO,mBAAA;AAC1B,GACMC,KAAa;AAAA,EACjB,EAAE,OAAO,QAAQ,OAAO,OAAA;AAAA,EACxB,EAAE,OAAO,cAAc,OAAO,iBAAA;AAAA,EAC9B,EAAE,OAAO,QAAQ,OAAO,mBAAA;AAC1B,GAeMC,KAAW,CAAC1B,IAAW,OAGpB,CAFQA,IAAW,eAAe,mBAC1BA,IAAW,iBAAiB,mBACrB,GAGlB2B,KAAe,CAACC,GAAUC,IAAO,OAAO;AAC5C,QAAMlG,IAAO,CAACtQ,GAAU,UAAU,GAAGuW,CAAQ,EAAE,KAAK,GAAG;AACvD,SAAOC,IAAO,GAAGlG,CAAI,IAAIkG,CAAI,KAAKlG;AACpC,GAEMmG,KAAkB,CAAC,YAAY,YAAY,GAC3CC,KAAYJ,GAAa,CAAC,GAAGG,IAAiB,QAAQ,CAAC,GAEvDE,KAAc;AAAA,EAClB,MAAM;AAAA,IACJ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,IAKP,KAAK,CAACD,IAAW,wBAAwB,EAAE,KAAK,EAAE;AAAA,EAAA;AAAA,EAEpD,aAAa;AAAA,IACX,OAAO;AAAA,IACP,KAAK,CAACA,IAAW,aAAa,EAAE,KAAK,EAAE;AAAA,EAAA;AAAA,EAEzC,OAAO;AAAA,IACL,OAAO;AAAA,IACP,KAAK,CAACA,IAAW,aAAa,EAAE,KAAK,EAAE;AAAA,EAAA;AAAA,EAEzC,WAAW;AAAA,IACT,OAAO;AAAA,IACP,KAAK,CAACA,IAAW,mBAAmB,EAAE,KAAK,EAAE;AAAA,EAAA;AAAA,EAE/C,OAAO,EAAE,OAAO,gBAAgB,KAAK,CAACA,IAAW,eAAe,EAAE,KAAK,EAAE,EAAA;AAAA,EACzE,aAAa;AAAA,IACX,OAAO;AAAA,IACP,KAAK,CAACA,IAAW,UAAU,SAAS,cAAc,EAAE,KAAK,EAAE;AAAA,EAAA;AAAA,EAE7D,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,KAAK,CAACA,IAAW,QAAQ,EAAE,KAAK,EAAE;AAAA,EAAA;AAAA;AAAA,EAGpC,WAAW;AAAA,IACT,OAAO;AAAA,IACP,KAAK,CAACA,IAAW,UAAU,kBAAkB,aAAa,EAAE,KAAK,EAAE;AAAA,EAAA;AAAA,EAErE,SAAS;AAAA,IACP,OAAO;AAAA,IACP,KAAK,CAACA,IAAW,UAAU,kBAAkB,UAAU,EAAE,KAAK,EAAE;AAAA,EAAA;AAAA,EAElE,SAAS;AAAA,IACP,OAAO;AAAA,IACP,KAAK,CAACA,IAAW,UAAU,kBAAkB,UAAU,EAAE,KAAK,EAAE;AAAA,EAAA;AAAA,EAElE,SAAS;AAAA,IACP,OAAO;AAAA,IACP,KAAK,CAACA,IAAW,UAAU,WAAW,UAAU,EAAE,KAAK,EAAE;AAAA,EAAA;AAAA,EAE3D,UAAU;AAAA,IACR,OAAO;AAAA,IACP,KAAK,CAACA,IAAW,UAAU,SAAS,YAAY,EAAE,KAAK,EAAE;AAAA,EAAA;AAAA,EAE3D,UAAU;AAAA,IACR,OAAO;AAAA,IACP,KAAK,CAACA,IAAW,UAAU,SAAS,WAAW,EAAE,KAAK,EAAE;AAAA,EAAA;AAAA,EAE1D,IAAI;AAAA,IACF,OAAO;AAAA,IACP,KAAK,CAACA,IAAW,UAAU,mBAAmB,eAAe,EAAE,KAAK,EAAE;AAAA,EAAA;AAAA,EAExE,gBAAgB;AAAA,IACd,OAAO;AAAA,IACP,KAAK,CAACA,IAAW,UAAU,mBAAmB,kBAAkB,EAAE,KAAK,EAAE;AAAA,EAAA;AAAA;AAAA,EAG3E,UAAU;AAAA,IACR,OAAO;AAAA,IACP,KAAK,CAAC1W,GAAU,UAAU,UAAU,EAAE,KAAK,GAAG;AAAA,EAAA;AAAA,EAEhD,oBAAoB;AAAA,IAClB,OAAO;AAAA,IACP,KAAK,CAAC0W,IAAW,UAAU,qBAAqB,EAAE,KAAK,EAAE;AAAA,EAAA;AAAA,EAE3D,kBAAkB;AAAA,IAChB,OAAO;AAAA,IACP,KAAK,CAAC1W,GAAU,UAAU,YAAY,mBAAmB,EAAE,KAAK,GAAG;AAAA,EAAA;AAEvE,GAEM4W,KAAgB,CAACrpB,MAChBopB,GAAYppB,CAAI,IACd;AAAA,EACL,OAAOopB,GAAYppB,CAAI,EAAE;AAAA,EACzB,cACE,gBAAAnF;AAAA,IAAC+sB;AAAA,IAAA;AAAA,MACC,SAASwB,GAAYppB,CAAI,EAAE;AAAA,MAC3B,MAAMopB,GAAYppB,CAAI,EAAE;AAAA,IAAA;AAAA,EAAA;AAC1B,IAP2B,CAAA,GAY3BspB,KAAY;AAAA,EAChB,YAAY,CAAC/c,OAAU,EAAE,GAAGA,GAAM,QAAQ;EAC1C,MAAM,CAACA,OAAU,EAAE,GAAGA,GAAM,QAAQ;EACpC,SAAS,CAACA,OAAU;AAAA,IAClB,GAAGA;AAAA,IACH,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,WAAW;AAAA,MACT,aAAa;AAAA,IAAA;AAAA,EACf;AAAA,EAEF,gBAAgB,CAACA,OAAU;AAAA,IACzB,GAAGA;AAAA,IACH,SAAS;AAAA,IACT,QAAQ;AAAA,EAAA;AAAA,EAEV,aAAa,CAACA,OAAU;AAAA,IACtB,GAAGA;AAAA,IACH,WAAW;AAAA,IACX,YAAY;AAAA,EAAA;AAAA,EAEd,YAAY,CAACA,OAAU;AAAA,IACrB,GAAGA;AAAA,IACH,YAAY;AAAA,EAAA;AAAA,EAEd,OAAO,CAACA,OAAU;AAAA,IAChB,GAAGA;AAAA,IACH,QAAQ;AAAA,IACR,SAAS;AAAA,EAAA;AAAA,EAEX,qBAAqB,CAACA,OAAU;AAAA,IAC9B,GAAGA;AAAA,IACH,QAAQ;AAAA,EAAA;AAAA,EAEV,mBAAmB,CAACA,OAAU;AAAA,IAC5B,GAAGA;AAAA,IACH,SAAS;AAAA,EAAA;AAEb,GAEMgd,KAAe,CAACC,MAEf,MAAM,QAAQA,CAAO,IAKtBA,EAAQ,WAAW,IACd,CAAA,IAKNA,EAAQ;AAAA,EACP,CAACxV,MAASA,KAAQ,OAAOA,KAAS,YAAY,WAAWA;AAAA,IAOtD,MAAM;AAAA,EACX,IAAI;AAAA,IACFwV,EAAQ,OAAO,CAACxV,MAASA,EAAK,KAAK,EAAE,IAAI,CAACA,MAAS,CAACA,EAAK,OAAOA,CAAI,CAAC;AAAA,EAAA,EACrE,OAAA;AAAO,EACT,IAAI,CAACA,OAAU,EAAE,OAAOA,EAAK,QAAQ,IAR9B,CAAA,IAdA,CAAA,GAmCLyV,KAAuB,CAACC,GAAIC,MAC5BA,EAAS,SAAS,OAAOD,IACpB,KAEF,CAAC,EAAEC,EAAS,eAAeA,EAAS,gBAAgBA,EAAS,UAGhEC,KAAgB,OAAO,OAAOpqB,EAAU,aAAa,GACrDqqB,KAAarqB,EAAU,cAAc,SACrCsqB,KAAc;AAAA,EAClBtqB,EAAU,cAAc;AAAA,EACxBA,EAAU,cAAc;AAC1B,GACMuqB,KAAiBD,GAAY,OAAO,CAACtqB,EAAU,cAAc,IAAI,CAAC,GAIlEwqB,KAAgB,CAACvd,MACjBqd,GAAY,SAASrd,EAAO,CAAC,CAAC,IACzBA,IAEFmd,GAAc,OAAO,CAACK,MAAM,CAACF,GAAe,SAASE,CAAC,CAAC,GAG1DC,KAAW,CAACC,MAAS;AACzB,QAAMC,IAAUD,KAAQ,CAAA,GAClBT,IAAKU,EAAQ;AACnB,MAAI,CAACV,EAAI,QAAO,EAAE,IAAI,IAAI,MAAM,IAAI,OAAO,GAAA;AAE3C,QAAM1pB,IAAO,GAAGoqB,GAAS,UAAU,IAAIA,GAAS,SAAS,MAAM,IACzDC,IAAQD,GAAS,SAAS;AAChC,SAAO,EAAE,IAAAV,GAAI,MAAA1pB,GAAM,OAAAqqB,EAAA;AACrB,GAEMC,KAAiB,CAACC,MAAO;AAE7B,QAAMC,IADMC,GAAA,EACI,OAAO,CAAC1mB,MAAMA,EAAE,UAAUwmB,CAAE,EAAE,CAAC;AAC/C,SAAI,CAACC,KAAO,OAAO,KAAKA,CAAG,EAAE,WAAW,IAAU,OAE3CA,GAAK,MAAM,CAAC;AACrB,GAIME,KAAW,CAACxuB,MACT,OAAOA,KAAU,YAAYA,MAAU,QAAQ,CAAC,MAAM,QAAQA,CAAK,GC9VtEyuB,KAAgB,CAACC,GAAOC,GAAOntB,MACnC,GAAGktB,CAAK,GAAGltB,CAAS,GAAGmtB,CAAK,IAExBC,KAAgB,CAACnrB,GAAOjC,MAAc;AAC1C,QAAMqtB,IAAgB,OAAO,UAAU,eAAe;AAAA,IACpDprB;AAAA,IACAH,EAAU;AAAA,EAAA;AASZ,SAPe;AAAA,IACb,WAAWG,EAAM,eAAe,aAAa;AAAA,IAC7C,QAAQorB,IACJJ,GAAchrB,EAAM,OAAOA,EAAM,MAAMjC,CAAS,IAChDiC,EAAM,eAAeA,EAAM,QAAQA,EAAM,SAAS;AAAA,IACtD,UAAUorB,IAAgBprB,EAAM,eAAe,OAAOA,EAAM;AAAA,EAAA;AAGhE,GAIMqrB,KAAyB,CAACnqB,GAAMlB,GAAO+pB,GAAIuB,MAAa;AAC5D,QAAMtB,IAAWhqB,GAAO,KAAK,iBAAiB,CAAA,GACxCurB,IAAUzB,GAAqBC,GAAIC,CAAQ,GAC3CwB,IAAY3rB,EAAU,eAEtB4rB,IAAa;AAAA,IACjB,OAAOzrB,EAAM;AAAA,IACb,SAASkB;AAAA,IACT,UAAUlB,EAAM;AAAA,IAChB,SAASA,EAAM,QAAQ;AAAA,IACvB,QAAQA,EAAM,eAAeA,EAAM,QAAQA,EAAM,SAAS;AAAA,EAAA,GAGtD0rB,IAAc;AAAA,IAClB,CAAC7rB,EAAU,cAAc,QAAQ,GAAG;AAAA,MAClC,OAAOG,EAAM,UAAU;AAAA,MACvB,UAAUA,EAAM;AAAA,MAChB,QAAQgrB;AAAA,QACNhrB,EAAM,UAAU;AAAA,QAChBA,EAAM,UAAU;AAAA,QAChBwrB;AAAA,MAAA;AAAA,IACF;AAAA,IAEF,CAAC3rB,EAAU,cAAc,MAAM,GAAG;AAAA,MAChC,QAAQ;AAAA,MACR,QAAQyrB,KAAYC,IAAU,IAAI;AAAA,MAClC,SAAAA;AAAA,MACA,cAAcvrB,EAAM,aAAa;AAAA,MACjC,UAAUH,EAAU,cAAc;AAAA,IAAA;AAAA,IAEpC,CAACA,EAAU,cAAc,OAAO,GAAGsrB,GAAcnrB,GAAOwrB,CAAS;AAAA,EAAA;AAGnE,SAAO,EAAE,GAAGC,GAAY,GAAIC,EAAYxqB,CAAI,KAAK,CAAA,EAAC;AACpD,GCzDMyqB,KAAa;AAAA,EACjB,WAAW;AAAA,EACX,oBAAoB;AAAA,EACpB,UAAU;AAAA,EACV,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AACb,GCIMtoB,KAAO,CAACye,GAAK8J,GAAWC,MAAW;AACvC,MAAI/J,EAAI,OAAO,OAAO;AACpB,UAAMgK,IAAehK,EAAI,OAAO,YAAYA,EAAI,OAAO;AACvD,QAAIiK,IAAQjK,EAAI,MAAM;AACtB,IAAIA,EAAI,MAAM,YAAYjiB,EAAU,cAAc,UAC5CksB,KAAS,CAACA,EAAM,SAAS,MAAM,KAAKjK,EAAI,MAAM,iBAChDiK,IAAQlsB,EAAU,wBAGlBksB,KAAS,CAACA,EAAM,SAAS,MAAM,MACjCA,IAAQlsB,EAAU;AACpB,UAAMmsB,IAAOlK,EAAI,MAAM,UAAUA,EAAI,MAAM,OAAO,MAAMjiB,EAAU,aAAa,GACzEosB,IAAQD,KAAQA,EAAK,UAAU,KAAKA,EAAK,CAAC,KAAM,IAChDE,IAAQF,KAAQA,EAAK,UAAU,KAAKA,EAAK,CAAC,KAAM,IAQhDG,IACJ,gBAAAjxB;AAAA,MAAC2oB;AAAA,MAAA;AAAA,QACC,IAAG;AAAA,QACH,yBATD,OAAA,EACE,UAAA;AAAA,UAAAoI;AAAA,4BACA,MAAA,EAAG;AAAA,UACHC;AAAA,QAAA,GACH;AAAA,QAME,OAAO,EAAE,UAAU,QAAQ,WAAW,OAAA;AAAA,QAEtC,UAAA,gBAAAhxB,EAAC,OAAA,EAAI,KAAK6wB,GAAO,OAAO,EAAE,QAAQ,QAAQ,OAAO,OAAA,GAAU,KAAI,GAAA,CAAG;AAAA,MAAA;AAAA,IAAA;AAGtE,QAAItS,IAAQqS;AACZ,UAAMM,IAAU,CAAAhJ,MACdA,MAASvjB,EAAU,wBAAwB,OACzC,gBAAA3E;AAAA,MAACmQ;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,QACX,SAAS,CAAC,SAAS,OAAO;AAAA,QAC1B,WAAU;AAAA,QACV,WAAS;AAAA,QACT,QAAQ;AAAA,QACR,SAAS8gB;AAAA,QAET,4BAAC,OAAA,EAAI,WAAU,oBAAmB,KAAK/I,GAAM,KAAI,GAAA,CAAG;AAAA,MAAA;AAAA,IAAA,GAGpDiJ,IAAO,CAACjJ,GAAMkJ,GAAKzd,MACvBuU,KAAQA,MAAS,KACf,gBAAAnnB,EAAC,OAAA,EAAI,WAAU,SACZ,UAAA;AAAA,MAAAmwB,EAAQhJ,CAAI;AAAA,MACb,gBAAAloB,EAAC,QAAA,EAAK,WAAU,QAAQ,UAAA2T,EAAA,CAAI;AAAA,IAAA,EAAA,CAC9B,IAEA,gBAAA3T;AAAA,MAACmQ;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,SACE,gBAAApP,EAACqP,IAAA,EAAQ,IAAIkI,MACV,UAAA;AAAA,UAAAyY;AAAA,4BACA,MAAA,EAAG;AAAA,UACHC;AAAA,QAAA,GACH;AAAA,QAGF,UAAA,gBAAAhxB,EAAC,OAAA,EAAI,WAAU,QAAQ,UAAA2T,EAAA,CAAI;AAAA,MAAA;AAAA,IAAA;AAgBjC,QAbIiT,EAAI,MAAM,YAAYjiB,EAAU,cAAc,UAC5CiiB,EAAI,MAAM,WAAW,OACvBrI,IACE,gBAAAve;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAS,MAAM2wB,EAAO/J,EAAI,MAAM,SAASA,EAAI,MAAM,KAAK;AAAA,QACxD,WAAU;AAAA,QAEV,UAAA,gBAAA5mB,EAAC,QAAA,EAAK,WAAU,0BAA0B,UAAA4wB,EAAA,CAAa;AAAA,MAAA;AAAA,IAAA,IAK3DhK,EAAI,MAAM,YAAYjiB,EAAU,cAAc,SAAS;AACzD,YAAM0sB,IAAWZ,GAAW7J,EAAI,MAAM,QAAQ,KAAKA,EAAI,MAAM;AAC7D,MAAArI,IACE,gBAAAxd;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS,MAAM4vB,EAAO/J,EAAI,MAAM,UAAUA,EAAI,MAAM,KAAK;AAAA,UACzD,WAAU;AAAA,UAEV,UAAA;AAAA,YAAA,gBAAA5mB,EAAC,KAAA,EAAE,WAAWqxB,EAAA,CAAU;AAAA,YAAG;AAAA,YAC3B,gBAAArxB,EAAC,QAAA,EAAK,WAAU,0BAA0B,UAAA4wB,EAAA,CAAa;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAG7D;AACA,WAAOO,EAAKN,GAAOjK,EAAI,MAAM,QAAQrI,CAAK;AAAA,EAC5C;AACA,SAAImS,MAAc/rB,EAAU,cAAc,UACjC,gBAAA3E,EAAC,QAAA,EAAK,WAAU,aAAa,YAAO,QAAO,IAE7CitB,GAAQ,QAAQyD,CAAS,cAAc,EAAE,OAAO,OAAO;AAChE,GAEM9e,KAAS,CAAC5L,GAAMlB,GAAO+pB,GAAIuB,MACxBD,GAAuBnqB,GAAMlB,GAAO+pB,GAAIuB,CAAQ,GAGnDkB,KAAsB,CAACxsB,MAAU;AACrC,QAAM,EAAE,KAAA8hB,GAAK,QAAA2K,GAAQ,UAAAC,EAAA,IAAa1sB,GAC5B,EAAE,QAAA6rB,MAAW/J,GACb,CAAC,EAAE,QAAAtG,GAAQ,mBAAAC,KAAqBC,CAAI,IAAIC,GAAQ;AAAA;AAAA,IAEpD,QAAQ0O,GAAcvI,EAAI,QAAQ;AAAA,IAClC,SAAS,CAACzN,MACD,CAACqY;AAAA,IAEV,MAAM,CAAArY,MAAQ;AACZ,YAAMsY,IAActY,EAAK,SACnBuY,IAAY9f,GAAOgV,EAAI,KAAK,MAAM,GAAG,EAAE,CAAC,GAAG6K,GAAa7K,EAAI,IAAIA,EAAI,QAAQ;AAClF,MAAA2K,EAAOG,CAAS;AAAA,IAClB;AAAA,IACA,SAAS,CAAAzS,OACA;AAAA,MACL,QAAQA,EAAQ,OAAA;AAAA,MAChB,mBAAmBA,EAAQ,QAAA;AAAA,IAAQ;AAAA,EAEvC,CACD,GAEKyR,IACJ9J,EAAI,YAAYA,EAAI,SAAS,CAAC,MAAMjiB,EAAU,cAAc,WAAWA,EAAU,cAAc,SAASiiB,EAAI,SAAS,CAAC;AAKxH,SACE,gBAAA5mB,EAAC,SAAI,KAAKwgB,GAAM,WALA,SAASF,IAAS,aAAa,EAAE,GACjDC,IAAoB,cAAc,EACpC,IAIK,UAAApY,GAAKye,GAAK8J,GAAWC,CAAM,EAAA,CAC9B;AAEJ;AAEAW,GAAoB,YAAY;AAAA,EAC9B,KAAKpxB,EAAU,OAAO;AAAA,EACtB,QAAQA,EAAU,KAAK;AAAA,EACvB,UAAUA,EAAU;AACtB;ACnJA,MAAMyxB,KAAU,CAAC,EAAE,OAAAvrB,GAAO,UAAAwrB,GAAU,YAAA7R,GAAY,YAAA8R,QAAiB;AAC/D,QAAM,CAAC,EAAE,kBAAA5R,EAAA,GAAoBC,CAAI,IAAIE,GAAQ;AAAA,IAC3C,MAAM;AAAA,IACN,MAAM,EAAE,KAAKha,GAAO,KAAKwrB,EAAS,IAAI,MAAM,OAAA;AAAA,IAC5C,SAAS,MAAMC;AAAA,IACf,SAAS,CAAA5S,OACA;AAAA,MACL,kBAAkBA,EAAQ,WAAA;AAAA,IAAW;AAAA,EAEzC,CACD,GACK,CAAC,EAAE,QAAAqB,GAAQ,mBAAAC,KAAqBC,CAAI,IAAIC,GAAQ;AAAA,IACpD,QAAQ;AAAA,IACR,SAAS,MAAMoR;AAAA,IACf,MAAM,CAAA1Y,MAAQ;AACZ,YAAM2Y,IAAM,EAAE,KAAK1rB,GAAO,KAAKwrB,EAAS,GAAA,GAClCG,IAAM5Y;AACZ,MAAI2Y,EAAI,QAAQC,EAAI,OAAOD,EAAI,QAAQC,EAAI,OACzChS,EAAWgS,EAAI,KAAKD,EAAI,GAAG;AAAA,IAE/B;AAAA,IACA,SAAS,CAAA7S,OACA;AAAA,MACL,QAAQA,EAAQ,OAAA;AAAA,MAChB,mBAAmBA,EAAQ,QAAA;AAAA,IAAQ;AAAA,EAEvC,CACD;AAID,SACE,gBAAAjf,EAAC,SAAI,KAAKwgB,GACR,4BAAC,OAAA,EAAI,KAAKN,GAAM,WALF,mBAAmBI,IAAS,aAAa,EAAE,GAC3DC,IAAoB,cAAc,EACpC,GAAGN,IAAmB,iBAAiB,EAAE,IAInC,UAAA,gBAAAjgB,EAAC,SAAI,WAAU,WACb,4BAAC,QAAA,EAAK,WAAU,gBAAgB,UAAA0O,EAAO,wBAAA,CAAwB,EAAA,CACjE,EAAA,CACF,EAAA,CACF;AAEJ;AAEAijB,GAAQ,YAAY;AAAA,EAClB,OAAOzxB,EAAU,OAAO;AAAA,EACxB,UAAUA,EAAU,OAAO;AAAA,EAC3B,YAAYA,EAAU,KAAK;AAC7B;ACpDO,MAAM8xB,KAAQ;AAAA,EACnB,sBAAsB;AAAA,EACtB,wBAAwB;AAAA,EACxB,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB,cAAc;AAChB,GAEaC,KAAK;AAAA,EAChB,CAACD,GAAM,oBAAoB,GAAG;AAAA,EAC9B,CAACA,GAAM,sBAAsB,GAAG;AAAA,EAChC,CAACA,GAAM,OAAO,GAAG;AAAA,EACjB,CAACA,GAAM,eAAe,GAAG;AAAA,EACzB,CAACA,GAAM,YAAY,GAAG;AACxB,GCZaE,KAAW,CAACC,MAChBF,GAAGE,CAAI,KAAK;ACAd,SAASC,GAASC,GAAW;AAClC,QAAMC,IAAOD,EAAU;AAEvB,SAAO,CAACvtB,MACDwtB,IAIDJ,GAASI,CAAI,MAAM,KACd,OAGF,gBAAAtyB,EAACqyB,GAAA,EAAW,GAAGvtB,EAAA,CAAO,IAPpB,gBAAA9E,EAACqyB,GAAA,EAAW,GAAGvtB,EAAA,CAAO;AASnC;ACNA,MAAMytB,KAAY,CAAC,EAAE,QAAAC,GAAQ,YAAAX,IAAa,SACxC,gBAAA7xB,EAACyP,IAAA,EAAS,KAAI,aACZ,UAAA,gBAAAzP;AAAA,EAACiB;AAAA,EAAA;AAAA,IACC,SAAS,MAAMuxB,EAAA;AAAA,IACf,MAAK;AAAA,IACL,SAAQ;AAAA,IACR,UAAU,CAACX;AAAA,IAEV,UAAAnjB,EAAO;AAAA,EAAA;AACV,GACF;AAGF6jB,GAAU,YAAY,EAAE,QAAQryB,EAAU,KAAK,WAAA;AAE/C,MAAMuyB,KAAY,CAAC,EAAE,QAAAC,GAAQ,MAAAzf,GAAM,YAAA4e,IAAa,SAAW;AACzD,QAAM,EAAE,MAAA7pB,MAASiL;AACjB,SACE,gBAAAjT,EAACyP,IAAA,EAAS,KAAI,UACZ,UAAA,gBAAAzP;AAAA,IAACiB;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,SAAS,MAAMyxB,EAAO1qB,CAAI;AAAA,MAC1B,MAAK;AAAA,MACL,UAAU,CAAC6pB;AAAA,MAEV,UAAAnjB,EAAO;AAAA,IAAA;AAAA,EAAA,GAEZ;AAEJ;AAEA+jB,GAAU,YAAY;AAAA,EACpB,QAAQvyB,EAAU,KAAK;AAAA,EACvB,MAAMA,EAAU,OAAO;AACzB;AAEA,MAAMyyB,KAAa,MACjB,gBAAA3yB,EAAC,SAAI,WAAU,iBAAiB,YAAO,yBAAwB,GAG3D4yB,KAAY,CAAC,EAAE,SAAAC,GAAS,OAAAzsB,GAAO,MAAAJ,GAAM,YAAA6rB,GAAY,MAAA5e,QACrD,gBAAAjT;AAAA,EAAC2xB;AAAA,EAAA;AAAA,IACC,OAAAvrB;AAAA,IACA,MAAAJ;AAAA,IACA,UAAUiN,EAAK;AAAA,IACf,YAAY4f;AAAA,IACZ,YAAAhB;AAAA,EAAA;AACF;AAGFe,GAAU,YAAY;AAAA,EACpB,SAAS1yB,EAAU,KAAK;AAAA,EACxB,OAAOA,EAAU,OAAO;AAAA,EACxB,MAAMA,EAAU,OAAO;AAAA,EACvB,MAAMA,EAAU,OAAO;AACzB;AAEA,MAAM4yB,KAAkB,CAAC,EAAE,UAAAC,GAAU,KAAAnM,GAAK,SAAAoM,IAAU,SAAY;AAC9D,QAAM,EAAE,YAAAnB,MAAejL;AAEvB,SACE,gBAAA5mB,EAACyP,IAAA,EAAS,KAAI,mBACZ,UAAA,gBAAAzP;AAAA,IAACiB;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,SAAS8xB;AAAA,MACT,MAAK;AAAA,MACL,UAAU,CAAClB,KAAcmB;AAAA,MAExB,UAAAA,IAAUtkB,EAAO,YAAYA,EAAO;AAAA,IAAA;AAAA,EAAA,GAEzC;AAEJ;AAEAokB,GAAgB,OAAOd,GAAM;AAE7Bc,GAAgB,YAAY;AAAA,EAC1B,UAAU5yB,EAAU,KAAK;AAAA,EACzB,KAAKA,EAAU,OAAO;AAAA,EACtB,SAASA,EAAU,KAAK;AAC1B;AAEA,MAAM+yB,KAAyBb,GAASU,EAAe,GAEjDI,KAAY,CAACpuB,MAAU;AAC3B,QAAM,EAAE,KAAA8hB,MAAQ9hB,GACV,EAAE,IAAA+pB,GAAI,aAAA5mB,EAAA,IAAgB2e,KAAO,CAAA;AAInC,SACE,OAAOiI,KAAO,YACd,CAAC;AAAA,IACClqB,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,EACxB,SAASsD,CAAW,sBAEd0qB,IAAA,EAAW,sBAIbM,IAAA,EAAwB,GAAGnuB,EAAA,CAAO,uBAAO6tB,IAAA,EAAW;AAC9D;AAEAO,GAAU,YAAY;AAAA,EACpB,UAAUhzB,EAAU;AAAA,EACpB,KAAKA,EAAU,OAAO;AAAA,EACtB,SAASA,EAAU,KAAK;AAC1B;AClHA,MAAMizB,KAAU,CAACC,GAAWxB,MAAa;AACvC,QAAM,EAAE,MAAA5rB,GAAM,OAAAI,GAAO,cAAAitB,GAAc,cAAAC,GAAc,YAAAC,MAAeH;AAChE,UAAQptB,GAAA;AAAA,IACN,KAAKyT,EAAW;AACd,aACE,gBAAAzZ;AAAA,QAACC,EAAK;AAAA,QAAL;AAAA,UACC,MAAK;AAAA,UACL,OAAO2xB,EAASxrB,CAAK,KAAK;AAAA,UAC1B,UAAU,CAAA8C,MAAKmqB,EAAa,EAAE,GAAAnqB,GAAG,WAAAkqB,GAAW,UAAAxB,GAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IAG5D,KAAKnY,EAAW;AACd,+BACGzY,IAAA,EACC,UAAA;AAAA,QAAA,gBAAAhB;AAAA,UAACC,EAAK;AAAA,UAAL;AAAA,YACC,MAAK;AAAA,YACL,OAAO2xB,EAASxrB,CAAK,EAAE,SAAS;AAAA,YAChC,UAAU,CAAC8C,MAAMmqB,EAAa,EAAE,GAAAnqB,GAAG,WAAAkqB,GAAW,UAAAxB,GAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAEzD0B,EAAa,EAAE,GAAGC,GAAY,MAAM,EAAE,MAAM3B,IAAS,CAAG;AAAA,MAAA,GAC3D;AAAA,IAEJ,KAAKnY,EAAW;AAAA,IAChB,KAAKA,EAAW;AAAA,IAChB,KAAKA,EAAW;AAAA,IAChB,KAAK;AACH,aAAO6Z,EAAa,EAAE,GAAGC,GAAY,MAAM,EAAE,MAAM3B,EAAA,GAAY;AAAA,IACjE;AACE,+BAAQ,QAAA,EAAK;AAAA,EAAA;AAEnB,GAEM4B,KAAe,CAAAC,MAAe;AAClC,QAAMpe,IAAaoe,GACbC,IAAK,CAAA,GACLC,IAAI,CAACC,GAAKra,MAAQ;AACtB,UAAM,EAAE,OAAAsa,GAAO,YAAAC,GAAY,iBAAAC,GAAiB,cAAAC,MAAiBJ,GACvDK,IAAS,CAAA;AACf,WAAIJ,KACF,OAAO,OAAOI,GAAQ,EAAE,OAAAJ,GAAO,UAAUA,GAAO,GAGhD,gBAAA9yB;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QACV,OAAOkzB;AAAA,QAEN,UAAA;AAAA,UAAAF,IAAkBA,EAAgBC,CAAY,IAAI;AAAA,UACnD,gBAAAh0B,EAAC,OAAA,EAAI,OAAOi0B,GAAS,UAAAH,EAAA,CAAW;AAAA,QAAA;AAAA,MAAA;AAAA,MAL3B,iBAAiBF,EAAI,SAASA,EAAI,KAAK,IAAIra,CAAG;AAAA,IAAA;AAAA,EAQzD;AACA,SAAAlE,EAAW,QAAQ,CAACue,GAAKra,MAAQma,EAAG,KAAKC,EAAEC,GAAKra,CAAG,CAAC,CAAC,GAEnD,gBAAAvZ,EAAC,OAAA,EAAI,WAAU,gBAAe,OAAO,EAAE,cAAc,iBAAA,GACnD,UAAA,gBAAAA,EAAC,OAAA,EAAK,UAAA0zB,EAAA,CAAG,GACX;AAEJ,GAEMQ,KAAY,CAACT,GAAaU,MAAc;AAC5C,QAAM9e,IAAaoe,GACb7B,IAAWuC,GACXT,IAAK,CAAA,GACLC,IAAI,CAACC,GAAKtxB,GAAKiX,MAAQ;AAC3B,UAAM,EAAE,OAAAnT,GAAO,OAAAytB,GAAO,YAAAN,GAAY,cAAAD,GAAc,MAAAttB,MAAS4tB,GACnDK,IAAS,CAAA;AACf,IAAIJ,KACF,OAAO,OAAOI,GAAQ,EAAE,OAAAJ,GAAO,UAAUA,GAAO;AAElD,UAAMO,IACJpuB,MAASyT,EAAW,WAChB,2CACA;AACN,WACE,gBAAAzZ;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAWo0B;AAAA,QACX,OAAOH;AAAA,QAEN,cACGd,GAAQS,GAAKtxB,CAAG,KAAK,KACrBgxB,EAAa,EAAE,GAAGC,GAAY,MAAM,EAAE,MAAMjxB,EAAA,EAAI,CAAG,KAAK;AAAA,MAAA;AAAA,MANvD,cAAcA,EAAI,EAAE,IAAIsxB,EAAI,SAASA,EAAI,KAAK,IAAIra,CAAG;AAAA,IAAA;AAAA,EAShE;AACA,SAAAlE,EAAW,QAAQ,CAACue,GAAKra,MAAQma,EAAG,KAAKC,EAAEC,GAAKhC,GAAUrY,CAAG,CAAC,CAAC,GAE7D,gBAAAvZ,EAAC,OAAA,EAAsC,WAAU,gBAC/C,UAAA,gBAAAA,EAAC,OAAA,EAAK,UAAA0zB,EAAA,CAAG,KADD,cAAc9B,EAAS,EAAE,EAEnC;AAEJ,GAEMyC,KAAQ,CAACvK,MAAS;AACtB,QAAMwK,IAASxK;AACf,SAAIwK,KAAUA,EAAO,SAAS,IAAU,yBAErC,OAAA,EAAI,WAAU,gBACb,UAAA,gBAAAt0B,EAAC,SACC,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,oBAAmB,OAAO,EAAE,OAAO,UAAU,UAAA,YAAA,CAE5D,GACF,GACF;AAEJ,GCxGMu0B,KAAqB,CAAAzvB,MAAS;AAClC,QAAM,EAAE,QAAA0vB,GAAQ,UAAAC,GAAU,MAAAxhB,EAAA,IAASnO;AACnC,MAAI0vB,EAAO,SAAS/a,EAAW,iBAAkB,QAAO;AACxD,QAAM,EAAE,MAAAzR,MAASiL;AACjB,SACE,gBAAAjT;AAAA,IAACiB;AAAA,IAAA;AAAA,MAEC,SAAS,MAAMwzB,EAASD,GAAQvhB,CAAI;AAAA,MACpC,SAAQ;AAAA,MACR,MAAK;AAAA,MAEJ,UAAAya;AAAA,QACC3B,GAAQyI,EAAO,eAAexsB,EAAKwsB,EAAO,EAAE,EAAE,YAAY,EAAE;AAAA,MAAA,KACzD;AAAA,IAAA;AAAA,IAPA,OAAOxsB,EAAK,EAAE;AAAA,EAAA;AAUzB;AAEAusB,GAAmB,YAAY;AAAA,EAC7B,QAAQr0B,EAAU,OAAO;AAAA,EACzB,UAAUA,EAAU,KAAK;AAAA,EACzB,MAAMA,EAAU,OAAO;AACzB;AC3BA,MAAMw0B,KAAmB,CAAC1uB,GAAMlB,GAAO+pB,GAAI5mB,MAAgB;AACzD,QAAM,EAAE,UAAA0sB,GAAU,KAAAC,EAAA,IAAQ9vB,GACpBgqB,IAAW8F,GAAK,iBAAiB,CAAA;AAEvC,MAAIvE,IAAU;AACd,EAAIpoB,MAAgB,cACd6mB,GAAU,SAAS,OAAOD,IAC5BwB,IAAU,KAEVA,IAAU,CAAC,EACTvB,EAAS,eACTA,EAAS,gBACTA,EAAS;AAKf,QAAM+F,IAAS5sB,MAAgB,YAAY,IAAI;AAE/C,UAAQjC,GAAA;AAAA,IACN,KAAKrB,EAAU,cAAc;AAC3B,aAAO;AAAA,QACL,OAAOgwB,EAAS;AAAA,QAChB,SAAShwB,EAAU,cAAc;AAAA,QACjC,UACEgwB,EAAS,eACT7vB,EAAM,oBACNA,EAAM;AAAA,QACR,aAAa6vB,EAAS;AAAA,QACtB,WAAWA,EAAS;AAAA,QACpB,UAAUA,EAAS;AAAA,QACnB,qBAAqBA,EAAS;AAAA,QAC9B,QAAQ,qBAAqBA,EAAS,iBAAiB;AAAA,MAAA;AAAA,IAG3D,KAAKhwB,EAAU,cAAc;AAC3B,aAAO;AAAA,QACL,OAAOG,EAAM;AAAA,QACb,QAAQ;AAAA,QACR,QAAA+vB;AAAA,QACA,SAAAxE;AAAA,QACA,SAAS1rB,EAAU,cAAc;AAAA,QACjC,UAAUG,EAAM;AAAA,QAChB,gBAAgBA,EAAM;AAAA,QACtB,SAASA,EAAM;AAAA,QACf,mBAAmBA,EAAM;AAAA,QACzB,qBAAqBA,EAAM;AAAA,QAC3B,WAAWA,EAAM;AAAA,QACjB,QAAQA,EAAM,kBACV,mBAAmBA,EAAM,eAAe,KACxC,qBAAqB6vB,EAAS,iBAAiB;AAAA,QACnD,cAAc7vB,EAAM,aAAa;AAAA,MAAA;AAAA,IAGrC;AACE,aAAO;AAAA,QACL,OAAOA,EAAM;AAAA,QACb,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,SAASA,EAAM;AAAA,QACf,UAAUA,EAAM;AAAA,QAChB,SAASA,EAAM,QAAQ;AAAA,MAAA;AAAA,EAE3B;AAEJ,GCtDM4M,KAAO,CAACkV,GAAK8J,GAAWa,IAAS,MAAM;AAAC,GAAGxe,IAAS,CAAA,MAAO;AAC/D,MAAI6T,EAAI,SAASA,EAAI,MAAM,OAAO;AAChC,UAAMrI,IAAQqI,EAAI,MAAM;AACxB,QAAIiK,IAAQjK,EAAI,MAAM;AACtB,IAAIA,EAAI,MAAM,YAAY,YACpBiK,KAAS,CAACA,EAAM,SAAS,MAAM,KAAKjK,EAAI,MAAM,iBAChDiK,IAAQlsB,EAAU,wBAGlBksB,KAAS,CAACA,EAAM,SAAS,MAAM,MACjCA,IAAQlsB,EAAU;AACpB,UAAMssB,IACJ,gBAAAjxB;AAAA,MAAC2oB;AAAA,MAAA;AAAA,QACC,IAAG;AAAA,QACH,OAAOpK;AAAA,QACP,OAAO,EAAE,UAAU,QAAQ,WAAW,OAAA;AAAA,QAEtC,UAAA,gBAAAve,EAAC,OAAA,EAAI,KAAK6wB,GAAO,OAAO,EAAE,QAAQ,QAAQ,OAAO,OAAA,GAAU,KAAI,GAAA,CAAG;AAAA,MAAA;AAAA,IAAA,GAGhEK,IAAU,CAAChJ,MACfA,MAASvjB,EAAU,wBACjBsoB,GAAQ,QAAQyD,CAAS,IAAI,EAAE,OAAO,OAAO,UAAU,UAAA,CAAW,IAElE,gBAAA1wB;AAAA,MAACmQ;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,QACX,SAAS,CAAC,SAAS,OAAO;AAAA,QAC1B,WAAU;AAAA,QACV,WAAS;AAAA,QACT,QAAQ;AAAA,QACR,SAAS8gB;AAAA,QAET,4BAAC,OAAA,EAAI,WAAU,oBAAmB,KAAK/I,GAAM,KAAI,GAAA,CAAG;AAAA,MAAA;AAAA,IAAA;AAyB1D,YAtBa,CAACA,GAAMvU,MAClBuU,KAAQA,MAAS,KACf,gBAAAnnB,EAAC,OAAA,EAAI,WAAU,SACZ,UAAA;AAAA,MAAAmwB,EAAQhJ,CAAI;AAAA,wBACZ,OAAA,EAAI,WAAU,WACb,UAAA,gBAAAloB,EAACyP,IAAA,EAAS,KAAI,mBACZ,UAAA,gBAAAzP;AAAA,QAACiB;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAAS,MAAMswB,EAAO,CAAA,GAAIxe,CAAM;AAAA,UAE/B,UAAArE,EAAO;AAAA,QAAA;AAAA,MAAA,GAEZ,EAAA,CACF;AAAA,IAAA,EAAA,CACF,IAEA,gBAAA1O,EAAC,OAAA,EAAI,WAAU,QAAO,OAAO,EAAE,OAAO,MAAA,GACnC,UAAA2T,EAAA,CACH,GAEQkd,GAAOtS,CAAK;AAAA,EAC1B;AACA,SAAO0O,GAAQ,QAAQyD,CAAS,cAAc;AAAA,IAC5C,OAAO;AAAA,IACP,UAAU;AAAA,EAAA,CACX;AACH,GAEMvoB,KAAO,CAACye,GAAK8J,GAAWa,MAAW;AACvC,MAAI3K,EAAI,SAASnN,EAAW,SAAS;AACnC,UAAM+a,IAAS5N,EAAI,UAAU,CAAA,GACvBkH,IAASlH,EAAI,KAAK4N,EAAO,EAAE,GAC3B,EAAE,MAAAxsB,MAAS4e;AACjB,WAAOlV,GAAKoc,GAAQ4C,GAAWa,GAAQ,EAAE,QAAAiD,GAAQ,MAAAxsB,GAAM;AAAA,EACzD;AACA,SAAO0J,GAAKkV,GAAK8J,CAAS;AAC5B,GAEMoE,KAA2B,CAAChwB,MAAU;AAC1C,QAAM,EAAE,KAAA8hB,GAAK,QAAA2K,GAAQ,aAAAtpB,EAAA,IAAgBnD,GAC/B,CAAC,EAAE,QAAAwb,GAAQ,mBAAAC,KAAqBC,CAAI,IAAIC,GAAQ;AAAA,IACpD,QAAQ0O,GAAcvI,EAAI,QAAQ;AAAA,IAClC,MAAM,CAACmO,GAAa9V,MAAY;AAC9B,YAAMwS,IAAcxS,EAAQ,QAAA,EAAU,SAChCjZ,IAAO4gB,EAAI,OAAO,KAAK,MAAM,GAAG,EAAE,CAAC,GACnC,EAAE,IAAAiI,MAAOjI,GACT8K,IAAYgD,GAAiB1uB,GAAMyrB,GAAa5C,GAAI5mB,CAAW;AACrE,MAAAspB,EAAOG,GAAW9K,CAAG;AAAA,IACvB;AAAA,IACA,SAAS,CAAC3H,OACD;AAAA,MACL,QAAQA,EAAQ,OAAA;AAAA,MAChB,mBAAmBA,EAAQ,QAAA;AAAA,IAAQ;AAAA,EAEvC,CACD;AAID,SACE,gBAAAjf;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WALc,SAASsgB,IAAS,aAAa,EAAE,GACjDC,IAAoB,cAAc,EACpC;AAAA,MAII,KAAKC;AAAA,MACL,OAAO,EAAE,SAAS,eAAe,gBAAgB,SAAA;AAAA,MAEhD,UAAArY,GAAKye,GAAK,UAAU2K,CAAM;AAAA,IAAA;AAAA,EAAA;AAGjC;AAEAuD,GAAyB,YAAY;AAAA,EACnC,KAAK50B,EAAU,OAAO;AAAA,EACtB,QAAQA,EAAU;AACpB;AAEA40B,GAAyB,eAAe,EAAE,QAAQ,MAAM;AAAC,EAAA;ACtHzD,MAAME,KAAe,CAAClwB,MAAU;AAC9B,QAAM,EAAE,KAAA8hB,GAAK,QAAA4N,GAAQ,UAAAC,GAAU,MAAAxhB,GAAM,aAAAhL,MAAgBnD;AACrD,MAAI,CAAC,CAAC2U,EAAW,iBAAiBA,EAAW,aAAa,EAAE,SAAS+a,EAAO,IAAI,EAAG,QAAO;AAC1F,QAAM,EAAE,MAAAxsB,MAASiL;AACjB,EAAA2T,EAAI,WAAW,CAAC4N,EAAO,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC,GACzC5N,EAAI,SAAS4N,GACb5N,EAAI,OAAO5e;AACX,QAAMitB,IAAO/vB,EAAU0hB,CAAG;AAC1B,SACE,gBAAA5mB,EAAC,OAAA,EAAI,WAAU,mDACb,UAAA,gBAAAA,EAAC80B,IAAA,EAAyB,KAAKG,GAAM,QAAQR,GAAU,aAAAxsB,EAAA,CAA2B,GACpF;AAEJ;AAEA+sB,GAAa,YAAY;AAAA,EACvB,QAAQ90B,EAAU,OAAO;AAAA,EACzB,KAAKA,EAAU,OAAO;AAAA,EACtB,UAAUA,EAAU,KAAK;AAAA,EACzB,MAAMA,EAAU,OAAO;AACzB;ACrBA,MAAMg1B,KAAmB,CAACpwB,MAAU;AAClC,QAAM,EAAE,MAAAqwB,GAAM,QAAAX,GAAQ,MAAAvhB,EAAA,IAASnO;AAC/B,MAAIswB,MACAniB,EAAK,KAAKuhB,EAAO,EAAE,KAAK,CAAA,GAAI,SAAS,CAAA,GAAI,MAAMW,EAAK,KAAK,EAAE,KAAK;AACpE,EAAAC,IACED,EAAK,UAAU,sBAAsBC,MAAiB,KAClDA,EAAa,QAAQ,CAAC,IACtBA;AAEN,QAAM3sB,IAAa,MAAM;AACvB,IAAA4sB,GAAKD,CAAY;AAAA,EACnB;AAEA,SACE,gBAAAp1B,EAACyP,IAAA,EAAS,KAAI,aACZ,UAAA,gBAAAzP;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,UAAU;AAAA,MACV,WAAU;AAAA,MACV,SAASyI;AAAA,MACT,WAAW,CAACS,MAAMA,EAAE,QAAQ,WAAWT,EAAA;AAAA,MACvC,OAAO,EAAE,WAAW,aAAa,QAAQ,OAAA;AAAA,MAExC,UAAA2sB;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;AACAF,GAAiB,YAAY;AAAA,EAC3B,MAAMh1B,EAAU,OAAO;AAAA,EACvB,QAAQA,EAAU,OAAO;AAAA,EACzB,MAAMA,EAAU,OAAO;AACzB;AC/BA,MAAMo1B,KAAmB,CAACxwB,MAAU;AAClC,QAAM,EAAE,QAAA0vB,GAAQ,MAAAvhB,GAAM,QAAA0d,EAAA,IAAW7rB,GAC3BywB,MAAQtiB,EAAK,KAAKuhB,EAAO,EAAE,KAAK,IAAI,SAAS,CAAA,GAAI,SAAS,IAC1DgB,MAASviB,EAAK,KAAKuhB,EAAO,EAAE,KAAK,IAAI,SAAS,CAAA,GAAI,kBAAkB;AAC1E,SAAIe,MAAQ,KAAW,gBAAAv1B,EAAC,OAAA,CAAA,CAAI,sBAEzB,KAAA,EAAE,MAAK,QAAO,SAAS,MAAM2wB,EAAO,UAAU4E,CAAG,GAAG,WAAU,WAC7D,UAAA,gBAAAv1B,EAAC,UAAK,WAAU,0BAA0B,aAAK,GACjD;AAEJ;AAEAs1B,GAAiB,YAAY;AAAA,EAC3B,QAAQp1B,EAAU,OAAO;AAAA,EACzB,MAAMA,EAAU,OAAO;AAAA,EACvB,QAAQA,EAAU;AACpB;AAEAo1B,GAAiB,eAAe,EAAE,QAAQ,MAAM;AAAC,EAAA;AClBjD,MAAMG,KAAY,CAAC3wB,MAAU;AAC3B,QAAM,EAAE,QAAA0vB,GAAQ,MAAAvhB,GAAM,UAAAwhB,GAAU,aAAAxsB,MAAgBnD,GAC1C,EAAE,MAAAkD,MAASiL,GACXyiB,IAAU1tB,EAAKwsB,EAAO,EAAE,KAAKxsB,EAAKwsB,EAAO,EAAE,EAAE,SAAU,CAAA;AAC7D,MAAI,CAACkB,EAAO,OAAQ,0BAAQ,OAAA,CAAA,CAAI;AAChC,QAAMC,IAAQrd,GAAA;AAEd,SAAIrQ,MAAgB,YAEhB,gBAAAjI,EAAC,SAAI,WAAU,uBACf,4BAACyP,IAAA,EAAS,KAAI,oBAAmB,WAAU,SACzC,UAAA,gBAAAzP;AAAA,IAACC,EAAK;AAAA,IAAL;AAAA,MACC,MAAK;AAAA,MACL,MAAM,SAAS01B,CAAK;AAAA,MACpB,UAAUD,EAAO;AAAA,MACjB,SAASA,EAAO,WAAW;AAAA,MAC3B,UAAU,MAAMjB,EAAS,EAAE,MAAAxhB,GAAM,UAAUuhB,GAAQ,OAAO,GAAG;AAAA,MAC7D,OAAM;AAAA,IAAA;AAAA,EAAA,GAEV,EAAA,CACF,IAKA,gBAAAzzB,EAAC,OAAA,EAAI,WAAU,uBACb,UAAA;AAAA,IAAA,gBAAAf,EAACyP,IAAA,EAAS,KAAI,oBAAmB,WAAU,SACzC,UAAA,gBAAAzP;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,MAAK;AAAA,QACL,MAAM,SAAS01B,CAAK;AAAA,QACpB,UAAUD,EAAO;AAAA,QACjB,SAASA,EAAO,WAAW;AAAA,QAC3B,UAAU,MAAMjB,EAAS,EAAE,MAAAxhB,GAAM,UAAUuhB,GAAQ,OAAO,GAAG;AAAA,QAC7D,OAAM;AAAA,MAAA;AAAA,IAAA,GAEV;AAAA,IACA,gBAAAx0B,EAACyP,IAAA,EAAS,KAAI,mBAAkB,WAAU,SACxC,UAAA,gBAAAzP;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,MAAK;AAAA,QACL,MAAM,SAAS01B,CAAK;AAAA,QACpB,SAASD,EAAO,WAAW;AAAA,QAC3B,UAAU,MAAMjB,EAAS,EAAE,MAAAxhB,GAAM,UAAUuhB,GAAQ,OAAO,GAAG;AAAA,QAC7D,OAAM;AAAA,MAAA;AAAA,IAAA,GAEV;AAAA,IACA,gBAAAx0B,EAACyP,IAAA,EAAS,KAAI,uBAAsB,WAAU,SAC5C,UAAA,gBAAAzP;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,MAAK;AAAA,QACL,MAAM,SAAS01B,CAAK;AAAA,QACpB,SAASD,EAAO,WAAW;AAAA,QAC3B,UAAU,MAAMjB,EAAS,EAAE,MAAAxhB,GAAM,UAAUuhB,GAAQ,OAAO,GAAG;AAAA,QAC7D,OAAM;AAAA,MAAA;AAAA,IAAA,EACR,CACF;AAAA,EAAA,GACF;AAEJ;AAEAiB,GAAU,YAAY;AAAA,EACpB,QAAQv1B,EAAU,OAAO;AAAA,EACzB,MAAMA,EAAU,OAAO;AAAA,EACvB,UAAUA,EAAU,KAAK;AAC3B;AC9DA,MAAM01B,KAAiB,CAAC9wB,MAAU;AAChC,QAAM,EAAE,QAAA0vB,GAAQ,UAAAC,GAAU,UAAAoB,GAAU,MAAA5iB,MAASnO;AAC7C,MAAI0vB,EAAO,SAAS/a,EAAW,YAAYoc,EAAS,SAAS,EAAG,QAAO;AACvE,QAAM,EAAE,MAAA7tB,MAASiL,GACX3Q,IAAMuzB,EAAS,KAAK,CAACtI,MAAMA,EAAE,UAAUvlB,EAAKwsB,EAAO,EAAE,EAAE,KAAK,KAAK;AACvE,SACE,gBAAAx0B;AAAA,IAAC81B;AAAA,IAAA;AAAA,MACC,QAAQrH;AAAA,MACR,aAAW;AAAA,MACX,oBAAoB,EAAE,UAAU,WAAA;AAAA,MAChC,OAAO;AAAA,MACP,SAASoH;AAAA,MACT,OAAOvzB;AAAA,MACP,UAAU,CAAC4G,MAAMurB,EAASvrB,GAAGsrB,GAAQvhB,CAAI;AAAA,MACzC,eAAc;AAAA,MACd,kBAAkB,SAAS;AAAA,IAAA;AAAA,EAAA;AAIjC;AAEA2iB,GAAe,YAAY;AAAA,EACzB,QAAQ11B,EAAU,OAAO;AAAA,EACzB,UAAUA,EAAU,KAAK;AAAA,EACzB,MAAMA,EAAU,OAAO;AAAA,EACvB,UAAUA,EAAU,QAAQA,EAAU,MAAM,EAAE;AAChD;ACxBO,MAAM61B,KAAqB,CAACC,GAAMC,MAAa;AACpD,QAAM9N,IAAM,OAAO,IAAI,gBAAgB6N,CAAI,GAErChJ,IAAO,SAAS,cAAc,GAAG;AACvC,EAAAA,EAAK,OAAO7E,GACZ6E,EAAK,aAAa,YAAYiJ,CAAQ,GAEtC,SAAS,KAAK,YAAYjJ,CAAI,GAE9BA,EAAK,MAAA,GAEL,OAAO,IAAI,gBAAgB7E,CAAG,GAC9B,SAAS,KAAK,YAAY6E,CAAI;AAChC,GAQakJ,KAAc,CAACvO,GAAUwO,IAAkB,eAAe;AACrE,MAAI;AACF,UAAMC,IAAczO,EAAS,QAAQ,IAAI,qBAAqB;AAE9D,QAAIyO,KAAeA,EAAY,QAAQ,YAAY,MAAM,IAAI;AAE3D,YAAMC,IADgB,yCACQ,KAAKD,CAAW;AAE9C,UAAIC,KAAW,QAAQA,EAAQ,CAAC;AAC9B,eAAOA,EAAQ,CAAC,EAAE,QAAQ,SAAS,EAAE;AAIvC,YAAMC,IADoB,6BACY,KAAKF,CAAW;AAEtD,UAAIE,KAAeA,EAAY,CAAC;AAC9B,eAAO,mBAAmBA,EAAY,CAAC,CAAC;AAAA,IAE5C;AAEA,UAAMnO,IAAMR,EAAS;AACrB,QAAIQ,GAAK;AACP,YAAMoO,IAAWpO,EAAI,MAAM,GAAG,GACxBqO,IAAoBD,EAASA,EAAS,SAAS,CAAC;AAEtD,UACEC,KACAA,EAAkB,SAAS,GAAG,KAC9B,CAACA,EAAkB,SAAS,GAAG,KAC/BA,EAAkB,SAAS;AAE3B,eAAOA,EAAkB,MAAM,GAAG,EAAE,CAAC;AAAA,IAEzC;AAEA,WAAOL;AAAA,EACT,SAASrO,GAAO;AACd,mBAAQ,MAAM,4CAA4CA,CAAK,GACxDqO;AAAA,EACT;AACF,GAOaM,KAAyB,OACpC9O,GACAwO,IAAkB,eACf;AACH,MAAI;AACF,UAAMH,IAAO,MAAMrO,EAAS,MAAA,EAAQ,KAAA,GAC9BsO,IAAWC,GAAYvO,GAAUwO,CAAe;AACtD,IAAAJ,GAAmBC,GAAMC,CAAQ;AAAA,EACnC,SAASnO,GAAO;AACd,kBAAQ,MAAM,yCAAyCA,CAAK,GACtDA;AAAA,EACR;AACF;ACrFA,MAAM4O,GAAY;AAAA,EAChB,OAAO,OAAO,OAAO1O,GAAUR,IAAS,OAAOxf,IAAO,MAAM+K,IAAS,OAAO;AAC1E,UAAMyV,IAAeR,GACfI,IAAMpgB,IACR,MAAM+f,GAAI,gBAAgB/f,GAAMwgB,GAAchB,CAAM,IACpD,MAAMO,GAAI,YAAYS,GAAchB,GAAQzU,CAAM;AAItD,WAAIqV,EAAI,QACC,IAAIrjB,GAASkK,GAAO,QAAQmZ,EAAI,SAAS,EAAE,GAAG,EAAE,MAAMA,GAAK,IAE7D,IAAIrjB,GAASkK,GAAO,QAAQmZ,EAAI,OAAO,EAAE,GAAG,EAAE,MAAMA,GAAK;AAAA,EAClE;AAAA;AAAA,EAGA,OAAO,UAAU,OAAOJ,GAAUR,IAAS,OAAOxf,IAAO,MAAM+K,IAAS,OAAO;AAC7E,UAAMyV,IAAeR;AAKrB,WAJYhgB,IACR,MAAM+f,GAAI,eAAe/f,GAAMwgB,CAAY,IAC3C,MAAMT,GAAI,WAAWS,GAAchB,GAAQzU,CAAM;AAAA,EAGvD;AACF;AC1BA,MAAM4jB,GAAc;AAAA;AAAA,EAElB,OAAOC,KAAWF,GAAY;AAAA,EAE9B,OAAO,cAAc,CAAC7H,GAAI9b,MACxB4jB,GAAcC,GAAS,uBAAuB/H,CAAE,IAAI,OAAO,MAAM9b,CAAM;AAC3E;ACaA,MAAqB8jB,WAAoBhyB,GAAM,UAAU;AAAA,EACvD,YAAYC,GAAO;AACjB,UAAMA,CAAK,GACX,KAAK,QAAQ,EAAE,WAAW,GAAA,GAC1B,KAAK,SAAS,KAAK,OAAO,KAAK,IAAI,GACnC,KAAK,WAAW,KAAK,SAAS,KAAK,IAAI,GACvC,KAAK,SAAS,KAAK,OAAO,KAAK,IAAI,GACnC,KAAK,UAAU,KAAK,QAAQ,KAAK,IAAI,GACrC,KAAK,eAAe,KAAK,aAAa,KAAK,IAAI,GAC/C,KAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI,GACjD,KAAK,cAAc,KAAK,YAAY,KAAK,IAAI,GAC7C,KAAK,SAAS,KAAK,OAAO,KAAK,IAAI,GACnC,KAAK,QAAQ,KAAK,MAAM,KAAK,IAAI,GACjC,KAAK,aAAa,KAAK,WAAW,KAAK,IAAI;AAAA,EAC7C;AAAA,EAEA,aAAaiO,GAAQ;AACnB,UAAM,EAAE,GAAA7J,GAAG,WAAAkqB,GAAW,UAAAxB,EAAA,IAAa7e,GAC7B+jB,IAAW5tB,EAAE,OAAO;AAE1B,QADiB0oB,EAASwB,EAAU,KAAK,EAAE,UAC1B0D,EAAU;AAI3B,QAHI1D,EAAU,SAAS3Z,EAAW,WAChCmY,EAASwB,EAAU,KAAK,IAAI0D,IAE1B1D,EAAU,SAAS3Z,EAAW,kBAAkB;AAClD,UAAI,MAAMqd,CAAQ,EAAG;AACrB,MAAAlF,EAASwB,EAAU,KAAK,EAAE,QAAQ2D,GAAQD,CAAQ,EAAE,MAAA;AAAA,IACtD;AACA,UAAM,EAAE,KAAAlQ,MAAQ,KAAK,OACfoQ,IAAUpQ,EAAI,MAAM,cAAc,CAAA,GAClCrN,IAAMyd,EAAQ,UAAU,OAAKC,EAAE,OAAOrF,EAAS,EAAE;AACvD,IAAAoF,EAAQ,OAAOzd,GAAK,GAAGqY,CAAQ,GAC/BhL,EAAI,MAAM,aAAaoQ,GACvBpQ,EAAI,YAAY,GAAG,GAAGA,EAAI,OAAO,EAAI;AAAA,EACvC;AAAA,EAEA,cAAc,GAAGsQ,GAAUjkB,GAAM;AAC/B,UAAM,EAAE,MAAAjL,MAASiL,GACX,EAAE,KAAA2T,MAAQ,KAAK,OACfoQ,IAAUpQ,EAAI,MAAM,cAAc,CAAA,GAClCkH,IAASkJ,EAAQ,KAAK,OAAKC,EAAE,OAAOjvB,EAAK,EAAE;AACjD,IAAA8lB,EAAOoJ,EAAS,EAAE,IAAI,EAAE,OAAO,IAAI,EAAE,QAAQ,GAAA;AAC7C,UAAM3d,IAAMyd,EAAQ,UAAU,OAAKC,EAAE,OAAOjvB,EAAK,EAAE;AACnD,IAAAgvB,EAAQ,OAAOzd,GAAK,GAAGuU,CAAM,GAC7BlH,EAAI,MAAM,aAAaoQ,GACvBpQ,EAAI,YAAYsQ,GAAUA,EAAS,IAAItQ,EAAI,OAAO,EAAI;AAAA,EACxD;AAAA,EAEA,YAAYsQ,GAAUjkB,GAAM;AAC1B,UAAM,EAAE,MAAAjL,MAASiL,GACX,EAAE,KAAA2T,MAAQ,KAAK,OACfoQ,IAAUpQ,EAAI,MAAM,cAAc,CAAA,GAClCkH,IAASkJ,EAAQ,KAAK,OAAKC,EAAE,OAAOjvB,EAAK,EAAE,GAC3CqjB,IAAQC,GAAS4L,EAAS,aAAa;AAC7C,QAAI3L,IAAOF,EAAM,UAAU,CAAAG,MAAKA,EAAE,QAAQsC,EAAOoJ,EAAS,EAAE,EAAE,YAAY;AAC1E,IAAI3L,IAAOF,EAAM,SAAS,IAAGE,KAAQ,IAChCA,IAAO;AACZ,UAAM4L,IAAK9L,EAAM,SAAS,IAAIA,EAAME,CAAI,EAAE,MAAM,IAC1CqC,IAAInC;AAAA,MACRyL,EAAS;AAAA,MACTC;AAAA,MACArJ,EAAOoJ,EAAS,EAAE,EAAE;AAAA,IAAA;AAEtB,IAAApJ,EAAOoJ,EAAS,EAAE,IAAI,EAAE,OAAOtJ,GAAG,cAAcuJ,EAAA;AAChD,UAAM5d,IAAMyd,EAAQ,UAAU,OAAKC,EAAE,OAAOjvB,EAAK,EAAE;AACnD,IAAAgvB,EAAQ,OAAOzd,GAAK,GAAGuU,CAAM,GAC7BlH,EAAI,MAAM,aAAaoQ,GACvBpQ,EAAI,YAAYsQ,GAAUA,EAAS,IAAItQ,EAAI,OAAO,EAAI;AAAA,EACxD;AAAA,EAEA,OAAOmO,GAAaqC,GAAW;AAC7B,UAAM,EAAE,KAAAxQ,MAAQ,KAAK,OACfsQ,IAAWE,EAAU,QACrBJ,IAAUpQ,EAAI,MAAM,cAAc,CAAA,GAClCkH,IAASkJ,EAAQ,KAAK,CAAAC,MAAKA,EAAE,OAAOG,EAAU,KAAK,EAAE;AAC3D,IAAAtJ,EAAOoJ,EAAS,EAAE,IAAI,EAAE,OAAOnC,EAAA;AAC/B,UAAMxb,IAAMyd,EAAQ,UAAU,CAAAC,MAAKA,EAAE,OAAOG,EAAU,KAAK,EAAE;AAC7D,IAAAJ,EAAQ,OAAOzd,GAAK,GAAGuU,CAAM,GAC7BlH,EAAI,MAAM,aAAaoQ,GACvBpQ,EAAI,YAAYsQ,GAAUA,EAAS,IAAItQ,EAAI,OAAO,EAAI;AAAA,EACxD;AAAA,EAEA,MAAM7T,GAAQ;AACZ,UAAM,EAAE,MAAAE,GAAM,UAAAikB,GAAU,OAAAG,EAAA,IAAUtkB,GAC5B,EAAE,KAAA6T,MAAQ,KAAK,OACfoQ,IAAUpQ,EAAI,MAAM,cAAc,CAAA,GAClCkH,IAASkJ,EAAQ,KAAK,CAAAC,MAAKA,EAAE,OAAOhkB,EAAK,KAAK,EAAE;AACtD,IAAAA,EAAK,KAAKikB,EAAS,EAAE,EAAE,MAAM,SAASG,GACtCvJ,EAAOoJ,EAAS,EAAE,IAAI,EAAE,OAAOjkB,EAAK,KAAKikB,EAAS,EAAE,EAAE,MAAA;AACtD,UAAM3d,IAAMyd,EAAQ,UAAU,CAAAC,MAAKA,EAAE,OAAOhkB,EAAK,KAAK,EAAE;AACxD,IAAA+jB,EAAQ,OAAOzd,GAAK,GAAGuU,CAAM,GAC7BlH,EAAI,MAAM,aAAaoQ,GACvBpQ,EAAI,YAAYsQ,GAAUA,EAAS,IAAItQ,EAAI,OAAO,EAAI;AAAA,EACxD;AAAA,EAEA,aAAa;AACX,UAAM,EAAE,KAAAA,MAAQ,KAAK,OAEf,EAAE,eAAAhf,GAAe,QAAA+oB,GAAQ,YAAAkB,EAAA,IAAejL,GACxC0Q,IAAU1Q,EAAI,MAAM,cAAc,CAAA;AACxC,QAAIvR,IAAa,CAAA;AACjB,KAACuR,EAAI,MAAM,cAAc,CAAA,GAAI,QAAQ,CAAA2Q,MAAM;AACzC,UAAIC,IAAS;AAAA,QACX,MAAMD,EAAG;AAAA,QACT,YAAYA,EAAG;AAAA,QACf,OAAOA,EAAG;AAAA,MAAA;AAEZ,YAAME,IAAY,CAAA;AAIlB,UAHIF,EAAG,SAAS9d,EAAW,WACzB+d,IAAS,EAAE,GAAGA,GAAQ,UAAU,IAAM,cAAc,KAAK,aAAA,IAEvDD,EAAG,SAAS9d,EAAW,UAAU;AACnC,YAAIoc,IACDjuB,EAAc2vB,EAAG,aAAa,KAC7B3vB,EAAc2vB,EAAG,aAAa,EAAE,WAClC,CAAA;AACF,QAAA1B,IAAWA,EAAS,IAAI,CAAA6B,OACf;AAAA,UACL,OAAOA,EAAG;AAAA,UACV,MAAMA,EAAG;AAAA,UACT,OAAOA,EAAG;AAAA,QAAA,EAEb;AACD,cAAMnE,IAAa;AAAA,UACjB,QAAQgE;AAAA,UACR,UAAU,KAAK;AAAA,UACf,UAAA1B;AAAA,QAAA;AAEF,QAAA2B,IAAS;AAAA,UACP,GAAGA;AAAA,UACH,cAAc5B;AAAA,UACd,YAAArC;AAAA,UACA,cAAc,KAAK;AAAA,QAAA;AAAA,MAEvB;AACA,UAAIgE,EAAG,SAAS9d,EAAW,kBAAkB;AAC3C,cAAM8Z,IAAa,EAAE,QAAQgE,GAAI,UAAU,KAAK,YAAA;AAChD,QAAAC,IAAS;AAAA,UACP,GAAGA;AAAA,UACH,cAAcjD;AAAA,UACd,YAAAhB;AAAA,UACA,cAAc,KAAK;AAAA,QAAA;AAAA,MAEvB;AACA,UAAIgE,EAAG,SAAS9d,EAAW,iBAAiB;AAC1C,cAAM8Z,IAAa,EAAE,QAAQgE,GAAI,KAAA3Q,GAAK,UAAU,KAAK,QAAQ,aAAaA,EAAI,YAAA;AAC9E,QAAA4Q,IAAS;AAAA,UACP,GAAGA;AAAA,UACH,cAAcxC;AAAA,UACd,YAAAzB;AAAA,UACA,cAAc,KAAK;AAAA,UACnB,OAAO;AAAA,QAAA,KAEKgE,EAAG,SAAS,IAAI,MAAM,GAAG,KAAK,CAAA,GACvC,QAAQ,CAAAjU,MAAK;AAChB,gBAAM6R,IAAOpH,GAAW,KAAK,CAAA4J,MAAKA,EAAE,UAAUrU,CAAC;AAC/C,cAAI6R,GAAM;AACR,kBAAMyC,IAAM;AAAA,cACV,OAAOtU;AAAA,cACP,UAAU;AAAA,cACV,MAAM7J,EAAW;AAAA,cACjB,YAAY0b,EAAK;AAAA,cACjB,cAAcD;AAAA,cACd,YAAY,EAAE,MAAAC,GAAM,QAAQoC,EAAA;AAAA,YAAG;AAEjC,YAAAE,EAAU,KAAKG,CAAG;AAAA,UACpB;AAAA,QACF,CAAC;AAAA,MACH;AACA,UAAIL,EAAG,SAAS9d,EAAW,eAAe;AACxC,cAAMoe,IAAOP,EAAQ;AAAA,UACnB,CAAA/J,MAAKA,EAAEgK,EAAG,EAAE,KAAKhK,EAAEgK,EAAG,EAAE,EAAE,SAAShK,EAAEgK,EAAG,EAAE,EAAE,MAAM;AAAA,QAAA,GAE9ChE,IAAa,EAAE,QAAQgE,GAAI,KAAA3Q,GAAK,UAAU,KAAK,QAAQ,aAAaA,EAAI,YAAA;AAC9E,QAAA4Q,IAAS;AAAA,UACP,GAAGA;AAAA,UACH,cAAcxC;AAAA,UACd,YAAAzB;AAAA,UACA,cAAc,KAAK;AAAA,UACnB,OAAO;AAAA,QAAA;AAET,cAAMuE,IAAY;AAAA,UAChB,OAAO;AAAA,UACP,UAAU;AAAA,UACV,MAAMre,EAAW;AAAA,UACjB,YAAY;AAAA,UACZ,cAAcse;AAAAA,UACd,YAAY,EAAE,QAAQR,GAAI,UAAU,KAAK,OAAO,aAAa3Q,EAAI,YAAA;AAAA,UACjE,OAAO;AAAA,QAAA;AAGT,QAAIiR,EAAK,SAAS,KAAKjR,EAAI,gBAAgB,aAAW6Q,EAAU,KAAKK,CAAS;AAC9E,cAAME,IAAU;AAAA,UACd,OAAO;AAAA,UACP,UAAU;AAAA,UACV,MAAMve,EAAW;AAAA,UACjB,YAAY;AAAA,UACZ,cAAc6b;AAAA,UACd,YAAY,EAAE,QAAQiC,GAAI,QAAA5G,EAAA;AAAA,UAC1B,OAAO;AAAA,QAAA;AAET,QAAA8G,EAAU,KAAKO,CAAO,KACRT,EAAG,SAAS,IAAI,MAAM,GAAG,KAAK,CAAA,GACvC,QAAQ,CAAAjU,MAAK;AAChB,gBAAM6R,IAAOnH,GAAW,KAAK,CAAA2J,MAAKA,EAAE,UAAUrU,CAAC;AAC/C,cAAI6R,GAAM;AACR,kBAAMyC,IAAM;AAAA,cACV,OAAOtU;AAAA,cACP,UAAU;AAAA,cACV,MAAM7J,EAAW;AAAA,cACjB,YAAY0b,EAAK;AAAA,cACjB,cAAcD;AAAA,cACd,YAAY,EAAE,MAAAC,GAAM,QAAQoC,EAAA;AAAA,YAAG;AAEjC,YAAAE,EAAU,KAAKG,CAAG;AAAA,UACpB;AAAA,QACF,CAAC;AAAA,MACH;AACA,MAAAviB,EAAW,KAAKmiB,CAAM,GAClBC,EAAU,SAAS,MAAGpiB,IAAaA,EAAW,OAAOoiB,CAAS;AAAA,IACpE,CAAC;AACD,UAAM3wB,IAAM;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,OAAO8f,EAAI,MAAM;AAAA,MACjB,iBAAiB2L;AAAA,MACjB,cAAc,EAAE,QAAQ,KAAK,QAAQ,YAAAV,EAAA;AAAA,MACrC,cAAcY;AAAA,MACd,YAAY,EAAE,QAAQ,KAAK,QAAQ,YAAAZ,EAAA;AAAA,MACnC,OAAO;AAAA,IAAA;AAET,IAAAxc,EAAW,OAAO,GAAG,GAAGvO,CAAG;AAC3B,UAAMmxB,IAAQ,GAAGtzB,EAAU,cAAc,YAAY,IAAIiiB,EAAI,MAAM,GAAG,IAAIA,EAAI,MAAM,KAAK,IACnFsR,IAAO;AAAA,MACX,MAAM;AAAA,MACN,OAAOtR,EAAI,MAAM;AAAA,MACjB,YAAY;AAAA,MACZ,OAAO,GAAGA,EAAI,MAAM,KAAK;AAAA,MACzB,iBAAiBsM;AAAA,MACjB,cAAc,EAAE,UAAU,KAAK,UAAU,KAAAtM,GAAU,SAAS,KAAK,MAAM,UAAA;AAAA,MACvE,cAAcgM;AAAA,MACd,YAAY;AAAA,QACV,SAAS,KAAK;AAAA,QACd,OAAOhM,EAAI,MAAM;AAAA,QACjB,MAAMqR;AAAA,QACN,YAAApG;AAAA,MAAA;AAAA,MAEF,OAAO;AAAA,IAAA;AAET,WAAAxc,EAAW,OAAO,GAAG,GAAG6iB,CAAI,GACrB7iB;AAAA,EACT;AAAA,EAEA,QAAQzD,GAAQumB,GAAQ;AACtB,UAAM,EAAE,KAAAvR,MAAQ,KAAK,OACfwR,IAAQxR,EAAI,MAAM,YAClByR,IAAMD,EAAM,UAAU,CAAAlvB,MAAKA,EAAE,OAAO0I,CAAM,GAC1C0mB,IAAMF,EAAM,UAAU,CAAAlvB,MAAKA,EAAE,OAAOivB,CAAM,GAC1CI,IAAOH,EAAMC,CAAG;AACtB,IAAAD,EAAMC,CAAG,IAAID,EAAME,CAAG,GACtBF,EAAME,CAAG,IAAIC,GACb3R,EAAI,YAAY,GAAG,GAAGA,EAAI,OAAO,EAAI;AAAA,EACvC;AAAA,EAEA,OAAO5Q,GAAS;AACd,UAAM,EAAE,KAAA4Q,MAAQ,KAAK;AACrB,IAAAA,EAAI,MAAM,aAAaA,EAAI,MAAM,WAAW;AAAA,MAC1C,CAAAqQ,MAAKA,EAAE,OAAOjhB,EAAQ;AAAA,IAAA,GAExB4Q,EAAI,YAAY,GAAG,GAAGA,EAAI,OAAO,EAAI;AAAA,EACvC;AAAA,EAEA,SAAS;AACP,UAAM,EAAE,KAAAA,MAAQ,KAAK,OACfyD,IAAYzD,EAAI,MAAM,cAAc,CAAA,GACpC4R,IAAS,IAAIpgB,GAAA;AACnB,IAAAiS,EAAU,IAAI,CAAAnhB,MACRA,EAAE,SAASuQ,EAAW,SAAe,OAAO,OAAO+e,GAAQ,EAAE,CAACtvB,EAAE,EAAE,GAAG,IAAI,IACtE,OAAO,OAAOsvB,GAAQ;AAAA,MAC3B,CAACtvB,EAAE,EAAE,GAAG,EAAE,OAAO,IAAI,cAAcA,EAAE,aAAA;AAAA,IAAa,CACnD,CACF,GACD0d,EAAI,MAAM,aAAaA,EAAI,MAAM,cAAc,CAAA,GAC/CA,EAAI,MAAM,WAAW,KAAK4R,CAAM,GAChC5R,EAAI,YAAY,GAAG,GAAGA,EAAI,OAAO,EAAI;AAAA,EACvC;AAAA,EAEA,MAAM,WAAW;AACf,QAAI;AACF,WAAK,SAAS,EAAE,WAAW,GAAA,CAAM;AAEjC,YAAM,EAAE,KAAAA,MAAQ,KAAK,OACfe,IAAW,MAAMgP,GAAc,YAAY/P,EAAI,IAAI;AAAA,QACvD,OAAOA,EAAI;AAAA,QACX,UAAUA,EAAI,MAAM;AAAA,QACpB,UAAUA,EAAI;AAAA,MAAA,CACf;AAED,YAAM6P,GAAuB9O,CAAQ;AAAA,IACvC,SAASG,GAAO;AACd,cAAQ,MAAM,yBAAyBA,CAAK;AAAA,IAC9C,UAAA;AACE,WAAK,SAAS,EAAE,WAAW,GAAA,CAAO;AAAA,IACpC;AAAA,EACF;AAAA,EAEA,SAAS;AACP,UAAM,EAAE,KAAAlB,MAAQ,KAAK;AACrB,QAAIA,EAAI,SAAU,QAAO,gBAAA5mB,EAAC,SAAI,UAAA,qBAAiB;AAC/C,SAAK4mB,EAAI,MAAM,cAAc,CAAA,GAAI,SAAS,EAAG,QAAO;AACpD,UAAMvR,IAAa,KAAK,WAAA;AACxB,6BACG,OAAA,EACE,UAAA;AAAA,MAAAme,GAAane,CAAU;AAAA,wBACvB,OAAA,EAAK,UAAAgf,GAAMzN,EAAI,MAAM,UAAU,GAAE;AAAA,MAClC,gBAAA5mB,EAAC,OAAA,EACG,WAAA4mB,EAAI,MAAM,cAAc,CAAA,GAAI,IAAI,CAAAqQ,MAAK/C,GAAU7e,GAAY4hB,CAAC,CAAC,EAAA,CACjE;AAAA,IAAA,GACF;AAAA,EAEJ;AACF;AAEAJ,GAAY,YAAY;AAAA,EACtB,KAAK32B,EAAU,OAAO;AACxB;AChVA,MAAMu4B,KAAkB,CAAC,EAAE,KAAA7R,GAAK,YAAA8R,QAAiB;AAC/C,QAAM,CAACC,GAAcC,CAAe,IAAI9oB,EAAS,EAAE,GAC7C,CAAC+oB,GAAUC,CAAW,IAAIhpB,EAAS,KAAK;AAE9C,EAAAyG,GAAU,MAAM;AACd,UAAMwiB,IAAY,IAAI,gBAAgB;AAAA,MACpC,YAAYL,EAAW;AAAA,MACvB,WAAW;AAAA,IAAA,CACZ;AAED,UAAM,gCAAgCK,CAAS,IAAI;AAAA,MACjD,aAAa;AAAA,MACb,QAAQ;AAAA,IAAA,CACT,EACE,KAAK,CAAApR,MAAYA,EAAS,MAAM,EAChC,KAAK,CAAAqO,MAAQ;AACZ,MAAIA,GAAM,KAAK,WAAW,OAAO,KAC/B4C,EAAgB,IAAI,gBAAgB5C,CAAI,CAAC;AAAA,IAE7C,CAAC,EACA,MAAM,CAAAgD,MAAgB;AACrB,cAAQ,IAAIA,CAAY;AAAA,IAC1B,CAAC;AAAA,EACL,GAAG,CAACN,EAAW,GAAG,CAAC;AAEnB,QAAMO,IAAoB,CAAA/vB,MAAK;AAC7B,QAAIgwB,IAAW,WAAWhwB,EAAE,OAAO,KAAK;AACxC,IAAI,OAAO,MAAMgwB,CAAQ,IACvBA,IAAW,KACFA,IAAW,IACpBA,IAAW,IACFA,IAAW,QACpBA,IAAW,MAEbJ,EAAY,GAAGI,CAAQ,GAAG;AAAA,EAC5B,GAEMC,IACJ,gBAAAn5B;AAAA,IAACiB;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,IAAIy3B,EAAW;AAAA,MACf,WAAU;AAAA,MACV,SAAS,MACP9R,EAAI,SAAS,EAAE,GAAGA,EAAI,OAAO,QAAQ,KAAK,KAAK8R,EAAW,KAAK;AAAA,MAGhE,UAAAhqB,EAAO;AAAA,IAAA;AAAA,EAAA,GAINunB,IAAWyC,EAAW,MAC1B,gBAAA14B,EAAAqJ,GAAA,EACE,UAAA,gBAAArJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAS,MACPo5B,GAAa;AAAA,QACX,UAAU,uBAAuBV,EAAW,GAAG;AAAA,QAC/C,MAAMA,EAAW;AAAA,MAAA,CAClB;AAAA,MAEH,OAAO,EAAE,QAAQ,UAAA;AAAA,MACjB,OAAOA,EAAW;AAAA,MAEjB,UAAAA,EAAW;AAAA,IAAA;AAAA,EAAA,EACd,CACF,IAEAA,EAAW;AAGb,SACE,gBAAA33B,EAAC,OAAA,EAAI,WAAU,gBACb,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EACC,UAAA;AAAA,MAAA,gBAAAf,EAAC,SAAK,UAAAm5B,EAAA,CAAO;AAAA,MACb,gBAAAn5B,EAAC,OAAA,EAAI,WAAU,8BAA8B,UAAAi2B,GAAS;AAAA,MACtD,gBAAAj2B,EAAC,SAAI,WAAU,oBACb,4BAACC,EAAK,OAAL,EAAW,MAAK,MACf,UAAA,gBAAAD;AAAA,QAACC,EAAK;AAAA,QAAL;AAAA,UACC,MAAK;AAAA,UACL,OAAOy4B,EAAW,SAAS;AAAA,UAC3B,UAAU,CAAAxvB,MACR0d,EAAI,SAAS;AAAA,YACX,GAAGA,EAAI;AAAA,YACP,QAAQ;AAAA,YACR,KAAK8R,EAAW;AAAA,YAChB,KAAKxvB;AAAA,UAAA,CACN;AAAA,QAAA;AAAA,MAAA,GAGP,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IACA,gBAAAlJ,EAAC,OAAA,EAAI,OAAO,EAAE,eAAe,UAAU,YAAY,SAAA,GAChD,UAAA24B,KACC,gBAAA53B,EAAAsI,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAtI,EAAC,SAAI,OAAO,EAAE,WAAW,YAAY,SAAS,iBAC5C,UAAA;AAAA,QAAA,gBAAAA,EAACC,IAAA,EAAW,MAAK,MAAK,WAAU,yBAC9B,UAAA;AAAA,UAAA,gBAAAhB;AAAA,YAACC,EAAK;AAAA,YAAL;AAAA,cACC,MAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAO,WAAW44B,CAAQ;AAAA,cAC1B,UAAUI;AAAA,YAAA;AAAA,UAAA;AAAA,UAEZ,gBAAAj5B,EAACgB,GAAW,MAAX,EAAgB,UAAA,IAAA,CAAC;AAAA,QAAA,GACpB;AAAA,QACA,gBAAAhB;AAAA,UAACiB;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,MAAM,OAAO,KAAK03B,GAAc,QAAQ;AAAA,YAClD,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED,GACF;AAAA,MACA,gBAAA34B;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK24B;AAAA,UACL,KAAKD,EAAW;AAAA,UAChB,OAAO,EAAE,OAAOG,GAAU,QAAQ,QAAQ,UAAU,OAAA;AAAA,QAAO;AAAA,MAAA;AAAA,IAC7D,EAAA,CACF,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ;AAEAJ,GAAgB,YAAY;AAAA,EAC1B,YAAYv4B,EAAU,MAAM;AAAA,IAC1B,KAAKA,EAAU;AAAA,IACf,UAAUA,EAAU;AAAA,IACpB,OAAOA,EAAU;AAAA,IACjB,KAAKA,EAAU;AAAA,EAAA,CAChB;AAAA,EACD,KAAKA,EAAU,MAAM;AAAA,IACnB,UAAUA,EAAU;AAAA,IACpB,OAAOA,EAAU;AAAA,EAAA,CAClB;AACH;AAEAu4B,GAAgB,eAAe,EAAE,YAAY,CAAA,GAAI,KAAK,CAAA,EAAC;AC3IvD,MAAMY,KAAiB,CAAC;AAAA,EACtB,UAAAx5B;AAAA,EACA,MAAAmG;AAAA,EACA,OAAOszB;AAAA,EACP,UAAUC;AAAA,EACV,MAAAC;AACF,MAAM;AACJ,QAAM,CAAC,EAAE,QAAAlZ,GAAQ,mBAAAC,KAAqBC,CAAI,IAAIC,GAAQ;AAAA,IACpD,QAAQza;AAAA,IACR,SAAS,CAACmT,MAGNA,EAAK,QAAQ,SAAS,cACtBogB,EAAI,QAAQ9f,EAAW;AAAA,IAK3B,MAAM,CAACN,MAASqgB,EAAK,EAAE,QAAQrgB,GAAM,QAAQmgB,GAAK,KAAAC,GAAK;AAAA,IACvD,SAAS,CAACta,OAAa;AAAA,MACrB,QAAQ,CAAC,CAACA,EAAQ,OAAA;AAAA,MAClB,mBAAmB,CAAC,CAACA,EAAQ,QAAA;AAAA,MAC7B,MAAMA,EAAQ,QAAA;AAAA,MACd,UAAUA,EAAQ,YAAA;AAAA,IAAY;AAAA,EAChC,CACD,GAEKwa,IAAY;AAAA;AAAA;AAAA;AAAA,IAIhBnZ,KAAU;AAAA,IACVC,KAAqB;AAAA,EAAA,EAEpB,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,2BACG,OAAA,EAAI,KAAKC,GAAM,WAAWiZ,GACxB,UAAA55B,GACH;AAEJ;AAEAw5B,GAAe,YAAY;AAAA,EACzB,UAAUn5B,EAAU,UAAU;AAAA,IAC5BA,EAAU,QAAQA,EAAU,IAAI;AAAA,IAChCA,EAAU;AAAA,EAAA,CACX,EAAE;AAAA,EACH,MAAMA,EAAU,MAAM;AAAA,EACtB,MAAMA,EAAU,KAAK;AAAA,EACrB,OAAOA,EAAU,OAAO;AAAA,EACxB,UAAUA,EAAU,OAAO;AAC7B;ACnDA,MAAMw5B,KAAe,CAAA50B,MAAS;AAC5B,QAAM,EAAE,OAAO8nB,GAAM,QAAA+D,GAAQ,UAAA8D,GAAU,YAAA5C,MAAe/sB,GAChD,EAAE,OAAAzD,IAAQ,CAAA,EAAC,IAAMurB,GACjB;AAAA,IACJ,OAAO+M;AAAA,IACP,UAAUC;AAAA,IACV,QAAQ/I;AAAA,IACR,QAAQgJ;AAAA,IACR,SAASC;AAAA,EAAA,IACPz4B,GAEE04B,IAAUlJ,IACZ,qBAAqBA,CAAK,KAC1BlsB,EAAU,uBAERq1B,IAAeD,EAAQ,SAAS,MAAM,IAC1C,gBAAA/5B,EAAC,OAAA,EAAI,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAA,GACnC,UAAA,gBAAAA,EAACi6B,IAAA,EAAe,SAAAF,GAAkB,UAAU,KAAK,QAAM,GAAA,CAAC,EAAA,CAC1D,IAEA,gBAAA/5B,EAAC,OAAA,EAAI,KAAK+5B,GAAS,OAAO,EAAE,QAAQ,UAAU,KAAI,IAAG,GAGjDG,IACJ,gBAAAn5B,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAAC,UAAK,OAAO,EAAE,OAAO,MAAA,GAAU,YAAO,OAAM;AAAA,IAAO;AAAA,EAAA,GAEtD,GAGIuxB,IAAS,CAAApY,MAAQ;AACrB,UAAM,EAAE,QAAAvH,GAAQ,QAAAumB,EAAA,IAAWhf,GACrB,EAAE,SAAA9Y,MAAYuR;AACpB,IAAAumB,EAAO,QAAQ;AAAA,MACb,OAAO93B,EAAQ;AAAA,MACf,UAAUA,EAAQ;AAAA,MAClB,QAAQA,EAAQ;AAAA,MAChB,SAASA,EAAQ;AAAA,IAAA,GAEnBo0B,EAAS,EAAE,QAAA0D,GAAQ;AAAA,EACrB,GAEMgC,IACJ,gBAAAp5B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,cAAc,UAAU,QAAQ,GAAA;AAAA,MAC1C,UAAA;AAAA,QAAA;AAAA,QACgB2N,EAAO;AAAA,QAAQ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAI5B0rB,IAAe,MACf,CAACvI,KAAc,CAAC8H,IACX,OAEJA,IAoBH,gBAAA54B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,UAAU;AAAA,QACV,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,OAAO;AAAA,MAAA;AAAA,MAGT,UAAA;AAAA,QAAA,gBAAAf,EAAC,OAAA,EAAI,OAAO,EAAE,UAAU,YAAY,KAAK,GAAG,MAAM,EAAA,GAC/C,UA1BL,gBAAAA;AAAA,UAACiB;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,OAAO;AAAA,cACL,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,SAAS;AAAA,YAAA;AAAA,YAEX,SAAS,MAAM0vB,EAAOmJ,GAAQH,CAAI;AAAA,YAEjC,UAAAC;AAAA,UAAA;AAAA,QAAA,EAiBE,CACH;AAAA,QAdkBC,MAAU,UAAUK,IAAgBF;AAAA,MAerD;AAAA,IAAA;AAAA,EAAA,IA/BIG;AAoCX,SAAOtI,IACH,gBAAA7xB;AAAA,IAACq5B;AAAA,IAAA;AAAA,MACC,MAAM,CAAC,UAAU;AAAA,MACjB,OAAOzM;AAAA,MACP,UAAU,EAAE,KAAKA,EAAK,KAAA;AAAA,MACtB,MAAM2E;AAAA,MAEL,UAAA6I,EAAA;AAAA,IAAa;AAAA,EAAA,IAEdA,EAAA;AACR;AAEAV,GAAa,YAAY;AAAA,EACvB,OAAOx5B,EAAU,OAAO;AAAA,EACxB,QAAQA,EAAU,KAAK;AAAA,EACvB,UAAUA,EAAU,KAAK;AAC3B;AC/GA,MAAMm6B,KAAsB,CAAC,EAAE,cAAAC,GAAc,KAAAh4B,GAAK,UAAAkvB,QAAe;AAC/D,QAAM+I,IAAgBj4B,IAAM,IAAI,KAAKA,CAAG,IAAI;AAE5C,SACE,gBAAAtC,EAACC,EAAK,OAAL,EAAW,SAAS,CAACiJ,MAAMA,EAAE,gBAAA,GAC5B,UAAA,gBAAAlJ,EAAC,OAAA,EAAI,WAAU,iBACb,UAAA,gBAAAA;AAAA,IAACw6B;AAAA,IAAA;AAAA,MACC,aAAa,CAAChJ;AAAA,MACd,sBAAqB;AAAA,MACrB,gBAAc;AAAA,MACd,YAAW;AAAA,MACX,eAAe;AAAA,MACf,aAAY;AAAA,MACZ,YAAW;AAAA,MACX,UAAU+I;AAAA,MACV,UAAUD;AAAA,MACV,UAAUA;AAAA,MACV,iBAAgB;AAAA,MAChB,UAAA9I;AAAA,MACA,WAAWA,IAAW,gBAAgB;AAAA,IAAA;AAAA,EAAA,GAE1C,EAAA,CACF;AAEJ,GAEMiJ,KAAmB,CAAC,EAAE,UAAAhG,GAAU,KAAAnyB,GAAK,UAAAkvB,QAAe;AACxD,QAAM,CAACkJ,GAAgBC,CAAiB,IAAI7qB,EAAS,EAAK,GAEpD8qB,IAAmB,CAACC,MAAS;AACjC,IAAApG,EAASoG,CAAI,GACbF,EAAkB,EAAK;AAAA,EACzB;AAEA,SAAIr4B,KAAOo4B,IAEP,gBAAA16B;AAAA,IAACq6B;AAAA,IAAA;AAAA,MACC,cAAcO;AAAA,MACd,KAAAt4B;AAAA,MACA,UAAAkvB;AAAA,IAAA;AAAA,EAAA,IAKJ,gBAAAxxB,EAACyP,IAAA,EAAS,KAAI,eACZ,UAAA,gBAAAzP;AAAA,IAACiB;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,SAAS,CAACiI,MAAM;AACd,QAAAA,EAAE,gBAAA,GACFyxB,EAAkB,CAACD,CAAc;AAAA,MACnC;AAAA,MACA,UAAUlJ;AAAA,MAET,UAAA9iB,EAAO;AAAA,IAAA;AAAA,EAAA,GAEZ;AAEJ,GCzDMosB,KAAY,CAAC,EAAE,KAAAlU,GAAK,OAAAvlB,QAAY;AACpC,QAAM8B,IAAQH,GAAmB3B,CAAK;AACtC,SACE,gBAAAN,EAACd,EAAK,OAAL,EAAW,WAAU,cACnB,UAAA;AAAA,IAAAysB,GAAY9F,CAAG;AAAA,IAChB,gBAAA5mB,EAAC,SACE,UAAAmD,EAAM;AAAA,MAAI,CAAC43B,GAAM,MAChBA,EAAK,SAAS,SACZ,gBAAAh6B;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,MAAMg6B,EAAK;AAAA,UACX,QAAO;AAAA,UACP,KAAI;AAAA,UACJ,OAAO,EAAE,WAAW,aAAA;AAAA,UAEnB,UAAA;AAAA,YAAAA,EAAK;AAAA,YAAQ;AAAA,YAAErsB,EAAO;AAAA,UAAA;AAAA,QAAA;AAAA,QANlB;AAAA,MAAA,IASP,gBAAA1O,EAAC,QAAA,EAAc,UAAA+6B,EAAK,WAAT,CAAiB;AAAA,IAAA,EAEhC,CACF;AAAA,EAAA,GACF;AAEJ;AAEAD,GAAU,YAAY;AAAA,EACpB,KAAK56B,EAAU;AAAA,EACf,OAAOA,EAAU;AACnB;AAEA46B,GAAU,eAAe;AAAA,EACvB,KAAK,CAAA;AAAA,EACL,OAAO;AACT;ACLA,MAAME,KAAwB,CAACpU,MACzBA,EAAI,WAEJ,gBAAA7lB,EAACd,EAAK,OAAL,EAAW,WAAU,yBACnB,UAAA;AAAA,EAAAysB,GAAY9F,CAAG;AAAA,EAChB,gBAAA5mB;AAAA,IAACC,EAAK;AAAA,IAAL;AAAA,MACC,MAAK;AAAA,MACL,MAAM2mB,EAAI;AAAA,MACV,SAASA,EAAI;AAAA,MACb,UAAUA,EAAI;AAAA,MACd,UAAUA,EAAI;AAAA,MACd,WAAU;AAAA,IAAA;AAAA,EAAA;AACZ,GACF,IAIF,gBAAA7lB,EAACd,EAAK,OAAL,EACE,UAAA;AAAA,EAAAysB,GAAY,EAAE,OAAO,IAAI,aAAa,IAAI;AAAA,EAC3C,gBAAA3rB;AAAA,IAACd,EAAK;AAAA,IAAL;AAAA,MACC,MAAK;AAAA,MACL,IAAI2mB,EAAI;AAAA,MACR,SAASA,EAAI;AAAA,MACb,UAAUA,EAAI;AAAA,MACd,UAAUA,EAAI;AAAA,MAGd,UAAA;AAAA,QAAA,gBAAA5mB;AAAA,UAACC,EAAK,MAAM;AAAA,UAAX;AAAA,YAEC,MAAK;AAAA,YACL,MAAM2mB,EAAI;AAAA,YACV,SAASA,EAAI;AAAA,YACb,UAAUA,EAAI;AAAA,YACd,UAAUA,EAAI;AAAA,UAAA;AAAA,QAAA;AAAA,0BAEf3mB,EAAK,MAAM,OAAX,EAAkB,UAAAysB,GAAY9F,CAAG,EAAA,CAAE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAEtC,GACF,GAIEqU,KAAoB,CAACrU,MAAQ;AACjC,QAAM6F,IAAMwB,GAASrH,EAAI,QAAQ,GAC3BsU,IACJtU,EAAI,YACA,wCACA,kBACAuU,IACJvU,EAAI,SACJ,IAAI,KAAKiE,GAAOjE,EAAI,OAAO,qBAAqB,EAAE,YAAA,CAAa;AAGjE,2BACG3mB,EAAK,OAAL,EAAW,WAAWwsB,EAAI,CAAC,GACzB,UAAA;AAAA,IAAAC,GAAY9F,CAAG;AAAA,IAChB,gBAAA5mB,EAAC,OAAA,EAAI,WAAWk7B,GACd,UAAA,gBAAAl7B;AAAA,MAACy6B;AAAA,MAAA;AAAA,QACC,UAAU7T,EAAI;AAAA,QACd,KAAKuU;AAAA,QACL,UAAUvU,EAAI;AAAA,MAAA;AAAA,IAAA,EAChB,CACF;AAAA,EAAA,GACF;AAEJ,GAYMwU,KAAoB,CAACxU,MAAQ;AACjC,QAAM9mB,IAAY8mB,EAAI,aAClB,2CACA;AAEJ,MAAIyU,IAAY;AAEhB,EAAIzU,EAAI,OAAO,WAAW,MAAQA,EAAI,aACpCyU,IACE,gBAAAt6B,EAAC,OAAA,EAAI,WAAU,iBACb,UAAA;AAAA,IAAA,gBAAAf,EAACyP,IAAA,EAAS,KAAI,oBACZ,UAAA,gBAAAzP;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,MAAK;AAAA,QACL,MAAM,SAAS2mB,EAAI,MAAM,KAAK;AAAA,QAC9B,UAAUA,EAAI,MAAM,YAAY;AAAA,QAChC,SAASA,EAAI,MAAM,WAAW;AAAA,QAC9B,UAAU,MAAMA,EAAI,SAAS,EAAE,GAAGA,EAAI,OAAO,QAAQ,GAAG;AAAA,QACxD,QAAM;AAAA,QACN,OAAM;AAAA,MAAA;AAAA,IAAA,GAEV;AAAA,IACA,gBAAA5mB,EAACyP,IAAA,EAAS,KAAI,mBACZ,UAAA,gBAAAzP;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,MAAK;AAAA,QACL,MAAM,SAAS2mB,EAAI,MAAM,KAAK;AAAA,QAC9B,SAASA,EAAI,MAAM,WAAW;AAAA,QAC9B,UAAU,MAAMA,EAAI,SAAS,EAAE,GAAGA,EAAI,OAAO,QAAQ,GAAG;AAAA,QACxD,QAAM;AAAA,QACN,OAAM;AAAA,MAAA;AAAA,IAAA,GAEV;AAAA,IACA,gBAAA5mB,EAACyP,IAAA,EAAS,KAAI,uBACZ,UAAA,gBAAAzP;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,MAAK;AAAA,QACL,MAAM,SAAS2mB,EAAI,MAAM,KAAK;AAAA,QAC9B,SAASA,EAAI,MAAM,WAAW;AAAA,QAC9B,UAAU,MAAMA,EAAI,SAAS,EAAE,GAAGA,EAAI,OAAO,QAAQ,GAAG;AAAA,QACxD,QAAM;AAAA,QACN,OAAM;AAAA,MAAA;AAAA,IAAA,EACR,CACF;AAAA,EAAA,GACF;AAGJ,QAAM0U,IACJ1U,EAAI,SAASnN,EAAW,iBACtB,gBAAAzZ,EAAC,QAAA,EAAK,WAAU,aAAa,YAAO,QAAO,IAE3C,gBAAAA,EAAC,QAAA,EAAK,WAAU,yBAAwB,GAEtCu7B,IACJ3U,EAAI,cAAc,uBACf,OAAA,EAAI,WAAU,UAAU,UAAA0U,EAAA,CAAY,IAErC,gBAAAt7B;AAAA,IAACsxB;AAAA,IAAA;AAAA,MACC,KAAA1K;AAAA,MACA,QAAQA,EAAI;AAAA,MACZ,UAAUA,EAAI;AAAA,IAAA;AAAA,EAAA;AAIpB,SACE,gBAAA7lB,EAACd,EAAK,OAAL,EACE,UAAA;AAAA,IAAAysB,GAAY9F,CAAG;AAAA,IAChB,gBAAA5mB,EAAC,SAAI,OAAO,EAAE,eAAe,SAC3B,UAAA,gBAAAe,EAAC,OAAA,EAAI,WAAAjB,GACF,UAAA;AAAA,MAAAy7B;AAAA,MACAF;AAAA,MACAzU,EAAI,cACH,gBAAA5mB,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,IAAA,GACpB,UAAA,gBAAAA,EAACyP,IAAA,EAAS,KAAI,UACZ,UAAA,gBAAAzP;AAAA,QAACiB;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAAQ;AAAA,UACR,SAAS,MAAM2lB,EAAI,SAAS,EAAE;AAAA,UAC9B,UAAU,CAACA,EAAI;AAAA,UAEd,UAAAlY,EAAO;AAAA,QAAA;AAAA,MAAA,GAEZ,EAAA,CACF;AAAA,IAAA,EAAA,CAEJ,EAAA,CACF;AAAA,EAAA,GACF;AAEJ,GAEM8sB,KAAW,MACf,gBAAAx7B,EAACC,EAAK,OAAL,EAAW,WAAU,cACpB,UAAA,gBAAAD,EAACC,EAAK,SAAL,EAAa,MAAK,QAAO,WAAU,SAAQ,UAAQ,IAAC,GACvD,GAGIw7B,KAAkB,CAAC7U,MACvB,gBAAA5mB;AAAA,EAAC05B;AAAA,EAAA;AAAA,IACC,OAAO9S,EAAI;AAAA,IACX,QAAQA,EAAI;AAAA,IACZ,UAAUA,EAAI;AAAA,IACd,YAAYA,EAAI;AAAA,EAAA;AAClB,GAGI8U,KAA0B,CAAC9U,MAAQ;AACvC,QAAM,EAAE,OAAOgG,GAAM,UAAAL,GAAU,aAAAoP,GAAa,UAAAnK,MAAa5K,GACnDgV,IAAkBxlB;AAAA,IACtB,CAAC8B,GAAO2W,MAAO;AACb,MAAA8M,EAAYzjB,GAAO2W,GAAIjC,CAAI;AAAA,IAC7B;AAAA,IACA,CAAC+O,GAAa/O,CAAI;AAAA,EAAA,GAEdH,IAAMwB,GAAS1B,CAAQ,GACvBsP,IAAOjP,GAAM,YAAY,IAAI,CAAC1jB,MAC9BA,EAAE,SAASuQ,EAAW,UAEtB,gBAAAzZ,EAACgB,GAAW,MAAX,EAAwC,YAAE,MAAA,GAArB,UAAUkI,EAAE,EAAE,EAAa,IAGjDA,EAAE,SAASuQ,EAAW,mBAEtB,gBAAA1Y,EAAC8D,GAAM,UAAN,EACC,UAAA;AAAA,IAAA,gBAAA7E;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,MAAK;AAAA,QACL,MAAMiJ,EAAE;AAAA,QACR,OAAOA,EAAE;AAAA,QACT,WAAW,MAAMtF,GAAU4tB,GAAU,EAAK,CAAC;AAAA,QAC3C,UAAU,CAACjE,MAAMqO,EAAgBrO,GAAGrkB,EAAE,IAAI0jB,CAAI;AAAA,QAC9C,KAAK;AAAA,QACL,UAAA4E;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAxxB;AAAA,MAACiB;AAAA,MAAA;AAAA,QACC,SAAS,MAAM26B,EAAgB1yB,GAAGA,EAAE,IAAI0jB,CAAI;AAAA,QAC5C,SAAQ;AAAA,QACR,UAAU4E;AAAA,QAET,UAAA9D,GAAW3B,GAAQ7iB,EAAE,eAAeA,EAAE,YAAY,EAAE,KAAK,KAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EACjE,EAAA,GAhBmB,QAAQA,EAAE,EAAE,EAiBjC,IAKF,gBAAAlJ;AAAA,IAACC,EAAK;AAAA,IAAL;AAAA,MAEC,MAAMiJ,EAAE;AAAA,MACR,MAAMA,EAAE;AAAA,MACR,OAAOA,EAAE,SAAS;AAAA,MAClB,WAAW,MAAMtF,GAAU4tB,GAAU,EAAK,CAAC;AAAA,MAC3C,UAAU,CAACjE,MAAMqO,EAAgBrO,GAAGrkB,EAAE,IAAI0jB,CAAI;AAAA,MAC9C,UAAA4E;AAAA,IAAA;AAAA,IANKtoB,EAAE;AAAA,EAAA,CASZ;AACD,2BACGjJ,EAAK,OAAL,EAAW,WAAWwsB,EAAI,CAAC,GACzB,UAAA;AAAA,IAAAC,GAAY9F,CAAG;AAAA,IAChB,gBAAA5mB,EAACgB,MAAY,UAAA66B,EAAA,CAAK;AAAA,EAAA,GACpB;AAEJ,GAEMC,KAAsB,CAAClV,MAAQ;AACnC,QAAM9mB,IAAY8D,GAAUgjB,EAAI,UAAUA,EAAI,UAAU,GAClD6F,IAAMwB,GAASrH,EAAI,QAAQ;AACjC,2BACG3mB,EAAK,OAAL,EAAW,WAAWwsB,EAAI,CAAC,GACzB,UAAA;AAAA,IAAAC,GAAY9F,CAAG;AAAA,IAChB,gBAAA5mB;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,MAAK;AAAA,QACL,OAAO2mB,EAAI;AAAA,QACX,UAAUA,EAAI;AAAA,QACd,WAAA9mB;AAAA,QACA,UAAU8mB,EAAI;AAAA,QACd,UAAUA,EAAI;AAAA,QACd,aAAaA,EAAI;AAAA,QACjB,KAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EACP,GACF;AAEJ,GAEMmV,KAAsB,CAACnV,MAAQ;AACnC,QAAM+H,IAAU/H,EAAI,QAAQ,IAAI,CAAC8Q,OACxB;AAAA,IACL,OAAOA,EAAG;AAAA,IACV,MAAMA,EAAG;AAAA,IACT,OAAOA,EAAG;AAAA,EAAA,EAEb;AACD,MAAI53B,IAAY8D,GAAUgjB,EAAI,UAAUA,EAAI,UAAU;AACtD,EAAA9mB,IAAY,6BAA6BA,CAAS;AAClD,QAAMwC,IAAMqsB,EAAQ,KAAK,CAAC,MAAM,EAAE,UAAU/H,EAAI,KAAK,KAAK,MACpD6F,IAAMwB,GAASrH,EAAI,QAAQ,GAE3BoV,IAAe;AAAA,IACnB,YAAY,CAACtqB,OAAU,EAAE,GAAGA,GAAM,QAAQ;IAC1C,MAAM,CAACA,OAAU,EAAE,GAAGA,GAAM,QAAQ,KAAA;AAAA,EAAK;AAE3C,2BACGzR,EAAK,OAAL,EAAW,WAAWwsB,EAAI,CAAC,GACzB,UAAA;AAAA,IAAAC,GAAY9F,CAAG;AAAA,IAChB,gBAAA5mB,EAAC,QAAA,EAAK,WAAWysB,EAAI,CAAC,GACpB,UAAA,gBAAAzsB;AAAA,MAAC81B;AAAA,MAAA;AAAA,QACC,aAAW;AAAA,QACX,MAAMlP,EAAI;AAAA,QACV,OAAO;AAAA,QACP,SAAA+H;AAAA,QACA,OAAOrsB;AAAA,QACP,UAAUskB,EAAI;AAAA,QACd,WAAA9mB;AAAA,QACA,YAAY8mB,EAAI;AAAA,QAChB,eAAc;AAAA,QACd,kBAAkB,SAAS;AAAA,QAC3B,QAAQ,EAAE,GAAG6H,IAAW,GAAGuN,EAAA;AAAA,MAAa;AAAA,IAAA,EAC1C,CACF;AAAA,EAAA,GACF;AAEJ,GAEMC,KAA6B,CAACrV,MAAQ;AAC1C,QAAM9mB,IAAY8D,GAAUgjB,EAAI,UAAUA,EAAI,UAAU,GAClD6F,IAAMwB,GAASrH,EAAI,QAAQ,GAC3BsV,IAAQ,CAAC,CAACnQ,GAAQnF,EAAI,eAAeA,EAAI,YAAY,EAAE;AAC7D,2BACG3mB,EAAK,OAAL,EAAW,WAAWwsB,EAAI,CAAC,GACzB,UAAA;AAAA,IAAAC,GAAY9F,CAAG;AAAA,IAChB,gBAAA7lB,EAACC,IAAA,EAAW,WAAWyrB,EAAI,CAAC,GAC1B,UAAA;AAAA,MAAA,gBAAAzsB;AAAA,QAACC,EAAK;AAAA,QAAL;AAAA,UACC,MAAK;AAAA,UACL,OACE2mB,EAAI,MAAM,UAAU,UAAaA,EAAI,MAAM,UAAU,OACjDA,EAAI,MAAM,QACV;AAAA,UAEN,UAAUA,EAAI;AAAA,UACd,WAAW,MAAM9mB,CAAS,IAAI2sB,EAAI,CAAC,CAAC;AAAA,UACpC,UAAU7F,EAAI;AAAA,UACd,UAAUA,EAAI;AAAA,UACd,aAAaA,EAAI;AAAA,QAAA;AAAA,MAAA;AAAA,MAEnB,gBAAA5mB;AAAA,QAACiB;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAU2lB,EAAI;AAAA,UACd,SAASA,EAAI;AAAA,UACb,SAAQ;AAAA,UACR,OAAOsV,IAAQ3sB,GAAI,qBAAqB;AAAA,UAEvC,UAAAme,GAAW3B,GAAQnF,EAAI,eAAeA,EAAI,YAAY,EAAE,KAAK,KAAK;AAAA,QAAA;AAAA,MAAA;AAAA,IACrE,EAAA,CACF;AAAA,EAAA,GACF;AAEJ,GAEMuV,KAAqB,CAACvV,MAC1B,gBAAA7lB,EAACd,EAAK,OAAL,EACE,UAAA;AAAA,EAAAysB,GAAY9F,CAAG;AAAA,oBACfiQ,IAAA,EAA4C,KAAAjQ,EAAA,GAA3B,QAAQA,EAAI,MAAM,KAAK,EAAc;AAAA,GACzD,GAGIwV,KAAoB,CAACxV,MAAQ;AACjC,QAAM,CAACiI,CAAE,IAAI/e,EAASwI,IAAM,GACtB,EAAE,OAAOsU,EAAA,IAAShG,GAClByV,IAAUzV,EAAI;AACpB,MAAIgG,GAAM,SAAU,QAAO,gBAAA5sB,EAAC86B,MAAU,KAAAlU,GAAU,OAAOgG,EAAK,aAAa;AAEzE,QAAMH,IAAMwB,GAASrH,EAAI,QAAQ;AAEjC,MAAI9mB,IAAY8D,GAAUgjB,EAAI,UAAUA,EAAI,UAAU,GAClD4K,IAAW5K,EAAI,YAAY;AAC/B,SAAI4K,MACF1xB,IAAY,aAIZ,gBAAAiB,EAACd,EAAK,OAAL,EAAW,WAAW,cAAcwsB,EAAI,CAAC,CAAC,IACxC,UAAA;AAAA,IAAAC,GAAY9F,CAAG;AAAA,IAChB,gBAAA5mB;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,IAAA4uB;AAAA,QACA,MAAK;AAAA,QACL,OAAOwN;AAAA,QACP,UAAUzV,EAAI;AAAA,QACd,WAAW,GAAG9mB,CAAS,IAAI2sB,EAAI,CAAC,CAAC;AAAA,QACjC,UAAA+E;AAAA,QACA,UAAU5K,EAAI;AAAA,QACd,aAAaA,EAAI;AAAA,MAAA;AAAA,IAAA;AAAA,EACnB,GACF;AAEJ,GAEM0V,KAAwB,CAAC1V,MAAQ;AACrC,QAAM,CAACiI,CAAE,IAAI/e,EAASwI,IAAM,GACtBxY,IAAY8D,GAAUgjB,EAAI,UAAUA,EAAI,UAAU,GAClD6F,IAAMwB,GAASrH,EAAI,QAAQ;AACjC,SACE,gBAAA7lB,EAACd,EAAK,OAAL,EAAW,WAAW,cAAcwsB,EAAI,CAAC,CAAC,IACxC,UAAA;AAAA,IAAAC,GAAY9F,CAAG;AAAA,IAChB,gBAAA5mB;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,IAAA4uB;AAAA,QACA,IAAG;AAAA,QACH,OAAOjI,EAAI;AAAA,QACX,UAAUA,EAAI;AAAA,QACd,WAAA9mB;AAAA,QACA,UAAU8mB,EAAI;AAAA,QACd,UAAUA,EAAI;AAAA,QACd,aAAaA,EAAI;AAAA,MAAA;AAAA,IAAA;AAAA,EACnB,GACF;AAEJ,GAEM2V,KAAiB,CAAC3V,MAAQ;AAC9B,QAAM,CAACiI,CAAE,IAAI/e,EAASwI,IAAM,GACtB,EAAE,QAAAnR,MAAWyf,GACbiV,IAAO,CAAA;AACb,GAACjV,EAAI,OAAO,mBAAmB,CAAA,GAAI,IAAI,CAAC1d,MAAM;AAC5C,UAAM,EAAE,OAAArC,GAAO,OAAAT,GAAO,WAAAvD,EAAA,IAAcqG;AACpC,QAAI9C,KAASA,MAAU;AACrB,UAAIA,EAAM,SAAS,IAAIzB,EAAU,aAAa,GAAG,GAAG;AAClD,cAAM63B,IAAMp2B,EAAM,MAAM,IAAIzB,EAAU,aAAa,GAAG;AACtD,YAAI63B,KAAOA,EAAI,WAAW,GAAG;AAC3B,gBAAMC,MAAQt1B,EAAON,CAAK,KAAK,IAAI,UAAU,CAAA,GAAI;AAAA,YAC/C,CAACtC,MAAMA,EAAE,UAAUi4B,EAAI,CAAC,KAAKj4B,EAAE,SAASkV,EAAW;AAAA,UAAA;AAErD,WAAEgjB,KAAOA,EAAI,cAAe,CAAA,GAAI,QAAQ,CAACC,MAAQ;AAC/C,YAAIA,KAAOA,EAAIF,EAAI,CAAC,CAAC,KAAKE,EAAIF,EAAI,CAAC,CAAC,MAAM,OACxCX,EAAK,KAAKa,EAAIF,EAAI,CAAC,CAAC,CAAC,GACrBX,EAAK,KAAKh5B,CAAS;AAAA,UAEvB,CAAC;AAAA,QACH;AAAA,MACF,OAAO;AACL,cAAM2W,MAAOrS,EAAON,CAAK,KAAK,IAAI,UAAU,CAAA,GAAI;AAAA,UAC9C,CAACtC,MAAMA,EAAE,UAAU6B;AAAA,QAAA;AAErB,QAAIoT,KAAMA,EAAG,SAASA,EAAG,UAAU,OACjCqiB,EAAK,KAAKriB,EAAG,KAAK,GAClBqiB,EAAK,KAAKh5B,CAAS;AAAA,MAEvB;AAEF,WAAO;AAAA,EACT,CAAC;AACD,QAAM4pB,IAAMwB,GAASrH,EAAI,QAAQ;AACjC,SACE,gBAAA7lB,EAACd,EAAK,OAAL,EAAW,WAAW,cAAcwsB,EAAI,CAAC,CAAC,IACxC,UAAA;AAAA,IAAAC,GAAY9F,CAAG;AAAA,IAChB,gBAAA5mB;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,IAAA4uB;AAAA,QACA,MAAK;AAAA,QACL,OAAOgN,EAAK,KAAK,EAAE;AAAA,QACnB,WAAW,YAAYpP,EAAI,CAAC,CAAC;AAAA,QAC7B,UAAQ;AAAA,QACR,UAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EACZ,GACF;AAEJ,GAgEMkQ,KAAsB,CAAC/V,MAAQ;AACnC,QAAMgW,IAAehW,EAAI,SAASA,EAAI,MAAM,SAAU,CAAA;AACtD,SAAIA,EAAI,WAAiB,gBAAA5mB,EAAC,SAAI,UAAA,uBAAmB,IAE/C,gBAAAe,EAACd,EAAK,OAAL,EAAW,WAAU,cACnB,UAAA;AAAA,IAAAysB,GAAY9F,CAAG;AAAA,IACdA,EAAI,WAyBF,OAxBF,gBAAA5mB,EAAC,OAAA,EAAI,OAAO,EAAE,eAAe,OAAO,YAAY,MAAA,GAC9C,UAAA,gBAAAA;AAAA,MAAC68B;AAAA,MAAA;AAAA,QACC,IAAG;AAAA,QACH,QAAQ,CAAC3zB,MACP0d,EAAI,SAAS;AAAA,UACX,GAAGA,EAAI;AAAA,UACP,QAAQ;AAAA,UACR,KAAK1d;AAAA,QAAA,CACN;AAAA,QAEH,WAAU;AAAA,QACV,OAAO,EAAE,QAAQ,GAAA;AAAA,QAEjB,UAAA,gBAAAlJ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,cAAc;AAAA,cACd,UAAU;AAAA,cACV,YAAY;AAAA,YAAA;AAAA,YAEf,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,IAAA,GAEJ;AAAA,sBAED8mB,IAAA,EACE,UAAA8V,EAAY,IAAI,CAAClE,wBACfoE,IAAA,EAAmC,WAAU,iBAE5C,UAAA,gBAAA98B,EAACy4B,MAAgB,KAAA7R,GAAU,YAAA8R,EAAA,CAAwB,KAFjCA,EAAW,GAG/B,CACD,EAAA,CACH;AAAA,EAAA,GACF;AAEJ,GAEMqE,KAAY,CAACnW,MAAQ;AACzB,QAAM+H,KAAW/H,EAAI,MAAM,cAAc,IAAI,IAAI,CAAC8Q,MAAO;AACvD,UAAMnZ,IAAQmZ,EAAG,MAAM,MAAM,YAAY;AACzC,WAAO;AAAA,MACL,OAAOA,EAAG;AAAA,MACV,MAAMA,EAAG;AAAA,MACT,OAAOnZ,EAAM,CAAC,MAAM,KAAKA,EAAM,CAAC,IAAIA,EAAM,CAAC;AAAA,IAAA;AAAA,EAE/C,CAAC;AACD,MAAIze,IAAY8D,GAAUgjB,EAAI,UAAUA,EAAI,UAAU;AACtD,EAAA9mB,IAAY,6BAA6BA,CAAS;AAElD,QAAMwC,IAAMqsB,EAAQ,KAAK,CAACpB,MAAMA,EAAE,UAAU3G,EAAI,KAAK,KAAK;AAC1D,SACE,gBAAA7lB,EAACd,EAAK,OAAL,EACE,UAAA;AAAA,IAAAysB,GAAY9F,CAAG;AAAA,IAChB,gBAAA5mB;AAAA,MAAC81B;AAAA,MAAA;AAAA,QACC,oBAAoB,EAAE,UAAU,WAAA;AAAA,QAChC,MAAMlP,EAAI;AAAA,QACV,OAAO;AAAA,QACP,SAAA+H;AAAA,QACA,OAAOrsB;AAAA,QACP,UAAUskB,EAAI;AAAA,QACd,WAAA9mB;AAAA,QACA,UAAU8mB,EAAI;AAAA,QACd,QAAQ6H;AAAA,MAAA;AAAA,IAAA;AAAA,EACV,GACF;AAEJ,GCxlBMuO,KAAgB,CAACpW,MAAQ;AAC7B,QAAM;AAAA,IACJ,OAAOgG;AAAA,IACP,SAAAqQ;AAAA,IACA,UAAA1Q;AAAA,IACA,OAAA1lB;AAAA,IACA,UAAA4tB;AAAA,IACA,aAAAyI;AAAA,IACA,MAAAl3B;AAAA,IACA,OAAA3E;AAAA,IACA,YAAAwwB;AAAA,EAAA,IACEjL;AACJ,MAAI,EAAE,WAAAuW,IAAY,IAAO,SAAAC,IAAU,MAAMxQ;AACzC,EAAAuQ,IAAY16B,GAAO06B,CAAS,GAC5BC,IAAU56B,GAAY46B,CAAO,KAAK;AAElC,QAAMlf,IAASrX,GAAO,UAAU,CAAA;AAChC,MAAIw1B,IAAU,GACVgB,IAAU;AAEd,QAAMC,IAAYC;AAAA,IAAOrf;AAAA,IAAQ,CAACqP,MAChC,CAAC9T,EAAW,WAAWA,EAAW,gBAAgB,EAAE,SAAS8T,EAAE,IAAI;AAAA,EAAA,GAG/DiQ,IAAO,mBACPC,IACJR,KAAWA,EAAQ,MAAMO,CAAI,IACzBP,EAAQ,MAAMO,CAAI,EAAE,KAAK,CAACxiB,GAAGC,MAAMA,EAAE,SAASD,EAAE,MAAM,IACtD,CAAA;AAEN,MAAI0iB,IAAaT,GAAS,QAAQ,SAAS,GAAG;AAa9C,MAXAQ,EAAU,QAAQ,CAACE,MAAO;AACxB,QAAI,CAAC,MAAMA,CAAE,EAAG;AAEhB,UAAMC,IAAWN,EAAU,KAAK,CAACp0B,MAAMA,EAAE,UAAUy0B,CAAE;AACrD,IAAI,OAAOC,IAAa,OAAeA,KAAY,OACjDF,IAAaA,GAAY,QAAQC,GAAI,CAAC,IAEtCD,IAAaA,GAAY,QAAQC,GAAI,WAAWC,EAAS,SAAS,CAAC,CAAC;AAAA,EAExE,CAAC,GAEG53B,MAASyT,EAAW;AACtB,QAAI;AACF,MAAA4iB,IAAUwB,GAASH,CAAU,GAC7BL,IAAW,MAAMhB,CAAO,IAA2C,IAAvC,WAAWA,EAAQ,QAAQe,CAAO,CAAC;AAAA,IACjE,SAASl0B,GAAG;AACV,MAAAm0B,IAAUn0B,EAAE;AAAA,IACd;AAGF,QAAM40B,IACJ,gBAAA99B;AAAA,IAACC,EAAK;AAAA,IAAL;AAAA,MACC,MAAK;AAAA,MACL,OAAOo9B;AAAA,MACP,WAAU;AAAA,MACV,UAAQ;AAAA,MACR,UAAU,CAACxL;AAAA,MACX,UAAU;AAAA,MACV,aAAAqL;AAAA,MACA,KAAK;AAAA,IAAA;AAAA,EAAA,GAIHzQ,IAAMwB,GAAS1B,CAAQ;AAC7B,2BACGtsB,EAAK,OAAL,EAAW,WAAWwsB,EAAI,CAAC,GACzB,UAAA;AAAA,IAAAC,GAAY9F,CAAG;AAAA,IACduW,IAGA,gBAAAp8B,EAACC,MAAW,WAAWyrB,EAAI,CAAC,GACzB,UAAA;AAAA,MAAAqR;AAAA,MACD,gBAAA99B,EAACyP,IAAA,EAAS,KAAI,sBACZ,UAAA,gBAAAzP;AAAA,QAACiB;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,WAAU;AAAA,UACV,SAAS,MAAMwzB,EAAS4I,CAAO;AAAA,UAC/B,UAAU,CAACxL;AAAA,UAEV,UAAAnjB,EAAO;AAAA,QAAA;AAAA,MAAA,GAEZ;AAAA,MACA,gBAAA1O;AAAA,QAACC,EAAK;AAAA,QAAL;AAAA,UACC,MAAK;AAAA,UACL,OAAAoB;AAAA,UACA,UAAAozB;AAAA,UACA,UAAU;AAAA,UACV,aAAAyI;AAAA,UACA,KAAK;AAAA,UACL,UAAU,CAACrL;AAAA,QAAA;AAAA,MAAA;AAAA,IACb,EAAA,CACF,IAvBAiM;AAAA,EAuBA,GAEJ;AAEJ,GC1GMC,KAAS,oBACTC,KAAS,YACTC,KAAS,mBAETC,KAAS;AAEf,MAAMC,GAAW;AAAA,EACf,OAAO5V,KAAQ,OAAO6V,GAAWpW,GAAUR,IAAS,OAAOzU,IAAS,SAAS;AAC3E,UAAMyV,IAAe,GAAG4V,CAAS,IAAIpW,CAAQ,IACvChgB,IAAOwf,MAAW,QAAQ,OAAOzU,GACjCsrB,IAAc7W,MAAW,QAAQzU,KAAU,CAAA,IAAK,CAAA;AAEtD,WAAO2jB,GAAY,KAAKlO,GAAchB,GAAQxf,GAAMq2B,CAAW;AAAA,EACjE;AAAA,EAEA,OAAO,iBAAiB,CAACtrB,IAAS,OAChCorB,GAAW5V,GAAMwV,IAAQ,wBAAwB,OAAOhrB,CAAM;AAAA,EAEhE,OAAO,YAAY,CAAC,EAAE,MAAA/M,GAAM,IAAA6oB,EAAA,IAAO,CAAA,MACjCsP,GAAW5V,GAAMwV,IAAQ,GAAG/3B,CAAI,mBAAmB,OAAO,EAAE,IAAA6oB,GAAI;AAAA,EAElE,OAAO,sBAAsB,CAAC7mB,MAC5Bm2B,GAAW5V,GAAMwV,IAAQ,yBAAyB,QAAQ/1B,CAAI;AAAA,EAEhE,OAAO,iBAAiB,CAACA,MACvBm2B,GAAW5V,GAAMwV,IAAQ,mBAAmB,QAAQ/1B,CAAI;AAAA,EAE1D,OAAO,cAAc,CAAC+K,IAAS,OAC7BorB,GAAW5V,GAAMwV,IAAQ,2BAA2B,OAAOhrB,CAAM;AAAA,EAEnE,OAAO,cAAc,CAACA,IAAS,OAC7BorB,GAAW5V,GAAMyV,IAAQ,2BAA2B,OAAOjrB,CAAM;AAAA,EAEnE,OAAO,cAAc,CAACA,IAAS,OAC7BorB,GAAW5V,GAAM0V,IAAQ,mBAAmB,OAAOlrB,CAAM;AAAA,EAE3D,OAAO,kBAAkB,CAACA,IAAS,OACjCorB,GAAW5V,GAAM2V,IAAQ,eAAe,QAAQnrB,CAAM;AAAA,EAExD,OAAO,aAAa,CAACA,IAAS,OAC5BorB,GAAW5V,GAAM2V,IAAQ,SAAS,OAAOnrB,CAAM;AAAA,EAEjD,OAAO,iBAAiB,CAACA,IAAS,OAChCorB,GAAW5V,GAAMwV,IAAQ,mBAAmB,QAAQhrB,CAAM;AAAA,EAE5D,OAAO,WAAW,CAACA,IAAS,OAC1BorB,GAAW5V,GAAMwV,IAAQ,kBAAkB,OAAOhrB,CAAM;AAAA,EAE1D,OAAO,gBAAgB,CAACA,IAAS,OAC/BorB,GAAW5V,GAAMwV,IAAQ,wBAAwB,OAAOhrB,CAAM;AAAA,EAEhE,OAAO,mBAAmB,CAACA,IAAS,OAAO;AACzC,UAAM,EAAE,MAAA5N,GAAM,aAAAm5B,GAAa,gBAAAC,GAAgB,OAAAC,MAAUzrB;AAErD,WAAIwrB,EAAe,MAAM,aAChBJ,GAAW,SAAS;AAAA,MACzB,MAAAh5B;AAAA,MACA,aAAAm5B;AAAA,MACA,UAAUC,EAAe,MAAM;AAAA,MAC/B,OAAAC;AAAA,IAAA,CACD,IAEML,GAAW,cAAc;AAAA,MAC9B,MAAAh5B;AAAA,MACA,aAAAm5B;AAAA,MACA,YAAYC,EAAe,MAAM;AAAA,MACjC,OAAAC;AAAA,IAAA,CACD;AAAA,EAEL;AACF;ACvDA,MAAMzP,KAAgB,OAAO,OAAOpqB,EAAU,aAAa,GAMrD85B,KAAqB,CAAC,EAAE,MAAAt2B,GAAM,QAAAu2B,GAAQ,UAAA1tB,QAAe;AACzD,QAAM,CAAC2tB,GAAUC,CAAW,IAAI9uB,EAAS,CAAA,CAAE,GACrC,CAAC+uB,GAAkBC,CAAmB,IAAIhvB,EAAS,CAAA,CAAE,GACrD,CAACkjB,GAAS+L,CAAU,IAAIjvB,EAAS,EAAK,GACtC,CAACkvB,GAAiBC,CAAkB,IAAInvB,EAAS,IAAI,GACrD,CAAC3K,GAAM+5B,CAAO,IAAIpvB,EAAS,EAAE,GAC7B,CAACqvB,GAAkBC,CAAmB,IAAItvB,EAAS,EAAE,GACrD,CAAC0uB,GAAOa,CAAQ,IAAIvvB,EAAS,EAAE,GAC/B,CAACwvB,GAAQC,CAAS,IAAIzvB,EAAS,CAAA,CAAE,GACjCgG,IAAUrV,GAAA;AAGhB,EAAA8V,GAAU,MAAM;AACd,IAAIpO,KACFq3B,EAAA;AAAA,EAEJ,GAAG,CAACr3B,CAAI,CAAC;AAET,QAAMq3B,IAAgB,YAAY;AAChC,IAAAT,EAAW,EAAI;AACf,QAAI;AACF,YAAM3W,IAAM,MAAM+V,GAAW,YAAY,EAAE,WAAW,IAAM;AAC5D,UAAI/V,EAAI,QAAQ,WAAW;AACzB,cAAMqX,IAAY19B;AAAAA,WACfqmB,EAAI,SAAS,MAAM,SAAS,CAAA,GAAI;AAAA,YAC/B,CAACsX,MAAOA,EAAG,cAAc3Q,GAAc,SAAS2Q,EAAG,IAAI;AAAA,UAAA;AAAA,UAEzD;AAAA,QAAA;AAEF,QAAAd,EAAYa,CAAS;AAAA,MACvB;AACE,gBAAQ,MAAM,6BAA6BrX,EAAI,KAAK,GACpDwW,EAAY,CAAA,CAAE;AAAA,IAElB,SAAS9W,GAAO;AACd,cAAQ,MAAM,4BAA4BA,CAAK,GAC/C8W,EAAY,CAAA,CAAE;AAAA,IAChB,UAAA;AACE,MAAAG,EAAW,EAAK;AAAA,IAClB;AAAA,EACF,GAGMY,IAAiBptB,GAAQ,MACtBosB,EAAS,IAAI,CAACz4B,OAAW;AAAA,IAC9B,OAAOA,EAAM;AAAA,IACb,OAAOA,EAAM;AAAA,IACb,OAAAA;AAAA,EAAA,EACA,GACD,CAACy4B,CAAQ,CAAC,GAGPiB,IAAexpB,GAAY,YAAY;AAC3C,UAAMypB,IAAY,CAAA;AA6BlB,QA1BKb,MACHa,EAAU,UAAU,kCAGlBV,EAAiB,UAAUA,EAAiB,KAAA,EAAO,SAAS,MAC9DU,EAAU,aAAa,8CAGrB16B,EAAK,UAAUA,EAAK,KAAA,EAAO,SAAS,MACtC06B,EAAU,OAAO,uCAIfb,GAAiB,UAAU,kBACxB75B,EAAK,WACR06B,EAAU,OAAO,yCAIf,CAAC16B,EAAK,KAAA,KAAU,CAACg6B,EAAiB,WACpCU,EAAU,SAAS,oDAIvBN,EAAUM,CAAS,GAEf,SAAO,KAAKA,CAAS,EAAE,SAAS;AAIpC,UAAI;AACF,cAAMzX,IAAM,MAAM+V,GAAW,iBAAiB;AAAA,UAC5C,MAAAh5B;AAAA,UACA,aAAag6B;AAAA,UACb,gBAAgBH;AAAA,UAChB,OAAO;AAAA,QAAA,CACR;AACD,QAAI5W,EAAI,QAAQ,YACd0W,EAAoB1W,EAAI,SAAS,MAAM,YAAY,CAAA,CAAE,KAErD,QAAQ,MAAM,8BAA8BA,EAAI,KAAK,GACrD0W,EAAoB,CAAA,CAAE;AAAA,MAE1B,SAAShX,GAAO;AACd,gBAAQ,MAAM,6BAA6BA,CAAK,GAChDgX,EAAoB,CAAA,CAAE;AAAA,MACxB;AAAA,EACF,GAAG,CAACE,GAAiBG,GAAkBh6B,GAAMw5B,CAAQ,CAAC,GAGhDmB,IAAc,MAAM;AACxB,IAAAb,EAAmB,IAAI,GACvBG,EAAoB,EAAE,GACtBF,EAAQ,EAAE,GACVJ,EAAoB,CAAA,CAAE,GACtBS,EAAU,CAAA,CAAE;AAAA,EACd,GAGMQ,IAAkB3pB;AAAA,IACtB,CAACrD,MAAW;AACV,UAAIA,EAAO,KAAK,cAAc;AAC5B,cAAMitB,IAAWjtB,EAAO;AACxB,QAAA/B,EAASgvB,CAAQ,GACjBzrB,EAAA;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAACvD,CAAQ;AAAA,EAAA,GAILuD,IAAc6B,GAAY,MAAM;AACpC,IAAA0pB,EAAA,GACApB,EAAA;AAAA,EACF,GAAG,CAACA,GAAQoB,CAAW,CAAC,GAGlBzqB,IAAa9C;AAAA,IACjB,MAAM;AAAA,MACJ;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,UAAU;AAAA,QACV,MAAM;AAAA,MAAA;AAAA,MAER;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,UAAU;AAAA,QACV,MAAM;AAAA,MAAA;AAAA,MAER;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,UAAU;AAAA,QACV,MAAM;AAAA,MAAA;AAAA,MAER;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO;AAAA,QACP,cAAc,CAACQ,MAEX,gBAAA/S;AAAA,UAACiB;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,SAAS,MAAM;AACb,cAAA+P,EAAS+B,EAAO,IAAI,GACpBwB,EAAA;AAAA,YACF;AAAA,YACD,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAIL;AAAA,IACF;AAAA,IAEF,CAACvD,GAAUuD,CAAW;AAAA,EAAA,GAGlBY,IAAgB5C;AAAA,IACpB,OAAO;AAAA,MACL,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,WAAW;AAAA,IAAA;AAAA,IAEb,CAAA;AAAA,EAAC;AAGH,SACEpK,KACE,gBAAAnI,EAAAqJ,GAAA,EACE,UAAA,gBAAArJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO;AAAA,QACL,QAAQ;AAAA;AAAA,MAAA;AAAA,MAGV,UAAA,gBAAAe;AAAA,QAACuI;AAAA,QAAA;AAAA,UACC,MAAAnB;AAAA,UACA,QAAQoM;AAAA,UACR,MAAK;AAAA,UACL,UAAQ;AAAA,UACR,UAAS;AAAA,UACT,cAAc;AAAA,UAEd,UAAA;AAAA,YAAA,gBAAAvU,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,4BAACA,EAAM,OAAN,EAAY,UAAA,eAAA,CAAY,EAAA,CAC3B;AAAA,YACA,gBAAAvI,EAACuI,EAAM,MAAN,EACE,UAAA;AAAA,cAAA,OAAO,KAAKg2B,CAAM,EAAE,SAAS,uBAC3BW,IAAA,EAAM,SAAQ,UAAS,WAAU,QAC/B,UAAA;AAAA,gBAAAX,EAAO,WAAW,gBAAAt/B,EAAC,OAAA,EAAK,UAAAs/B,EAAO,SAAQ;AAAA,gBACvCA,EAAO,UAAU,gBAAAt/B,EAAC,OAAA,EAAK,YAAO,QAAO;AAAA,gBACrCs/B,EAAO,cAAc,gBAAAt/B,EAAC,OAAA,EAAK,YAAO,YAAW;AAAA,gBAC7Cs/B,EAAO,QAAQ,gBAAAt/B,EAAC,OAAA,EAAK,YAAO,KAAA,CAAK;AAAA,cAAA,GACpC;AAAA,cAGF,gBAAAe,EAAC2iB,IAAA,EAAI,WAAU,wBACb,UAAA;AAAA,gBAAA,gBAAA1jB,EAAC2jB,MAAI,IAAI,GACP,UAAA,gBAAA5iB,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,kBAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,UAAA,UAAA,CAAO;AAAA,kBACnB,gBAAAD;AAAA,oBAAC81B;AAAA,oBAAA;AAAA,sBACC,QAAQrH;AAAA,sBACR,aAAW;AAAA,sBACX,SAASkR;AAAA,sBACT,OAAOX;AAAA,sBACP,UAAUC;AAAA,sBACV,aAAY;AAAA,sBACZ,kBAAkB,SAAS;AAAA,sBAC3B,cAAa;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACf,EAAA,CACF,EAAA,CACF;AAAA,kCACCtb,IAAA,EAAI,IAAI,GACP,UAAA,gBAAA5iB,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,kBAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,UAAA,OAAA,CAAI;AAAA,kBAChB,gBAAAD;AAAA,oBAACC,EAAK;AAAA,oBAAL;AAAA,sBACC,MAAK;AAAA,sBACL,MAAK;AAAA,sBACL,aAAY;AAAA,sBACZ,OAAOkF;AAAA,sBACP,UAAU,CAAC+D,MAAMg2B,EAAQh2B,EAAE,OAAO,KAAK;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACzC,EAAA,CACF,EAAA,CACF;AAAA,kCACCya,IAAA,EAAI,IAAI,GACP,UAAA,gBAAA5iB,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,kBAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,UAAA,cAAA,CAAW;AAAA,kBACvB,gBAAAD;AAAA,oBAACC,EAAK;AAAA,oBAAL;AAAA,sBACC,MAAK;AAAA,sBACL,MAAK;AAAA,sBACL,aAAY;AAAA,sBACZ,OAAOk/B;AAAA,sBACP,UAAU,CAACj2B,MAAMk2B,EAAoBl2B,EAAE,OAAO,KAAK;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACrD,EAAA,CACF,EAAA,CACF;AAAA,kCACCya,IAAA,EAAI,IAAI,GACP,UAAA,gBAAA5iB,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,kBAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,UAAA,UAAA,CAAO;AAAA,kBACnB,gBAAAD;AAAA,oBAACC,EAAK;AAAA,oBAAL;AAAA,sBACC,UAAQ;AAAA,sBACR,MAAK;AAAA,sBACL,MAAK;AAAA,sBACL,aAAY;AAAA,sBACZ,OAAOu+B;AAAA,sBACP,UAAU,CAACt1B,MAAMm2B,EAASn2B,EAAE,OAAO,KAAK;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAC1C,EAAA,CACF,EAAA,CACF;AAAA,kCACCya,IAAA,EAAI,IAAI,GACP,UAAA,gBAAA5iB,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,kBAAA,gBAAAD;AAAA,oBAACiB;AAAA,oBAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,SAAS2+B;AAAA,sBACT,WAAU;AAAA,sBACV,MAAK;AAAA,sBACN,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGD,gBAAA5/B,EAACiB,KAAO,SAAQ,aAAY,SAAS6+B,GAAa,MAAK,MAAK,UAAA,QAAA,CAE5D;AAAA,gBAAA,EAAA,CACF,EAAA,CACF;AAAA,cAAA,GACF;AAAA,cAGA,gBAAA9/B;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAW2E,EAAU,WAAW,OAAO;AAAA,kBACvC,OAAO,EAAE,QAAQ,SAAS,OAAO,QAAQ,UAAU,OAAA;AAAA,kBAEnD,UAAA,gBAAA3E;AAAA,oBAAC2W;AAAA,oBAAA;AAAA,sBACC,KAAKb;AAAA,sBACL,SAAS+oB;AAAA,sBACT,YAAAxpB;AAAA,sBACA,eAAAF;AAAA,sBACA,SAAA6d;AAAA,sBACA,cAAc;AAAA,wBACZ,MAAM;AAAA,wBACN,YAAY;AAAA,wBACZ,sBAAsB;AAAA,sBAAA;AAAA,sBAExB,cAAc+M;AAAA,sBACd,kBAAkB;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACpB;AAAA,cAAA;AAAA,YACF,GACF;AAAA,YACA,gBAAA//B,EAACsJ,EAAM,QAAN,EAAa,WAAU,yBACtB,UAAA,gBAAAtJ,EAACiB,GAAA,EAAO,SAAQ,aAAY,SAASsT,GAAa,mBAElD,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA,GAEJ;AAGN;AAEAkqB,GAAmB,YAAY;AAAA,EAC7B,MAAMv+B,EAAU,KAAK;AAAA,EACrB,QAAQA,EAAU,KAAK;AAAA,EACvB,UAAUA,EAAU,KAAK;AAC3B;ACjVA,MAAMggC,KAAsB,CAAC,EAAE,UAAAlvB,GAAU,OAAAuN,GAAO,SAAAjB,GAAS,MAAAhK,GAAM,WAAAxT,GAAW,UAAA4T,QAAe;AACvF,QAAM,CAACysB,GAAWC,CAAY,IAAItwB,EAAS,EAAK;AAOhD,SACE,gBAAA/O,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ;AAAA,MAACiB;AAAA,MAAA;AAAA,QACC,SAAAqc;AAAA,QACA,MAAAhK;AAAA,QACA,WAAAxT;AAAA,QACA,UAAA4T;AAAA,QACA,SAAS,MAAM0sB,EAAa,EAAI;AAAA,QAE/B,UAAA7hB;AAAA,MAAA;AAAA,IAAA;AAAA,IAEH,gBAAAve;AAAA,MAACy+B;AAAA,MAAA;AAAA,QACC,MAAM0B;AAAA,QACN,QAAQ,MAAMC,EAAa,EAAK;AAAA,QAChC,UAnBe,CAAC//B,MAAY;AAChC,UAAA2Q,EAAS3Q,CAAO,GAChB+/B,EAAa,EAAK;AAAA,QACpB;AAAA,MAgBgB;AAAA,IAAA;AAAA,EACZ,GACF;AAEJ;AAEAF,GAAoB,YAAY;AAAA,EAC9B,UAAUhgC,EAAU,KAAK;AAAA,EACzB,OAAOA,EAAU;AAAA,EACjB,SAASA,EAAU;AAAA,EACnB,MAAMA,EAAU;AAAA,EAChB,WAAWA,EAAU;AAAA,EACrB,UAAUA,EAAU;AACtB;AAEAggC,GAAoB,eAAe;AAAA,EACjC,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AACZ;AC3CA,MAAMG,uBACHp/B,GAAA,EAAO,SAAQ,WAAU,MAAK,OAAM,UAAQ,IAAC,UAAA,eAAA,CAE9C;AAGF,SAASq/B,GAAY;AAAA,EACnB,MAAA3G;AAAA,EACA,OAAAE;AAAA,EACA,UAAAxI;AAAA,EACA,SAAAuI;AAAA,EACA,SAAA2G;AAAA,EACA,QAAA5P;AAAA,EACA,UAAA8D;AAAA,EACA,YAAA5C;AACF,GAAG;AACD,MAAI,CAAC8H,EAAM,QAAO,gBAAA35B,EAAC,QAAA,CAAA,CAAK;AACxB,QAAM,CAAA,EAAGwgC,CAAK,KAAK3G,KAAS,IAAI,MAAMl1B,EAAU,aAAa;AAC7D,SACE,gBAAA5D,EAAC,QAAA,EAAK,WAAU,mCACd,UAAA;AAAA,IAAA,gBAAAA,EAAC,KAAA,EAAE,MAAK,QAAO,SAAS,MAAM4vB,EAAO4P,GAAS5G,CAAI,GAAG,WAAU,WAC7D,UAAA;AAAA,MAAA,gBAAA35B,EAAC,KAAA,EAAE,WAAWqxB,EAAA,CAAU;AAAA,MAAG;AAAA,MAC3B,gBAAArxB,EAAC,QAAA,EAAK,WAAU,0BAA0B,eAAWwgC,GAAM;AAAA,MAAQ;AAAA,MAClE9xB,EAAO;AAAA,IAAA,GACV;AAAA,IACA,gBAAA1O;AAAA,MAACiB;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,SAAS,MAAMwzB,EAAS,EAAE;AAAA,QAC1B,UAAU,CAAC5C;AAAA,QAEV,UAAAnjB,EAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EACV,GACF;AAEJ;AAEA4xB,GAAY,YAAY;AAAA,EACtB,MAAMpgC,EAAU;AAAA,EAChB,OAAOA,EAAU;AAAA,EACjB,UAAUA,EAAU;AAAA,EACpB,SAASA,EAAU;AAAA,EACnB,SAASA,EAAU;AAAA,EACnB,QAAQA,EAAU,KAAK;AAAA,EACvB,UAAUA,EAAU,KAAK;AAAA,EACzB,YAAYA,EAAU;AACxB;AAEAogC,GAAY,eAAe;AAAA,EACzB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,EACT,YAAY;AACd;AAEA,SAASG,GAAc37B,GAAO;AAC5B,QAAM,EAAE,UAAA2vB,GAAU,YAAA5C,GAAY,WAAA6O,GAAW,QAAA/P,GAAQ,OAAAtvB,MAAUyD,GACrD;AAAA,IACJ,OAAO60B;AAAA,IACP,UAAUC;AAAA,IACV,UAAU2G;AAAA,IACV,WAAWlP;AAAA,IACX,QAAQwI;AAAA,EAAA,IACNx4B,KAAS,CAAA,GAEPs/B,IAAsB,CAACtgC,MAAY;AACvC,QAAI,CAACA,KAAW,CAACA,EAAQ,GAAI;AAC7B,UAAMy2B,IAAW;AAAA,MACf,OAAOz2B,EAAQ;AAAA,MACf,SAASsE,EAAU,cAAc;AAAA,MACjC,WAAWtE,EAAQ,cAAc;AAAA,MACjC,UAAUA,EAAQ;AAAA,MAClB,UAAUA,EAAQ;AAAA,MAClB,SAASA,EAAQ,QAAQ;AAAA,MACzB,QAAQ,GAAGA,EAAQ,WAAW,GAAGsE,EAAU,aAAa,GAAGtE,EAAQ,IAAI;AAAA,IAAA;AAEzE,IAAAo0B,EAASqC,CAAQ;AAAA,EACnB;AAEA,SAAI4J,IAEA,gBAAA3/B,EAACd,EAAK,OAAL,EACE,UAAA;AAAA,IAAAysB,GAAY5nB,CAAK;AAAA,IAClB,gBAAA9E,EAAC,SAAK,UAAAqgC,GAAA,CAAa;AAAA,EAAA,GACrB,IAKF,gBAAAt/B,EAACd,EAAK,OAAL,EACE,UAAA;AAAA,IAAAysB,GAAY5nB,CAAK;AAAA,IAClB,gBAAA9E,EAAC,SACE,UAAA25B,IACC,gBAAA35B;AAAA,MAACsgC;AAAA,MAAA;AAAA,QACC,MAAA3G;AAAA,QACA,OAAAE;AAAA,QACA,UAAAxI;AAAA,QACA,SAAAuI;AAAA,QACA,SAAA2G;AAAA,QACA,QAAA5P;AAAA,QACA,UAAA8D;AAAA,QACA,YAAA5C;AAAA,MAAA;AAAA,IAAA,IAGF,gBAAA7xB,EAACkgC,IAAA,EAAoB,UAAUS,GAAqB,EAAA,CAExD;AAAA,EAAA,GACF;AAEJ;AAEAF,GAAc,OAAOzO,GAAM;AAE3B,MAAA4O,KAAexO,GAASqO,EAAa;ACvHrC,SAASI,GAAS/7B,GAAO;AACvB,QAAM,EAAE,aAAAmD,MAAgBnD;AACxB,SAAImD,MAAgBtD,EAAU,cAAc,UACnC,gBAAA3E,EAACygC,IAAA,EAAe,GAAG37B,EAAA,CAAO,IAE5B,gBAAA9E,EAACo7B,IAAA,EAAmB,GAAGt2B,EAAA,CAAO;AACvC;AAEA+7B,GAAS,YAAY;AAAA,EACnB,aAAa3gC,EAAU,OAAO;AAChC;ACVA,MAAM4gC,KAAqB,CAACla,MAAQ;AAClC,QAAM;AAAA,IACJ,OAAAxgB;AAAA,IACA,OAAOwmB;AAAA,IACP,SAAA+B;AAAA,IACA,UAAA8F;AAAA,IACA,YAAA3wB;AAAA,IACA,YAAA+tB;AAAA,IACA,UAAAtF;AAAA,IACA,UAAAiF;AAAA,EAAA,IACE5K,GACE6F,IAAMwB,GAAS1B,CAAQ,GACvBwU,IAAapS,EAAQ,IAAI,CAAC+I,OACvB;AAAA,IACL,OAAOA,EAAG;AAAA,IACV,MAAMA,EAAG;AAAA,IACT,OAAOA,EAAG;AAAA,EAAA,EAEb;AACD,MAAI53B,IAAY+xB,IACZ,uCACA;AACJ,EAAA/xB,IACEgE,KAAc+tB,IAAa,uCAAuC/xB;AACpE,QAAMkhC,KAAgBpU,GAAM,cAAc,CAAA,GACvC,IAAI,CAACqU,MAAO;AACX,UAAMvJ,IAAKqJ,EAAW,KAAK,CAACxT,MAAMA,EAAE,UAAU0T,EAAG,KAAK;AACtD,WAAIvJ,KAGG;AAAA,EACT,CAAC,EACA,OAAO,OAAO;AACjB,2BACGz3B,EAAK,OAAL,EAAW,WAAWwsB,EAAI,CAAC,GACzB,UAAA;AAAA,IAAAC,GAAY9F,CAAG;AAAA,IAChB,gBAAA5mB,EAAC,QAAA,EAAK,WAAWysB,EAAI,CAAC,GACpB,UAAA,gBAAAzsB;AAAA,MAAC81B;AAAA,MAAA;AAAA,QACC,WAAAh2B;AAAA,QACA,aAAW;AAAA,QACX,SAAO;AAAA,QACP,YAAY0xB;AAAA,QACZ,eAAc;AAAA,QACd,kBAAkB,SAAS;AAAA,QAC3B,MAAMprB;AAAA,QACN,SAAS26B;AAAA,QACT,UAAAtM;AAAA,QACA,QAAQhG;AAAA,QACR,OAAOuS;AAAA,MAAA;AAAA,IAAA,EACT,CACF;AAAA,EAAA,GACF;AAEJ,GC3DME,KAAY,UACZC,KAAW;AAAA,EACf,GAAG,EAAE,OAAO,QAAQ,IAAI,EAAA;AAAA,EACxB,GAAG,EAAE,OAAO,OAAc;AAAA,EAC1B,GAAG,EAAE,OAAO,QAAe;AAC7B,GAEMC,KAAc,CAAC//B,MACZ,OAAOA,KAAU,YAAYA,MAAU,QAAQ,MAAM,QAAQA,CAAK,GAGrEggC,KAAgB,CAACC,MAEnB,OAAOA,KAAU,YACjBA,MAAU,QACV,CAAC,MAAM,QAAQA,CAAK,KACpB,OAAO,KAAKA,CAAK,EAAE,WAAW,GAI5BC,KAAU,CAACC,MACXJ,GAAYI,CAAW,KACvBH,GAAcG,CAAW,KACzB,EAAEN,MAAaM,KAAqBL,GAAS,EAAE,QAC/CK,EAAYN,EAAS,MAAM,MAAQM,GAAa,QAAQL,GAAS,EAAE,KAC9DA,GAAS,EAAE,QAEbA,GAAS,EAAE,OCSdM,KAAU,CAACr7B,GAAOs7B,MAClBH,GAAQn7B,CAAK,MAAM+6B,GAAS,EAAE,QACzB,KAEFO,GAGHC,KAAgB,CAAC/a,MAAQ;AAC7B,QAAMgb,IAAa,EAAE,GAAGhb,GAAK,UAAU,CAAA,GAAI,UAAU6a,GAAQ7a,EAAI,OAAOA,EAAI,QAAQ,GAAG,YAAY,CAAC6a,GAAQ7a,EAAI,OAAO,CAACA,EAAI,UAAU,EAAA;AACtI,MAAI,CAACib,GAAUC,CAAM,IAAIF,EAAW,KAAK,MAAM,GAAG;AAGlD,UAFIhb,EAAI,YAAYib,MAAapoB,EAAW,eAAmBA,EAAW,SAElEooB,GAAA;AAAA,IACN,KAAKpoB,EAAW;AACd,aAAOuhB,GAAsB4G,CAAU;AAAA,IACzC,KAAKnoB,EAAW;AACd,aAAOwhB,GAAkB2G,CAAU;AAAA;AAAA;AAAA,IAGrC,KAAKnoB,EAAW;AACd,aAAOujB,GAAc4E,CAAU;AAAA,IACjC,KAAKnoB,EAAW;AACd,aAAOsiB,GAAoB6F,CAAU;AAAA,IACvC,KAAKnoB,EAAW;AACd,aAAOqnB,GAAmBc,CAAU;AAAA,IACtC,KAAKnoB,EAAW;AACd,aAAAmoB,EAAW,WAAW,CAAC,GAAGA,EAAW,UAAUE,CAAM,GAG9CjB,GAASe,CAAU;AAAA,IAC5B,KAAKnoB,EAAW;AACd,aAAOqiB,GAAoB8F,CAAU;AAAA,IACvC,KAAKnoB,EAAW;AACd,aAAOwiB,GAA2B2F,CAAU;AAAA,IAC9C,KAAKnoB,EAAW;AACd,aAAOiiB,GAAwBkG,CAAU;AAAA,IAC3C,KAAKnoB,EAAW;AACd,aAAO6iB,GAAsBsF,CAAU;AAAA,IACzC,KAAKnoB,EAAW;AACd,aAAOkjB,GAAoBiF,CAAU;AAAA,IACvC,KAAKnoB,EAAW;AACd,aAAO+hB,GAAA;AAAA,IACT,KAAK/hB,EAAW;AACd,aAAOgiB,GAAgBmG,CAAU;AAAA,IACnC,KAAKnoB,EAAW;AACd,aAAO0iB,GAAmByF,CAAU;AAAA,IACtC,KAAKnoB,EAAW;AACd,aAAO8iB,GAAeqF,CAAU;AAAA,IAClC,KAAKnoB,EAAW;AACd,aAAOsjB,GAAU6E,CAAU;AAAA,IAC7B;AACE,aAAOxF,GAAkBwF,CAAU;AAAA,EAAA;AAEzC,GC7EMG,KAAc;AAAA,EAClB,QAAQj9B,GAAO;AACb,WAAO,CAACA,EAAM,MAAM;AAAA,EACtB;AAAA,EACA,UAAUA,GAAO;AACf,WAAOA;AAAA,EACT;AACF,GAEMk9B,KAAW,CAACl9B,MAAU;AAC1B,QAAM;AAAA,IACJ,MAAAkB;AAAA,IACA,OAAAa;AAAA,IACA,OAAAT;AAAA,IACA,YAAA2Z;AAAA,IACA,IAAA8O;AAAA,IACA,cAAAyL;AAAA,IACA,cAAA2H;AAAA;AAAA,IAEA,OAAAC;AAAA,IACA,UAAAx+B;AAAA,IACA,SAAAy+B;AAAA,EAAA,IACEr9B,GAEE,CAAC,EAAE,kBAAAmb,EAAA,GAAoBC,CAAI,IAAIE,GAAQ,OACpC;AAAA,IACL,MAAApa;AAAA,IACA,SAAS,MAAM+7B,GAAY,QAAQj9B,CAAK;AAAA,IACxC,MAAM,MAAMi9B,GAAY,UAAUj9B,CAAK;AAAA,IACvC,SAAS,CAACma,OACD;AAAA,MACL,kBAAkBA,EAAQ,WAAA;AAAA,IAAW;AAAA,EAEzC,EAEH,GAEK,CAAC,EAAE,QAAAqB,GAAQ,mBAAAC,EAAA,GAAqBC,CAAI,IAAIC,GAAQ,OAC7C;AAAA,IACL,QAAQza;AAAA,IACR,SAAS,CAACmT,MAAS,CAACtS,EAAM,MAAM,CAACsS,EAAK,MAAM;AAAA,IAC5C,MAAM,CAACA,MAAS;AACd,MAAI/S,MAAU+S,EAAK,SAAStS,EAAM,QAAQsS,EAAK,MAAM,OACnD4G,EAAW5G,EAAK,MAAM,KAAKtS,EAAM,GAAG;AAAA,IACxC;AAAA,IACA,SAAS,CAACoY,OACD;AAAA,MACL,QAAQA,EAAQ,OAAA;AAAA,MAChB,mBAAmBA,EAAQ,QAAA;AAAA,IAAQ;AAAA,EAEvC,EAEH,GAMK,EAAE,OAAA2D,GAAO,OAAArE,GAAO,IAAArX,IAAK,IAAO,KAAAD,GAAK,YAAAm7B,MAAev7B,GAChD0V,IAAQtV,EAAI,WAAWtC,EAAU,YAAY,GAM7C09B,IAAe,CAACC,GAAM9wB,GAASC,GAAW8wB,MAE5C,gBAAAviC;AAAA,IAACmQ;AAAAA,IAAA;AAAA,MAEC,WAAW;AAAA,MACX,WAAU;AAAA,MACV,SAAS,gBAAAnQ,EAACoQ,IAAA,EAAQ,IAAI,WAAWvJ,EAAM,GAAG,IAAI4K,CAAS,IAAK,UAAAD,EAAA,CAAQ;AAAA,MAEpE,UAAA,gBAAAxR,EAACiB,IAAA,EAA6C,SAAQ,SAAQ,MAAK,MAAK,SAASshC,GAC9E,UAAAD,EAAA,GADU,OAAOz7B,EAAM,GAAG,IAAI4K,CAAS,EAE1C;AAAA,IAAA;AAAA,IAPK,GAAG5K,EAAM,GAAG,IAAI4K,CAAS;AAAA,EAAA,GAY9B+wB,IAAaN,IACfG;AAAA,IACE3zB,EAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,CAACwJ,MAAUoiB,EAAapiB,GAAO2W,GAAIhoB,GAAO,WAAW;AAAA,EAAA,IAEvD,MAEE47B,IAAcJ;AAAA,IAClB3zB,EAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,CAACwJ,MAAUoiB,EAAapiB,GAAO2W,GAAIhoB,GAAO,oBAAoB;AAAA,EAAA,GAG1D67B,IAASL;AAAA,IACb3zB,EAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA,CAACwJ,MAAUoiB,EAAapiB,GAAO2W,GAAIhoB,GAAO,aAAa;AAAA,EAAA,GAGnD87B,IAAYN;AAAA,IAChB3zB,EAAO;AAAA,IACP6N,IAAQ,yBAAyB;AAAA,IACjC;AAAA,IACA,CAACrE,MAAUoiB,EAAapiB,GAAO2W,GAAIhoB,GAAO,cAAc;AAAA,EAAA,GAoBpD+7B,IAAc,MAAM;AACxB,UAAM5kB,IAAW/W,EAAI,MAAM,GAAG;AAC9B,WACE+W,EAAS,SAAS,IAAI,gBAAAhe,EAAC,QAAA,EAAM,wBAAcge,EAAS,CAAC,CAAC,GAAA,CAAG,IAAU;AAAA,EAEvE,GAEM6kB,IAAkB,MAAM;AAC5B,UAAMC,IACJ,gBAAA9iC,EAACuJ,IAAA,EACE,UAAA0xB,GAAkB;AAAA,MACjB,UAAU;AAAA,MACV,WAAW;AAAA,MACX,OAAO;AAAA,MACP,OAAOmH,KAAc;AAAA,MACrB,UAAUH;AAAA,MACV,UAAU,CAACv+B;AAAA,IAAA,CACZ,EAAA,GARe,GAAGmD,EAAM,GAAG,SAS9B;AAEF,QAAI,CAACnD,EAAU,QAAOo/B;AACtB,UAAMC,IAAqB,CAAC77B,MAAO,SAAS,KAAKD,CAAG,KAAKsV;AACzD,WACE,gBAAAxb,EAAAsI,GAAA,EACG,UAAA;AAAA,MAAAkT,IAAQ,OAAOumB;AAAA,MAChB,gBAAA/hC,EAACwI,IAAA,EAAY,WAAU,QACpB,UAAA;AAAA,QAAAk5B;AAAA,QACAD;AAAA,QACAjmB,IAAQ,OAAOmmB;AAAA,QACfK,IAAqBJ,IAAY;AAAA,MAAA,EAAA,GAJD,GAAG97B,EAAM,GAAG,SAK/C;AAAA,IAAA,GACF;AAAA,EAEJ,GAEMm8B,IACJ,gBAAAjiC,EAAC,OAAA,EAAI,WAAWoX,IACd,UAAA;AAAA,IAAA,gBAAAnY,EAAC+U,MAAI,IAAA7N,GAAQ;AAAA,IACZ07B,EAAA;AAAA,IACAC,EAAA;AAAA,EAAgB,GACnB;AAGF,SAAO,gBAAA7iC,EAAC,SAAK,UAAAgjC,EAAA,CAAa;AAC5B,GC/KaC,KAA4B,CACvC78B,GACAS,GACA+R,GACAsqB,IAAgB,oBAAI,IAAA,GACpBC,IAAa,SACV;AACH,QAAM9+B,IAAW,GAAGwC,EAAM,GAAG,IAAIT,EAAM,KAAK;AAC5C,MAAI88B,EAAc,IAAI7+B,CAAQ,UAAU,CAAC,IAAO+B,EAAM,KAAK;AAC3D,EAAA88B,EAAc,IAAI7+B,CAAQ;AAE1B,QAAM,CAAC8D,GAAMoW,CAAK,IAAI6kB,GAAeh9B,GAAOwS,GAAWuqB,CAAU;AACjE,MAAI,CAACh7B,EAAM,QAAO,CAAC,IAAOoW,CAAK;AAE/B,MAAInY,EAAM,eAAeA,EAAM,YAAY,SAAS;AAClD,eAAW1B,KAAQ0B,EAAM,aAAa;AACpC,YAAMi9B,IAAWzqB,EAAUlU,EAAK,KAAK;AACrC,UAAI2+B,GAAU;AACZ,cAAMC,KAAYD,EAAS,UAAU,CAAA,GAAI;AAAA,UACvC,CAAC9+B,MAAMA,EAAE,UAAUG,EAAK;AAAA,QAAA;AAE1B,YAAI4+B,GAAU;AACZ,gBAAM,CAACC,CAAU,IAAIN;AAAA,YACnBK;AAAA,YACAD;AAAA,YACAzqB;AAAA,YACAsqB;AAAA,YACAC;AAAA,UAAA;AAEF,cAAI,CAACI;AACH,mBAAO,CAAC,IAAOhlB,CAAK;AAAA,QAExB;AAAA,MACF;AAAA,IACF;AAEF,SAAO,CAAC,IAAMA,CAAK;AACrB,GAMailB,KAA2B,CAACrqB,GAAMP,GAAWuqB,IAAa,SAAS;AAC9E,MAAIM,IAAyBtqB;AAE7B,EAAIA,EAAK,QAAQ,CAACA,EAAK,gBACrBsqB,IAAyB;AAAA,IACvB,aAAatqB,EAAK,KAAK,IAAI,CAACmK,OAAO;AAAA,MACjC,GAAGA;AAAA,MACH,OAAOA,EAAE,MAAMA,EAAE;AAAA,IAAA,EACjB;AAAA,IACF,eAAenK,EAAK;AAAA,EAAA;AAIxB,QAAM,CAAChR,GAAMoW,CAAK,IAAI6kB,GAAeK,GAAwB7qB,GAAWuqB,CAAU;AAClF,MAAI,CAACh7B,EAAM,QAAO,CAAC,IAAOoW,CAAK;AAG/B,MAAIklB,EAAuB;AACzB,eAAW/+B,KAAQ++B,EAAuB,aAAa;AACrD,YAAMJ,IAAWzqB,EAAUlU,EAAK,KAAK;AACrC,UAAI2+B,GAAU;AACZ,cAAMC,KAAYD,EAAS,UAAU,CAAA,GAAI;AAAA,UACvC,CAAC9+B,MAAMA,EAAE,UAAUG,EAAK;AAAA,QAAA;AAE1B,YAAI4+B,GAAU;AACZ,gBAAM,CAACC,CAAU,IAAIN;AAAA,YACnBK;AAAA,YACAD;AAAA,YACAzqB;AAAA,gCACI,IAAA;AAAA,YACJuqB;AAAA,UAAA;AAEF,cAAI,CAACI;AACH,mBAAO,CAAC,IAAOhlB,CAAK;AAAA,QAExB;AAAA,MACF;AAAA,IACF;AAEF,SAAO,CAAC,IAAMA,CAAK;AACrB,GCrFamlB,KAAsB,CAAC3d,GAAa4d,MAAgB;AAC/D,MAAI,CAAC,MAAM,QAAQ5d,CAAW,KAAK,CAAC,MAAM,QAAQ4d,CAAW;AAC3D,WAAO,CAAA;AAGT,QAAMC,IAAkBD,EACrB,OAAO,CAACv9B,MACHA,EAAM,SAAS,WACV,KAELA,EAAM,SAAS,SACVA,EAAM,aAAa,KAErB,EACR,EACA,IAAI,CAACA,MAAUA,EAAM,KAAK;AAE7B,SAAO2f,EAAY,OAAO,CAACO,MAAcsd,EAAgB,SAAStd,CAAS,CAAC;AAC9E,GAKaud,KAA6B,CAAC9d,GAAa+d,MACjD,MAAM,QAAQ/d,CAAW,IAGvBA,EAAY,OAAO,CAACO,MAAcA,MAAcwd,CAAgB,IAF9D,CAAA,GA0BEC,KAA4B,CACvCC,GACAje,GACAlf,GACA+R,IAAY,MACZqrB,IAAc,CAAA,GACdd,IAAa,SACV;AACH,MAAI,CAACa;AACH,WAAO;AAGT,MAAI,CAAC,MAAM,QAAQje,CAAW,KAAKA,EAAY,WAAW;AACxD,WAAOie;AAGT,QAAML,IAAc98B,GAAO,UAAU,CAAA,GAC/Bq9B,IAAkBR,GAAoB3d,GAAa4d,CAAW;AAEpE,MAAIO,EAAgB,WAAW;AAC7B,WAAOF;AAGT,QAAMG,IAAaD,EAChB,IAAI,CAAC5d,MAAc;AAClB,UAAMlgB,IAAQu9B,EAAY,KAAK,CAACp/B,MAAMA,EAAE,UAAU+hB,CAAS;AAC3D,QAAI,CAAClgB,EAAO,QAAO;AAGnB,QAAIwS,GAAW;AACb,YAAM,CAACwrB,CAAS,IAAInB;AAAA,QAClB78B;AAAA,QACAS;AAAA,QACA+R;AAAA,4BACI,IAAA;AAAA,QACJuqB;AAAA,MAAA;AAEF,UAAI,CAACiB,EAAW,QAAO;AAAA,IACzB;AAGA,WAAIH,EAAY3d,CAAS,IAChB2d,EAAY3d,CAAS,IAIvBlgB,EAAM,SAASA,EAAM,WAAW;AAAA,EACzC,CAAC,EACA,OAAO,CAAC9D,MAAQA,KAAOA,EAAI,SAAA,EAAW,KAAA,MAAW,EAAE;AAEtD,SAAI6hC,EAAW,WAAW,IACjBH,IAGF,GAAGA,CAAS,MAAMG,EAAW,KAAK,KAAK,CAAC;AACjD,GC9GME,KAAsBljC,GAAA,GAEfmjC,KAAuB,CAAC,EAAE,UAAAzkC,GAAU,OAAAwB,QAE7C,gBAAArB,EAACqkC,GAAoB,UAApB,EAA6B,OAAAhjC,GAC3B,UAAAxB,EAAA,CACH,GAIS0kC,KAAyB,MAAM;AAC1C,QAAMhjC,IAAUC,GAAW6iC,EAAmB;AAC9C,SAAI9iC,MAAY,SACP,EAAE,WAAW,GAAC,IAEhBA;AACT;ACMA,MAAqBijC,WAA2BnS,GAAU;AAAA,EACxD,OAAO,cAAcgS;AAAA,EAErB,YAAYv/B,GAAO;AACjB,UAAMA,CAAK,GACX,KAAK,eAAe,KAAK,aAAa,KAAK,IAAI,GAC/C,KAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI,GACrD,KAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI,GACrD,KAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AAAA,EAC3C;AAAA,EAEA,aAAa,GAAGP,GAAG1C,GAAGutB,GAAG;AACvB,UAAM,EAAE,UAAAqF,MAAa,KAAK;AAC1B,IAAAA,EAAS,GAAGlwB,GAAG1C,GAAGutB,CAAC;AAAA,EACrB;AAAA,EAEA,gBAAgB,GAAGP,GAAItqB,GAAGkgC,IAAY,IAAO;AAC3C,UAAM,EAAE,aAAA9I,MAAgB,KAAK,OACvBvQ,IAAM7mB,EAAE,WAAW,KAAK,CAACozB,MAAMA,EAAE,OAAO9I,CAAE;AAChD,QAAI,CAAC4V;AACH,UAAI,EAAE,SAAShrB,EAAW,kBAAkB;AAC1C,cAAM4R,IAAQC,GAAS,EAAE,aAAa;AACtC,YAAIC,IAAOF,EAAM,UAAU,CAACG,MAAMA,EAAE,QAAQ,EAAE,YAAY;AAC1D,QAAID,IAAOF,EAAM,SAAS,IAAGE,KAAQ,IAChCA,IAAO,GACZH,EAAI,eAAeC,EAAM,SAAS,IAAIA,EAAME,CAAI,EAAE,MAAM,IACxDH,EAAI,QAAQK,GAAe,EAAE,eAAeL,EAAI,cAAc,EAAE,KAAK;AAAA,MACvE;AACE,QAAAA,EAAI,QAAQ,EAAE,OAAO;AAGzB,UAAM,EAAE,OAAAvkB,MAAU,KAAK,OACjB8Q,IAAM,EAAE,GAAApT,GAAG,KAAA6mB,EAAA;AACjB,IAAAuQ,EAAY90B,EAAM,KAAK8Q,GAAK8sB,CAAS;AAAA,EACvC;AAAA,EAEA,gBAAgB1xB,GAAQ;AACtB,UAAM,EAAE,OAAA3M,GAAO,OAAAS,GAAO,WAAAwjB,GAAW,MAAArkB,MAAS+M;AAE1C,SAAK,aAAasX,GAAWjkB,GAAOS,GAAOb,CAAI;AAAA,EACjD;AAAA,EAEA,YAAY0+B,GAAU/sB,GAAKrV,GAAK;AAC9B,UAAM,EAAE,SAAA2V,MAAY,KAAK,OACnBoT,IAAQC,GAAS3T,EAAI,aAAa;AACxC,QAAI4T,IAAOF,EAAM,UAAU,CAACniB,MAAMA,EAAE,QAAQ5G,CAAG;AAC/C,IAAIipB,IAAOF,EAAM,SAAS,IAAGE,KAAQ,IAChCA,IAAO;AACZ,UAAMoZ,IAAShtB;AACf,IAAAgtB,EAAO,eAAetZ,EAAM,SAAS,IAAIA,EAAME,CAAI,EAAE,MAAM,IAC3DtT,EAAQysB,GAAUC,CAAM;AAAA,EAC1B;AAAA,EAEA,QAAQ;AACN,UAAM;AAAA,MACJ,OAAA99B;AAAA,MACA,eAAAe;AAAA,MACA,IAAAinB;AAAA,MACA,QAAA1nB;AAAA,MACA,UAAAipB;AAAA,MACA,WAAAsQ;AAAA,MACA,UAAAkE;AAAA,MACA,QAAAjU;AAAA,MACA,UAAApE;AAAA,MACA,UAAA7oB;AAAA,MACA,aAAAuE;AAAA,IAAA,IACE,KAAK,OACH,EAAE,QAAAiW,GAAQ,KAAAjX,GAAK,IAAA49B,EAAA,IAAOh+B;AAC5B,QAAI,EAAE,MAAAi+B,MAASj+B;AAGf,IAAI0lB,KAAcsY,MAAIC,IAAO;AAG7B,QAAIC,IAASD,KAAQ,GACjBE,IAAW,KAAK,MAAM,KAAKD,CAAM;AAErC,UAAM5N,IAAK,CAAA;AACX,QAAIO,IAAK,CAAA,GACLuN,IAAiB,IACjBC,IAAc;AAElB,UAAM,EAAE,WAAAC,MAAc,KAAK;AAE3B,YAACjnB,KAAU,CAAA,GAAI,QAAQ,CAAC3Z,GAAGgV,MAAQ;AACjC,YAAM,CAAC6rB,GAAUC,CAAS,IAAIpC,GAA0B1+B,GAAGsC,GAAOM,GAAQ,oBAAI,OAAOg+B,GAAW,OAAO;AACvG,UAAIC,GAAU;AACZ,YAAIE;AAEJ,YAAI/gC,EAAE,SAASkV,EAAW,kBAAkB;AAE1C,UAAIie,EAAG,SAAS,MACdP,EAAG,KAAK,gBAAAn3B,EAAC0jB,IAAA,EAAiC,UAAAgU,EAAA,GAAxB,GAAGzwB,CAAG,IAAIkwB,EAAG,MAAM,EAAQ,CAAM,GACnDO,IAAK,CAAA,GACLuN,IAAiB,KAEnB9N,EAAG;AAAA,YACD,gBAAAn3B;AAAA,cAACkqB;AAAA,cAAA;AAAA,gBAEC,OAAArjB;AAAA,gBACA,KAAK,EAAE,OAAOtC,EAAA;AAAA,gBACd,eAAe,KAAK;AAAA,gBACpB,UAAAb;AAAA,cAAA;AAAA,cAJK,GAAGuD,CAAG,IAAIkwB,EAAG,MAAM;AAAA,YAAA;AAAA,UAK1B,GAEF+N,IAAc;AACd;AAAA,QACF;AACA,QAAI3gC,EAAE,aAEAmzB,EAAG,SAAS,MACdP,EAAG,KAAK,gBAAAn3B,EAAC0jB,IAAA,EAAiC,UAAAgU,EAAA,GAAxB,GAAGzwB,CAAG,IAAIkwB,EAAG,MAAM,EAAQ,CAAM,GACnDO,IAAK,CAAA,GACLuN,IAAiB,KAEnBK,IAAa,IACbJ,IAAc,KACL3gC,EAAE,SAASkV,EAAW,WAC/B6rB,IAAa,MAAM/gC,EAAE,QAAQ,IAC7B2gC,IAAc,MAGdH,IAASxgC,EAAE,QAAQwgC,GACnBC,IAAW,KAAK,MAAM,KAAKD,CAAM,GACjCO,IAAaN,KAGVD,MAAW,KAAKG,KAAe,KAAMD,IAAiBK,OACzDnO,EAAG,KAAK,gBAAAn3B,EAAC0jB,IAAA,EAAiC,UAAAgU,EAAA,GAAxB,GAAGzwB,CAAG,IAAIkwB,EAAG,MAAM,EAAQ,CAAM,GACnDO,IAAK,CAAA,GACLuN,IAAiB,IACjBC,IAAc;AAGhB,cAAMK,IAAOja,GAAS/mB,EAAE,aAAa,EAAE,CAAC,KAAK,CAAA,GACvCskB,IACJkc,MAAW,KACX,CAAC,CAACtrB,EAAW,SAASA,EAAW,gBAAgB,EAAE,SAASlV,EAAE,IAAI,KAClE,CAACA,EAAE,YACC,YACA;AAEN,QAAAmzB,EAAG;AAAA,UACD,gBAAA13B;AAAA,YAAC2jB;AAAA,YAAA;AAAA,cAEC,IAAI2hB;AAAA,cACJ,IAAIA;AAAA,cACJ,WAAWzc;AAAA,cAEX,UAAA,gBAAA7oB;AAAA,gBAAC2hC;AAAA,gBAAA;AAAA,kBAEC,QAAAx6B;AAAA,kBACA,IAAA0nB;AAAA,kBACA,OAAAhoB;AAAA,kBACA,UAAUupB,KAAY;AAAA,kBACtB,OAAO7rB;AAAA,kBACP,OAAO8gC,KAAa9gC,EAAE;AAAA,kBACtB,OAAOA,EAAE,SAAS;AAAA,kBAClB,aAAaA,EAAE,eAAe;AAAA,kBAC9B,MAAMA,EAAE,QAAQkV,EAAW;AAAA,kBAC3B,OAAOlV,EAAE,SAAS;AAAA,kBAClB,SAASA,EAAE,WAAW;AAAA,kBACtB,SACGqD,KACCA,EAAcrD,EAAE,aAAa,KAC7BqD,EAAcrD,EAAE,aAAa,EAAE,WACjC,CAAA;AAAA,kBAEF,UAAU,CAAC2T,MACT,KAAK,aAAaA,GAAO3T,EAAE,OAAO0C,GAAK1C,EAAE,IAAI;AAAA,kBAE/C,aAAa,KAAK;AAAA,kBAClB,YAAYjE,GAASoD,GAAU,EAAEa,EAAE,YAAY,GAAM;AAAA,kBACrD,WAAAm8B;AAAA,kBACA,UAAAkE;AAAA,kBACA,UAAU,CAACtkC,GAASoD,GAAU,EAAEa,EAAE,YAAY,GAAM;AAAA,kBACpD,YAAYA,EAAE,YAAY;AAAA,kBAC1B,aAAaA,EAAE,eAAe;AAAA,kBAC9B,eAAeA,EAAE;AAAA,kBACjB,cAAcA,EAAE,gBAAgBghC,EAAK;AAAA,kBACrC,SAAS,MACP,KAAK,YAAYt+B,GAAK1C,GAAGA,EAAE,gBAAgBghC,EAAK,GAAG;AAAA,kBAErD,eAAe39B,KAAiB,CAAA;AAAA,kBAChC,QAAA+oB;AAAA,kBACA,UAAApE;AAAA,kBACA,aAAAtkB;AAAA,gBAAA;AAAA,gBApCK,GAAG4mB,CAAE,IAAIhoB,CAAK,IAAItC,EAAE,KAAK;AAAA,cAAA;AAAA,YAqChC;AAAA,YA3CK,QAAQ0C,CAAG,IAAI1C,EAAE,QAAQ,IAAIA,EAAE,KAAK;AAAA,UAAA;AAAA,QA4C3C,GAGF0gC,KAAkBK,GAClBJ,KAAe,IAGbI,MAAe,MACf/rB,MAAQ2E,EAAO,SAAS,KACvB6mB,MAAW,KAAKG,KAAe,OAEhC/N,EAAG,KAAK,gBAAAn3B,EAAC0jB,IAAA,EAAiC,UAAAgU,EAAA,GAAxB,GAAGzwB,CAAG,IAAIkwB,EAAG,MAAM,EAAQ,CAAM,GACnDO,IAAK,CAAA,GACLuN,IAAiB,IACjBC,IAAc;AAAA,MAElB;AAAA,IACF,CAAC,GAEGxN,EAAG,SAAS,KACdP,EAAG,KAAK,gBAAAn3B,EAAC0jB,IAAA,EAAiC,UAAAgU,EAAA,GAAxB,GAAGzwB,CAAG,IAAIkwB,EAAG,MAAM,EAAQ,CAAM,GAE9CA;AAAA,EACT;AAAA,EAEA,UAAUpF,GAAKD,GAAK;AAClB,SAAK,aAAa,MAAMC,GAAKD,GAAK,YAAY;AAAA,EAChD;AAAA,EAEA,SAAS;AACP,UAAM;AAAA,MACJ,IAAAjD;AAAA,MACA,OAAAhoB;AAAA,MACA,QAAAM;AAAA,MACA,UAAAq+B;AAAA,MACA,OAAAtD;AAAA,MACA,QAAAuD;AAAA,MACA,WAAA7oB;AAAA,MACA,UAAAlZ;AAAA,MACA,SAAAy+B;AAAA,MACA,QAAAxpB;AAAA,IAAA,IACE,KAAK,OACH,EAAE,OAAArJ,IAAQ,WAAW,OAAAsT,GAAO,OAAArE,MAAU1X,GAGtC,EAAE,WAAAs+B,MAAc,KAAK,SAGrBO,IAAc3B;AAAA,MAClBxlB;AAAA,MACA1X,EAAM,gBAAgB,CAAA;AAAA,MACtBA;AAAA,MACAM;AAAA,MACA,CAAA;AAAA,MACAg+B,GAAW;AAAA,IAAA,GAGPQ,IAAet2B,GAAQC,CAAK;AAClC,QAAImd,IAAM7J,KAAS;AACnB,IAAA6J,IAAM,CAAC,eAAe,aAAa,EAAE,SAASkZ,CAAY,IACtD,GAAGlZ,CAAG,eACN,GAAGA,CAAG;AAEV,UAAMmZ,IACJ,gBAAA5lC;AAAA,MAACgiC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAAn7B;AAAA,QACA,OAAM;AAAA,QACN,UAAU,EAAE,IAAIA,EAAM,IAAA;AAAA,QACtB,YAAY,KAAK;AAAA,QACjB,IAAAgoB;AAAA,QACA,cAAc,KAAK;AAAA,QACnB,cAAc,CAAC3W,MACb,KAAK,aAAaA,GAAO,cAAcrR,GAAO,mBAAmB;AAAA,QAEnE,OAAAq7B;AAAA,QACA,UAAAx+B;AAAA,QACA,SAAAy+B;AAAA,MAAA;AAAA,IAAA,GAGE0D,IACJ,gBAAA7lC;AAAA,MAACod,GAAU;AAAA,MAAV;AAAA,QACC,IAAG;AAAA,QACH,WAAW,2BAA2BuoB,CAAY;AAAA,QAEjD,UAAAD,MAAgB,KACf,gBAAA1lC,EAAC,QAAA,EAAK,WAAWysB,GAAK,UAAA,IAAA,CAAM,IAE5B,gBAAAzsB,EAAC,QAAA,EAAK,WAAWysB,GAAM,UAAAiZ,EAAA,CAAY;AAAA,MAAA;AAAA,IAAA;AA0BzC,WAfE,gBAAA3kC;AAAA,MAAC2b;AAAA,MAAA;AAAA,QAEC,KAAK8oB,IAAWI,IAAW;AAAA,QAC3B,UAAU/+B,EAAM;AAAA,QAChB,YAAYg/B;AAAA,QACZ,UAAUF;AAAA,QACV,QAAAx+B;AAAA,QACA,WAAAyV;AAAA,QACA,QAAAjE;AAAA,QAEC,UAAA;AAAA,UAAA,KAAK,MAAA;AAAA,UACL8sB,KAAUA,EAAO5+B,EAAM,GAAG;AAAA,QAAA;AAAA,MAAA;AAAA,MAVtB,qBAAqBA,EAAM,GAAG;AAAA,IAAA;AAAA,EAezC;AACF;AAEA29B,GAAmB,YAAY;AAAA,EAC7B,IAAItkC,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,MAAM,CAAC;AAAA;AAAA,EAC5D,OAAOA,EAAU;AAAA,EACjB,eAAeA,EAAU;AAAA,EACzB,UAAUA,EAAU,KAAK;AAAA,EACzB,aAAaA,EAAU,KAAK;AAAA,EAC5B,SAASA,EAAU;AAAA,EACnB,UAAUA,EAAU;AAAA,EACpB,QAAQA,EAAU,OAAO;AAAA,EACzB,WAAWA,EAAU;AAAA,EACrB,UAAUA,EAAU;AAAA,EACpB,UAAUA,EAAU;AAAA,EACpB,UAAUA,EAAU;AAAA,EACpB,QAAQA,EAAU;AAAA,EAClB,OAAOA,EAAU;AAAA,EACjB,QAAQA,EAAU;AAAA,EAClB,WAAWA,EAAU;AAAA,EACrB,UAAUA,EAAU,KAAK;AAAA,EACzB,aAAaA,EAAU,OAAO;AAAA,EAC9B,SAASA,EAAU,KAAK;AAAA,EACxB,QAAQA,EAAU;AACpB;AAEAskC,GAAmB,eAAe;AAAA,EAChC,IAAI;AAAA,EACJ,eAAe,CAAA;AAAA,EACf,SAAS,MAAM;AAAA,EAAC;AAAA,EAChB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,QAAQ,MAAM;AAAA,EAAC;AAAA,EACf,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,QAAQ,CAAA;AACV;ACjWA,SAASsB,GAAmB;AAAA,EAC1B,SAAAprB;AAAA,EACA,YAAAqrB;AAAA,EACA,aAAAhrB;AAAA,EACA,aAAAirB;AAAA,EACA,WAAAptB;AAAA,EACA,IAAAiW;AAAA,EACA,UAAAuB;AAAA,EACA,UAAAqE;AAAA,EACA,aAAAkH;AAAA,EACA,eAAA/zB;AAAA,EACA,SAAAqQ;AAAA,EACA,WAAAyoB;AAAA,EACA,UAAAkE;AAAA,EACA,UAAAY;AAAA,EACA,QAAA7U;AAAA,EACA,UAAApE;AAAA,EACA,OAAA2V;AAAA,EACA,QAAAuD;AAAA,EACA,WAAA7oB;AAAA,EACA,UAAAlZ;AAAA,EACA,aAAAuE;AAAA,EACA,QAAA0Q;AACF,GAAG;AACD,QAAM,EAAE,WAAAwsB,EAAA,IAAcZ,GAAA,GAChB,CAAC0B,GAAoBC,CAAqB,IAAIp2B,EAAS,EAAI,GAC3D,CAACq2B,GAAUC,CAAW,IAAIt2B,EAAS,MACnC8M,MAImB7B,KAAe,CAAA,GAAI;AAAA,IAAK,CAAClU,MAC9C+U,GAAahD,GAAW/R,EAAM,KAAK8R,CAAM;AAAA,EAAA,CAG5C,GACK,CAAC0tB,GAAkBC,CAAmB,IAAIx2B,EAAS,EAAK,GAExDy2B,IACJP,KAAeA,EAAY,QAAQA,EAAY,KAAK,SAAS,GAGzDvC,IAAyB8C,IAC3B;AAAA,IACE,aAAaP,EAAY,KAAK,IAAI,CAAC1iB,OAAO;AAAA,MACxC,GAAGA;AAAA,MACH,OAAOA,EAAE,MAAMA,EAAE;AAAA,IAAA,EACjB;AAAA,IACF,eAAe0iB,EAAY;AAAA,EAAA,IAE7B,MAGE1qB,IAAeP,KAAe,CAAA;AAGpC,MAAIyrB,IAAqB5pB;AACzB,EAAI4pB,MAAuB,WACpBP,MACHO,IAAqB;AAKzB,QAAMC,IAAgBnrB,EACnB,IAAI,CAACzU,GAAO0S,MAAQ;AACnB,UAAMmtB,IAAK,GAAGhsB,CAAO,IAAI7T,EAAM,GAAG,IAAI0S,CAAG;AAGzC,QACE,OAAO1S,EAAM,cAAgB,OAC7BA,EAAM,eAAe,QACrBA,EAAM,YAAY,WAAW;AAE7B,aACE,gBAAA7G;AAAA,QAACwkC;AAAA,QAAA;AAAA,UACC,IAAA3V;AAAA,UAEA,OAAAhoB;AAAA,UACA,UAAUupB,KAAY;AAAA,UACtB,UAAAqE;AAAA,UACA,aAAAkH;AAAA,UACA,eAAA/zB;AAAA,UACA,SAAAqQ;AAAA,UACA,QAAQW;AAAA,UACR,WAAA8nB;AAAA,UACA,UAAAkE;AAAA,UACA,UAAAY;AAAA,UACA,QAAA7U;AAAA,UACA,UAAApE;AAAA,UACA,OAAA2V;AAAA,UACA,QAAAuD;AAAA,UACA,WAAWe;AAAA,UACX,UAAA9iC;AAAA,UACA,aAAAuE;AAAA,UACA,SAAO;AAAA,UACP,QAAA0Q;AAAA,QAAA;AAAA,QAnBK+tB;AAAA,MAAA;AAyBX,UAAM,CAACC,CAAS,IAAInD,GAAyB38B,GAAO+R,GAAWusB,GAAW,OAAO;AACjF,WAAIwB,IAEA,gBAAA3mC;AAAA,MAACwkC;AAAA,MAAA;AAAA,QACC,IAAA3V;AAAA,QAEA,OAAAhoB;AAAA,QACA,UAAUupB,KAAY;AAAA,QACtB,UAAAqE;AAAA,QACA,aAAAkH;AAAA,QACA,eAAA/zB;AAAA,QACA,SAAAqQ;AAAA,QACA,QAAQW;AAAA,QACR,WAAA8nB;AAAA,QACA,UAAAkE;AAAA,QACA,UAAAY;AAAA,QACA,QAAA7U;AAAA,QACA,UAAApE;AAAA,QACA,OAAA2V;AAAA,QACA,QAAAuD;AAAA,QACA,WAAWe;AAAA,QACX,UAAA9iC;AAAA,QACA,aAAAuE;AAAA,QACA,SAAO;AAAA,QACP,QAAA0Q;AAAA,MAAA;AAAA,MAnBK+tB;AAAA,IAAA,IAwBJ;AAAA,EACT,CAAC,EACA,OAAO,OAAO;AAEjB,2BACGE,IAAA,EAAK,WAAU,6BAA4B,IAAI,gBAAgBlsB,CAAO,IACrE,UAAA;AAAA,IAAA,gBAAA3Z;AAAA,MAAC6lC,GAAK;AAAA,MAAL;AAAA,QACC,WAAU;AAAA,QACV,SAAS,MAAM;AACb,UAAAR,EAAY,CAACD,CAAQ,GACrBD,EAAsB,EAAK;AAAA,QAC7B;AAAA,QACA,OAAO,EAAE,QAAQ,UAAA;AAAA,QAEjB,UAAA;AAAA,UAAA,gBAAAnlC,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,YAAA,gBAAAf,EAACyd,MAAM,IAAG,QAAO,WAAU,QACxB,YAAO,cACV;AAAA,YACA,gBAAAzd,EAAC,UAAA,EAAO,WAAU,aAAa,UAAA+lC,GAAW;AAAA,YAC1C,gBAAAhlC,EAAC,QAAA,EAAK,WAAU,yBAAwB,UAAA;AAAA,cAAA;AAAA,cACpCga,EAAY;AAAA,cAAO;AAAA,cAAOA,EAAY,WAAW,IAAI,MAAM;AAAA,cAAG;AAAA,YAAA,EAAA,CAClE;AAAA,UAAA,GACF;AAAA,UACA,gBAAAha,EAAC,OAAA,EAAI,WAAU,6BACZ,UAAA;AAAA,YAAAwlC,KACC,gBAAAxlC;AAAA,cAAC0c;AAAA,cAAA;AAAA,gBACC,IAAG;AAAA,gBACH,WAAU;AAAA,gBACV,SAAS,CAACvU,MAAM;AACd,kBAAAA,EAAE,gBAAA,GACFo9B,EAAoB,CAACD,CAAgB;AAAA,gBACvC;AAAA,gBACA,OAAO,EAAE,QAAQ,UAAA;AAAA,gBAEhB,UAAA;AAAA,kBAAA33B,EAAO;AAAA,kBAAQ;AAAA,kBAAE23B,IAAmB,SAAS;AAAA,kBAAO;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGzD,gBAAArmC,EAAC,UAAK,WAAU,cACb,cAAW0O,EAAO,cAAcA,EAAO,cAAA,CAC1C;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAED23B,KAAoBE,KAAmB9C,KACtC,gBAAAzjC,EAAC4mC,GAAK,MAAL,EAAU,WAAU,+BACnB,UAAA,gBAAA5mC;AAAA,MAAC4gB;AAAA,MAAA;AAAA,QACC,YAAY6iB;AAAA,QACZ,QAAQ7qB;AAAA,MAAA;AAAA,IAAA,GAEZ;AAAA,IAEF,gBAAA5Y,EAAC6mB,MAAS,IAAIsf,GAAU,eAAa,IACnC,UAAA,gBAAAnmC,EAAC4mC,GAAK,MAAL,EAAU,WAAU,OAClB,UAAAH,EAAc,SAAS,IACtBA,IAEA,gBAAAzmC,EAAC,SAAI,WAAU,+BAA8B,UAAA,qCAAA,CAE7C,EAAA,CAEJ,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AAEA8lC,GAAmB,YAAY;AAAA,EAC7B,SAAS5lC,EAAU,OAAO;AAAA,EAC1B,YAAYA,EAAU,OAAO;AAAA,EAC7B,aAAaA,EAAU,MAAM;AAAA,EAC7B,aAAaA,EAAU;AAAA,EACvB,WAAWA,EAAU,OAAO;AAAA,EAC5B,IAAIA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,MAAM,CAAC;AAAA,EAC5D,UAAUA,EAAU;AAAA,EACpB,UAAUA,EAAU,KAAK;AAAA,EACzB,aAAaA,EAAU,KAAK;AAAA,EAC5B,eAAeA,EAAU;AAAA,EACzB,SAASA,EAAU;AAAA,EACnB,WAAWA,EAAU;AAAA,EACrB,UAAUA,EAAU;AAAA,EACpB,UAAUA,EAAU;AAAA,EACpB,QAAQA,EAAU;AAAA,EAClB,UAAUA,EAAU;AAAA,EACpB,OAAOA,EAAU;AAAA,EACjB,QAAQA,EAAU;AAAA,EAClB,WAAWA,EAAU;AAAA,EACrB,UAAUA,EAAU;AAAA,EACpB,aAAaA,EAAU;AAAA,EACvB,QAAQA,EAAU;AACpB;AAEA4lC,GAAmB,eAAe;AAAA,EAChC,QAAQ,CAAA;AACV;ACpOA,MAAMe,KAAe,CAAC/hC,MAAU;AAC9B,QAAM;AAAA,IACJ,SAAAd;AAAA;AAAA;AAAA,IAGA,YAAA8iC;AAAA,IACA,eAAAC;AAAA,IACA,WAAAC;AAAA;AAAA,IAEA,QAAAC;AAAA,IACA,IAAApY;AAAA,IACA,WAAA6R;AAAA,IACA,UAAA8E;AAAA,IACA,UAAAZ;AAAA,IACA,QAAAsC;AAAA,IACA,UAAA3a;AAAA,IACA,OAAA2V;AAAA,IACA,QAAAuD;AAAA,IACA,WAAA7oB;AAAA,IACA,UAAAlZ;AAAA,IACA,aAAAuE;AAAA,EAAA,IACEnD,GAEE,EAAE,WAAAqgC,EAAA,IAAcZ,GAAA,GAEhBp9B,IAASnD,EAAQ,YAAY,UAAU,CAAA,GACvC2qB,IAAU3qB,EAAQ,oBAAoB,kBAAkB,CAAA,GACxDosB,IAAWpsB,GAAS,eAAe,IACnCoD,IAAWpD,EAAQ,YAAY,CAAA,GAC/B2U,IAASvR,EAAS,UAAU,CAAA,GAC5B4S,IAAe5S,EAAS,YAAY,CAAA,GAGpC+/B,IAAc5a,IAChB,CAAA,IACA0a,EAAO,IAAI,CAAC/9B,MACV,gBAAAlJ;AAAA,IAAC2hC;AAAA,IAAA;AAAA,MAEC,OAAOz4B,EAAE;AAAA,MACT,OAAM;AAAA,MACN,UAAUknB,KAAY;AAAA,MACtB,aAAalnB,EAAE,QAAQ,eAAe;AAAA,MACtC,OAAOA,EAAE,QAAQA,EAAE,KAAK,KAAK;AAAA,MAC7B,MAAMA,EAAE;AAAA,MACR,YAAY5I,GAASoD,GAAU,EAAI;AAAA,MACnC,UAAU,CAACpD,GAASoD,GAAU,EAAI;AAAA,MAClC,YAAYwF,EAAE,cAAc;AAAA,MAC5B,UAAU,CAACgP,MAAU4uB,EAAW5uB,GAAOhP,EAAE,OAAO,IAAIA,EAAE,IAAI;AAAA,MAC1D,aAAAjB;AAAA,IAAA;AAAA,IAXK,GAAGiB,EAAE,QAAQ,EAAE,IAAIA,EAAE,KAAK;AAAA,EAAA,CAalC,GAECk+B,IAAS,CAAA,EAAG;AAAA,IAChB,gBAAApnC,EAAC,OAAA,EAAI,WAAU,QACZ,eADuB,YAE1B;AAAA,EAAA,GAII8a,IAAeD,GAAyB1T,GAAQwR,CAAM,GAEtD0uB,IAAa;AAAA,IACjB,IAAAxY;AAAA,IACA,UAAUuB,KAAY;AAAA,IACtB,UAAU0W;AAAA,IACV,aAAaC;AAAA,IACb,eAAepY;AAAA,IACf,SAASqY;AAAA,IACT,QAAA7/B;AAAA,IACA,WAAAu5B;AAAA,IACA,UAAAkE;AAAA,IACA,UAAAY;AAAA,IACA,QAAQ0B;AAAA,IACR,UAAA3a;AAAA,IACA,OAAA2V;AAAA,IACA,QAAAuD;AAAA,IACA,WAAA7oB;AAAA,IACA,UAAUtc,GAASoD,GAAU,EAAI;AAAA,IACjC,aAAAuE;AAAA,IACA,QAAA0Q;AAAA,EAAA;AAGF,SAAAmC,EAAa,QAAQ,CAAC3B,GAAMI,MAAQ;AAClC,QAAIJ,EAAK,SAAS,SAAS;AAEzB,YAAM4B,IAAc5B,EAAK,OAAO,IAAI,CAACtS,MAAUA,EAAM,IAAI;AAGzD,UAAI0lB,KAAYxR,EAAY,MAAM,CAAClU,MAAU,CAACA,EAAM,EAAE,EAAG;AAGzD,YAAMygC,IAAsB/a,IACxBxR,EAAY,OAAO,CAAClU,MAAUA,EAAM,EAAE,IACtCkU;AAEJ,UAAIusB,EAAoB,WAAW,EAAG;AAGtC,YAAMC,IAAmBvtB,EAAab,EAAK,EAAE;AAC7C,UACEouB,KACAA,EAAiB,QACjBA,EAAiB,KAAK,SAAS,GAC/B;AAEA,cAAM9D,IAAyB;AAAA,UAC7B,aAAa8D,EAAiB,KAAK,IAAI,CAACjkB,OAAO;AAAA,YAC7C,GAAGA;AAAA,YACH,OAAOA,EAAE,MAAMA,EAAE;AAAA,UAAA,EACjB;AAAA,UACF,eAAeikB,EAAiB;AAAA,QAAA,GAG5B,CAACC,CAAS,IAAIhE,GAAyBC,GAAwBt8B,GAAQg+B,GAAW,OAAO;AAC/F,YAAI,CAACqC,EAAW;AAAA,MAClB;AAEA,YAAMC,IACJ,gBAAAznC;AAAA,QAAC8lC;AAAA,QAAA;AAAA,UAEC,SAAS3sB,EAAK;AAAA,UACd,YAAYA,EAAK;AAAA,UACjB,aAAamuB;AAAA,UACb,aAAattB,EAAab,EAAK,EAAE;AAAA,UACjC,WAAWhS;AAAA,UACV,GAAGkgC;AAAA,QAAA;AAAA,QANC,SAASluB,EAAK,EAAE,IAAII,CAAG;AAAA,MAAA;AAShC,MAAA6tB,EAAO,KAAKK,CAAY;AAAA,IAC1B,OAAO;AAEL,YAAM5gC,IAAQsS,EAAK;AAGnB,UAAIoT,KAAY,CAAC1lB,EAAM,GAAI;AAE3B,YAAM6/B,IAAK,GAAG7/B,EAAM,GAAG,IAAI0S,CAAG;AAE9B,UACE,OAAO1S,EAAM,cAAgB,OAC7BA,EAAM,eAAe,QACrBA,EAAM,YAAY,WAAW,GAC7B;AACA,cAAM6gC,sBACHlD,IAAA,EAA4B,OAAA39B,GAAc,SAAS,IAAQ,GAAGwgC,KAAtCX,CAAkD;AAE7E,QAAAU,EAAO,KAAKM,CAAE;AAAA,MAChB,WAAW7gC,GAAO,aAAa,SAAS,GAAG;AACzC,cAAM,CAAC8/B,CAAS,IAAInD,GAAyB38B,GAAOM,GAAQg+B,GAAW,OAAO;AAC9E,YAAIwB,GAAW;AACb,gBAAMgB,sBACHnD,IAAA,EAA4B,OAAA39B,GAAc,SAAS,IAAQ,GAAGwgC,KAAtCX,CAAkD;AAE7E,UAAAU,EAAO,KAAKO,CAAG;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC,GAEMP;AACT,GCtKMQ,KAAezmC,GAAA,GAER0mC,KAAgB,CAAC,EAAE,UAAAhoC,GAAU,qBAAAioC,IAAsB,SAAW;AACzE,QAAM,CAACC,GAAcC,CAAe,IAAIl4B,EAASg4B,CAAmB,GAI9DzmC,IAAQ;AAAA,IACZ,cAAA0mC;AAAA,IACA,iBAAAC;AAAA,IACA,gBALqB,MAAMA,EAAgB,CAACC,MAAS,CAACA,CAAI;AAAA,IAM1D,mBAAmB;AAAA,EAAA;AAGrB,SACE,gBAAAjoC,EAAC4nC,GAAa,UAAb,EAAsB,OAAAvmC,GACpB,UAAAxB,EAAA,CACH;AAEJ;AAEAgoC,GAAc,YAAY;AAAA,EACxB,UAAU3nC,EAAU,KAAK;AAAA,EACzB,qBAAqBA,EAAU;AACjC;AAEO,MAAMgoC,KAAkB,MAAM;AACnC,QAAM3mC,IAAUC,GAAWomC,EAAY;AAEvC,SAAKrmC,KACI;AAAA,IACL,cAAc;AAAA,IACd,iBAAiB,MAAM,QAAQ,KAAK,qDAAqD;AAAA,IACzF,gBAAgB,MAAM,QAAQ,KAAK,qDAAqD;AAAA,IACxF,mBAAmB;AAAA,EAAA;AAIzB,GCnCM4mC,KAAiB,CAAC;AAAA,EACtB,KAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,SAAA/qB,IAAU;AAAA,EACV,OAAAgrB,IAAQ;AAAA,EACR,WAAAxoC,IAAY;AACd,MAAM;AACJ,QAAMyoC,IAAa,KAAK,MAAOH,IAAM,MAAOC,CAAO,GAC7CG,IAAO,MAAM,KAAK,EAAE,QAAQH,GAAS,GAErCI,IAAc,CAAC5zB,MAEZ,UADUA,IAAQ0zB,IACG,WAAW,OAAO,YAAYjrB,CAAO,UAAUgrB,CAAK;AAGlF,2BACG,OAAA,EAAI,WAAW,6BAA6BxoC,CAAS,IACnD,YAAK,IAAI,CAAC4oC,GAAGC,MACZ,gBAAA3oC,EAAC,SAAY,WAAWyoC,EAAYE,CAAC,EAAA,GAA3BA,CAA8B,CACzC,GACH;AAEJ;AAEAR,GAAe,YAAY;AAAA,EACzB,KAAKjoC,EAAU,OAAO;AAAA,EACtB,SAASA,EAAU;AAAA,EACnB,SAASA,EAAU;AAAA,EACnB,OAAOA,EAAU,MAAM,CAAC,OAAO,QAAQ,CAAC;AAAA,EACxC,WAAWA,EAAU;AACvB;AC9BA,MAAM0oC,KAAW,CAAChb,MAAMA,MAAM,MAAMA,MAAM,QAAQA,MAAM,QAKlDib,KAAgB;AAAA;AAAA,EAEpB,CAACpvB,EAAW,UAAU,GAAG,MAAM;AAAA,EAC/B,CAACA,EAAW,cAAc,GAAG,MAAM;AAAA;AAAA,EAGnC,CAACA,EAAW,MAAM,GAAG,CAAClV,MAAMA,EAAE,aAAa,MAAQqkC,GAASrkC,EAAE,KAAK;AAAA;AAAA,EAGnE,CAACkV,EAAW,OAAO,GAAG,CAAClV,MACrB,MAAM,QAAQA,EAAE,UAAU,KAC1BA,EAAE,WAAW,SAAS,KACtB,OAAOA,EAAE,WAAW,CAAC,KAAM,YAC3BA,EAAE,WAAW,CAAC,MAAM;AAAA,EAEtB,CAACkV,EAAW,gBAAgB,GAAG,CAAC,EAAE,YAAYwnB,EAAA,MAC5C,MAAM,QAAQA,CAAE,KAChBA,EAAG,UAAU,KACb2H,GAAS3H,EAAG,CAAC,GAAG,KAAK,KACrB2H,GAAS3H,EAAG,CAAC,GAAG,KAAK,KACrB2H,GAAS3H,EAAG,CAAC,GAAG,KAAK;AAAA,EAEvB,CAACxnB,EAAW,aAAa,GAAG,CAAC,EAAE,YAAYwnB,QACzC,MAAM,QAAQA,CAAE,KAChBA,EAAG,SAAS,KACZA,EAAG,MAAM,CAAC7V,MAAQA,EAAI,SAAS3R,EAAW,WAAWmvB,GAASxd,EAAI,KAAK,CAAC;AAAA,EAE1E,CAAC3R,EAAW,cAAc,GAAG,CAAC,EAAE,YAAYwnB,QAC1C,MAAM,QAAQA,CAAE,KAAKA,EAAG,KAAK,CAAC7V,MAAQwd,GAASxd,EAAI,KAAK,CAAC;AAAA;AAAA,EAG3D,CAAC3R,EAAW,cAAc,GAAG,CAAC,EAAE,OAAOmU,EAAA,MACrCA,KAAK,OAAOA,KAAM,YAAYgb,GAAShb,EAAE,KAAK;AAAA,EAChD,CAACnU,EAAW,eAAe,GAAG,CAAC,EAAE,OAAOmU,EAAA,MACtCA,KAAK,OAAOA,KAAM,YAAYgb,GAAShb,EAAE,KAAK;AAAA,EAChD,CAACnU,EAAW,aAAa,GAAG,CAAC,EAAE,OAAOmU,EAAA,MACpCA,KAAK,OAAOA,KAAM,YAAYgb,GAAShb,EAAE,KAAK;AAAA,EAEhD,CAACnU,EAAW,QAAQ,GAAG,CAAC,EAAE,OAAOmU,QAC/BA,KAAK,OAAOA,KAAM,YAAY,MAAM,QAAQA,EAAE,KAAK,KAAKA,EAAE,MAAM,SAAS;AAC7E,GAKMkb,KAAgB,CAAC1iC,MAAU;AAC/B,QAAM2iC,IAAUF,GAAcziC,EAAM,IAAI;AACxC,SAAI2iC,IAAgBA,EAAQ3iC,CAAK,IAG1BwiC,GAASxiC,EAAM,KAAK;AAC7B,GAMa4iC,KAA2B,CACtCniC,GACA+R,GACAuqB,IAAa,SACV;AACH,QAAMjlB,IAASrX,EAAM,UAAU,CAAA;AAC/B,MAAIqX,EAAO,WAAW,EAAG,QAAO;AAGhC,QAAM+qB,IAAgB/qB,EAAO,OAAO,CAAC9X,MAAU;AAC7C,UAAM,CAACg+B,CAAS,IAAInB;AAAA,MAClB78B;AAAA,MACAS;AAAA,MACA+R;AAAA,0BACI,IAAA;AAAA,MACJuqB;AAAA,IAAA;AAEF,WAAOiB;AAAA,EACT,CAAC,GAEK8E,IAAeD,EAAc;AACnC,MAAIC,MAAiB,EAAG,QAAO;AAG/B,QAAMC,IAAcF,EAAc,OAAOH,EAAa,EAAE;AAExD,SAAO,KAAK,MAAOK,IAAcD,IAAgB,GAAG;AACtD,GAKaE,KAA2B,CACtCruB,GACAnC,GACAuqB,IAAa,SACV;AACH,MAAIpoB,EAAY,WAAW,EAAG,QAAO;AAErC,QAAMsuB,IAAkBtuB,EAAY,OAAO,CAAC5Y,GAAK0E,MACxC1E,IAAM6mC,GAAyBniC,GAAO+R,GAAWuqB,CAAU,GACjE,CAAC;AAEJ,SAAO,KAAK,MAAMkG,IAAkBtuB,EAAY,MAAM;AACxD,GChGMuuB,KAAmB,CAAC,EAAE,SAAAtlC,GAAS,YAAAulC,GAAY,YAAApG,QAAiB;AAChE,QAAM,EAAE,YAAA3Z,GAAY,UAAApiB,IAAW,CAAA,MAAOpD,GAChCmD,IAASqiB,GAAY,UAAU,CAAA,GAC/B7Q,IAASvR,EAAS,UAAU,CAAA,GAC5B4S,IAAe5S,EAAS,YAAY,CAAA,GACpC,CAACoiC,GAAgBC,CAAiB,IAAI35B,EAAS,oBAAI,KAAK,GAExD45B,IAAe,CAAChvB,MAAY;AAChC,IAAA+uB,EAAkB,CAAAxB,MAAQ;AACxB,YAAM0B,IAAO,IAAI,IAAI1B,CAAI;AACzB,aAAI0B,EAAK,IAAIjvB,CAAO,IAAGivB,EAAK,OAAOjvB,CAAO,IACrCivB,EAAK,IAAIjvB,CAAO,GACdivB;AAAA,IACT,CAAC;AAAA,EACH,GAIMC,IAFe/uB,GAAyB1T,GAAQwR,CAAM,EAE1B,OAAO,CAAAQ,MAAQ;AAE/C,UAAM6sB,IADU7sB,EAAK,SAAS,UACCa,EAAab,EAAK,EAAE,KAAK,CAAA,IAAMA,EAAK,MAC7D,CAACirB,CAAS,IAAIZ,GAAyBwC,GAAa7+B,GAAQg8B,CAAU;AAC5E,WAAOiB;AAAA,EACT,CAAC,GAEKyF,IAAa,CAAC1wB,GAAM2wB,IAAa,OAAU;AAC/C,UAAMC,IAAU5wB,EAAK,SAAS,SAExB6wB,IAAaD,IACfX,GAAyBjwB,EAAK,OAAO,IAAI,CAAA7U,MAAKA,EAAE,IAAI,GAAG6C,GAAQg8B,CAAU,IACzE6F,GAAyB7vB,EAAK,MAAMhS,GAAQg8B,CAAU,GAEpDhmB,IAAaqsB,EAAe,IAAIrwB,EAAK,EAAE,GACvCmE,IAAU0sB,MAAe,MAAM,YAAYA,IAAa,KAAK,YAAY;AAE/E,WACE,gBAAAhqC;AAAA,MAAC4mC;AAAA,MAAA;AAAA,QAEC,WAAW,kBAAkBkD,IAAa,iCAAiC,EAAE;AAAA,QAC7E,OAAO,EAAE,UAAU,WAAW,aAAaC,IAAU,YAAY,WAAW,iBAAiBA,IAAU,QAAQ,MAAA;AAAA,QAE/G,UAAA,gBAAAhpC,EAAC6lC,GAAK,MAAL,EAAU,WAAU,OACnB,UAAA;AAAA,UAAA,gBAAA7lC,EAAC,OAAA,EAAI,WAAU,0DACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,gDACZ,UAAA;AAAA,cAAAgpC,KACC,gBAAA/pC,EAAC,QAAA,EAAK,WAAU,kBAAiB,OAAO,EAAE,UAAU,UAAU,UAAU,OAAA,GACrE,UAAA0O,EAAO,cACV;AAAA,cAEF,gBAAA1O,EAAC,QAAA,EAAK,WAAW,yBAA0B+pC,IAAmB,KAAT,MAAW,IAAI,OAAOA,IAAU5wB,EAAK,QAASA,EAAK,KAAK,SAASA,EAAK,KACxH,UAAA4wB,IAAU5wB,EAAK,QAASA,EAAK,KAAK,SAASA,EAAK,IAAA,CACnD;AAAA,YAAA,GACF;AAAA,YACA,gBAAApY,EAAC,OAAA,EAAI,WAAU,2CACZ,UAAA;AAAA,cAAA,gBAAAf;AAAA,gBAACiB;AAAA,gBAAA;AAAA,kBACA,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,OAAM;AAAA,kBACN,SAAS,MAAMsoC,EAAWQ,IAAU5wB,EAAK,KAAKA,EAAK,KAAK4wB,CAAO;AAAA,kBAE9D,UAAAr7B,EAAO;AAAA,gBAAA;AAAA,cAAA;AAAA,cAETq7B,KACC,gBAAA/pC;AAAA,gBAACiB;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,WAAU;AAAA,kBACV,OAAOkc,IAAa,aAAa;AAAA,kBACjC,SAAS,MAAMusB,EAAavwB,EAAK,EAAE;AAAA,kBAElC,UAAAgE,IAAazO,EAAO,UAAUA,EAAO;AAAA,gBAAA;AAAA,cAAA;AAAA,YACxC,EAAA,CAEJ;AAAA,UAAA,GACF;AAAA,UAEA,gBAAA3N,EAAC,OAAA,EAAI,WAAU,QACb,UAAA;AAAA,YAAA,gBAAAf,EAAC,OAAA,EAAI,WAAU,yBAAwB,OAAO,EAAE,UAAU,SAAA,GAAY,UAAA,aAAA,CAAU;AAAA,YAChF,gBAAAe,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,cAAA,gBAAAf;AAAA,gBAACmoC;AAAA,gBAAA;AAAA,kBACC,KAAK6B;AAAA,kBACL,SAAA1sB;AAAA,kBACA,WAAU;AAAA,kBACV,OAAM;AAAA,gBAAA;AAAA,cAAA;AAAA,cAER,gBAAAvc,EAAC,QAAA,EAAK,WAAU,4BAA2B,OAAO,EAAE,UAAU,QAAQ,WAAW,SAAS,UAAU,UAAA,GACjG,UAAA;AAAA,gBAAAipC;AAAA,gBAAW;AAAA,cAAA,EAAA,CACd;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,GACF;AAAA,UAECD,KAAW5sB,KACV,gBAAAnd,EAAC,OAAA,EAAI,WAAU,wBACZ,UAAAmZ,EAAK,OACH,OAAO,CAAA8wB,MAAa;AACnB,kBAAM,CAAC7F,CAAS,IAAIZ,GAAyByG,EAAU,MAAM9iC,GAAQg8B,CAAU;AAC/E,mBAAOiB;AAAA,UACT,CAAC,EACA,IAAI,CAAA6F,MAAaJ,EAAW,EAAE,GAAGI,GAAW,MAAM,WAAW,EAAI,CAAC,EAAA,CAEvE;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA;AAAA,MAlEKF,IAAU,SAAS5wB,EAAK,EAAE,KAAK,SAASA,EAAK,GAAG;AAAA,IAAA;AAAA,EAqE3D;AAEA,SACE,gBAAApY,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,IAAA,gBAAAA,EAAC,SAAI,WAAU,2CAA0C,OAAO,EAAE,YAAY,KAC5E,UAAA;AAAA,MAAA,gBAAAf,EAAC,QAAA,EAAK,WAAU,kCAAiC,OAAO,EAAE,UAAU,UAAU,WAAW,mBAAA,GACtF,UAAA0O,EAAO,WAAA,CACV;AAAA,MACA,gBAAA1O,EAAC,OAAA,EAAI,WAAU,oCAAmC,OAAO,EAAE,UAAU,WAAW,eAAe,aAAa,UAAA,eAAA,CAE5G;AAAA,IAAA,GACF;AAAA,IACA,gBAAAA,EAAC0jB,IAAA,EAAI,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,WAAU,OACxC,UAAAkmB,EAAa,IAAI,CAAAzwB,MAChB,gBAAAnZ,EAAC2jB,IAAA,EACE,UAAAkmB,EAAW1wB,CAAI,EAAA,GADRA,EAAK,SAAS,UAAU,aAAaA,EAAK,EAAE,KAAK,aAAaA,EAAK,GAAG,EAEhF,CACD,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;AAEAmwB,GAAiB,YAAY;AAAA,EAC3B,SAASppC,EAAU,OAAO;AAAA,EAC1B,YAAYA,EAAU,KAAK;AAAA,EAC3B,YAAYA,EAAU;AACxB;AChJA,MAAMgqC,KAAsB,CAAC,EAAE,SAAAlmC,GAAS,YAAAm/B,QAAiB;AACvD,QAAM,EAAE,cAAA4E,GAAc,mBAAAoC,EAAA,IAAsBjC,GAAA,GAEtCkC,IAAiB,CAACnjC,GAAK8iC,MAAY;AACvC,UAAMM,IAAS,CAACC,MAAa;AAC3B,YAAMjqC,IAAU,SAAS,eAAeiqC,CAAQ;AAChD,aAAIjqC,KACFA,EAAQ,eAAe,EAAE,UAAU,UAAU,OAAO,SAAS,GAG7DA,EAAQ,UAAU,IAAI,mBAAmB,GACzC,WAAW,MAAM;AACf,QAAAA,EAAQ,UAAU,OAAO,mBAAmB;AAAA,MAC9C,GAAG,GAAI,GACA,MAEF;AAAA,IACT,GAEMkqC,IAAgB,2BAA2BtjC,CAAG,IAC9CujC,IAAgB,gBAAgBvjC,CAAG;AAEzC,QAAI8iC;AACF,MAAAM,EAAOG,CAAa;AAAA,aAGC,SAAS,eAAeD,CAAa;AAIxD,MAAAF,EAAOE,CAAa;AAAA,SACf;AAGL,YAAME,KADSzmC,EAAQ,UAAU,UAAU,CAAA,GAChB,KAAK,CAAAsD,OAAMA,EAAE,UAAU,CAAA,GAAI,SAASL,CAAG,CAAC;AAEnE,UAAIwjC,GAAa;AACf,cAAMC,IAAc,SAAS,cAAc,iBAAiBD,EAAY,EAAE,eAAe;AACzF,QAAIC,MAEFA,EAAY,MAAA,GAGZ,WAAW,MAAM;AACf,UAAAL,EAAOE,CAAa;AAAA,QACtB,GAAG,GAAG;AAAA,MAEV;AAEE,QAAAF,EAAOE,CAAa;AAAA,IAExB;AAAA,EAEJ;AAIA,SAFkB,OAAO,KAAKvmC,EAAQ,YAAY,UAAU,CAAA,CAAE,EAAE,SAAS,2BAMpE,UAAAmmC,KAAqBpC,KACpB,gBAAA/nC,EAAC,OAAA,EAAI,WAAU,QACb,UAAA,gBAAAA;AAAA,IAACspC;AAAA,IAAA;AAAA,MACC,SAAAtlC;AAAA,MACA,YAAYomC;AAAA,MACZ,YAAAjH;AAAA,IAAA;AAAA,EAAA,GAEJ,EAAA,CAEJ,IAbqB;AAezB;AAEA+G,GAAoB,YAAY;AAAA,EAC9B,SAAShqC,EAAU,OAAO;AAAA,EAC1B,YAAYA,EAAU;AACxB;AC3EA,MAAMyqC,KAAQ,CAAC9jC,GAAO+jC,GAAOC,MAC3B,gBAAA7qC,EAAC4mC,MAAqB,WAAU,aAAY,OAAO,EAAE,OAAO,UAC1D,UAAA,gBAAA7lC,EAAC6lC,GAAK,MAAL,EAAU,WAAU,yDACnB,UAAA;AAAA,EAAA,gBAAA5mC,EAAC,SACC,UAAA,gBAAAe,EAAC6lC,GAAK,OAAL,EAAW,WAAU,WACnB,UAAA;AAAA,IAAA//B,EAAM;AAAA,IACP,gBAAA9F,EAAC,QAAA,EAAK,WAAU,mCACb,UAAA;AAAA,MAAA;AAAA,MAAI;AAAA,MACH8F,EAAM;AAAA,MAAI;AAAA,IAAA,EAAA,CACd;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAAA,EACA,gBAAA7G;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO6qC,IAAY,mBAAmB;AAAA,MACtC,OAAO,EAAE,QAAQA,IAAY,YAAY,cAAA;AAAA,MAEzC,UAAA,gBAAA9pC;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAS4pC,IAAY,YAAY;AAAA,UACjC,SAAS,CAAC3yB,MAAU0yB,EAAM1yB,GAAOrR,CAAK;AAAA,UACtC,UAAU,CAACgkC;AAAA,UAEV,UAAA;AAAA,YAAAn8B,EAAO;AAAA,YAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACjB;AAAA,EAAA;AACF,GACF,EAAA,GAxBS7H,EAAM,GAyBjB;AAGF,SAASikC,GAAWhmC,GAAO;AACzB,QAAM,EAAE,MAAAqD,GAAM,SAAAnE,GAAS,SAAA+mC,GAAS,OAAAH,GAAO,kBAAAI,MAAqBlmC;AAC5D,MAAI,CAACqD,EAAM,QAAO;AAElB,QAAMhB,IAASnD,EAAQ,oBAAoB,UAAU,CAAA,GAC/CoD,IAAWpD,EAAQ,YAAY,CAAA;AAGrC,MADoB,OAAO,OAAOmD,CAAM,EACxB,SAAS,EAAG,QAAO;AAwCnC,QAAM8jC,KArCyB,CAACvyB,GAAWwyB,MAAkB;AAC3D,UAAMvyB,IAASuyB,EAAc,UAAU,CAAA,GACjCtyB,IAAY,OAAO,OAAOF,CAAS,GAGnCG,wBAAuB,IAAA;AAC7B,IAAAF,EAAO,QAAQ,CAACtR,MAAU;AACxB,MAAAA,EAAM,QAAQ,QAAQ,CAACjD,MAAayU,EAAiB,IAAIzU,CAAQ,CAAC;AAAA,IACpE,CAAC;AAGD,UAAM0U,IAAkBF,EAAU;AAAA,MAChC,CAAC/R,MAAU,CAACgS,EAAiB,IAAIhS,EAAM,GAAG;AAAA,IAAA,GAItCkS,IAAQ;AAAA,MACZ,GAAGJ,EAAO,IAAI,CAACtR,OAAW;AAAA,QACxB,MAAM;AAAA,QACN,MAAMA;AAAA,QACN,UAAUA,EAAM,YAAY;AAAA,MAAA,EAC5B;AAAA,MACF,GAAGyR,EAAgB,IAAI,CAACjS,OAAW;AAAA,QACjC,MAAM;AAAA,QACN,MAAMA;AAAA,QACN,UAAUA,EAAM,YAAY;AAAA,MAAA,EAC5B;AAAA,IAAA;AAKJ,WAAO;AAAA,MACL,OAHkB9E,GAAOgX,GAAO,UAAU;AAAA,MAI1C,WAAWL;AAAA,IAAA;AAAA,EAEf,GAEyCvR,GAAQC,CAAQ,GAEnD+jC,KAAqB/jC,EAAS,UAAU,CAAA,GAAI;AAAA,IAAK,CAACC,MACtDA,EAAM,QAAQ,SAAS2jC,CAAgB;AAAA,EAAA;AAEzC,MAAII,IAAkB;AACtB,EAAID,MACFC,KAAmBhkC,EAAS,UAAU,CAAA,GAAI;AAAA,IAAK,CAACC,MAC9CA,EAAM,QAAQ,SAAS2jC,CAAgB;AAAA,EAAA,GACtC;AAIL,QAAM5D,IAAS,CAAA;AACf,SAAA6D,EAAU,MAAM,QAAQ,CAAC9xB,MAAS;AAChC,QAAIA,EAAK,SAAS,SAAS;AACzB,YAAM4B,IACJ5B,EAAK,KAAK,QACN,IAAI,CAAC/U,MAAa6mC,EAAU,UAAU7mC,CAAQ,CAAC,EAChD,OAAO,OAAO,KAAK,CAAA;AACxB,MAAAgjC,EAAO;AAAA,QACL,gBAAArmC;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAU;AAAA,YAEV,UAAA;AAAA,cAAA,gBAAAf,EAAC,MAAA,EAAI,UAAAmZ,EAAK,KAAK,OAAM;AAAA,gCACpB,OAAA,EAAI,WAAU,0BACZ,UAAA4B,EAAY,IAAI,CAAClU,MAAU;AAC1B,oBAAIgkC,IAAY;AAChB,uBAAKM,IAKHN,IAAY1xB,EAAK,KAAK,OAAOiyB,IAH7BP,IAAY,IAKPF,GAAM9jC,GAAO+jC,GAAOC,CAAS;AAAA,cACtC,CAAC,EAAA,CACH;AAAA,YAAA;AAAA,UAAA;AAAA,UAhBK,SAAS1xB,EAAK,KAAK,EAAE;AAAA,QAAA;AAAA,MAiB5B;AAAA,IAEJ,OAAO;AAEL,UAAI0xB,IAAY;AAChB,MAAKM,IAKHN,IAAY,KAHZA,IAAY,IAKdzD,EAAO,KAAKuD,GAAMxxB,EAAK,MAAMyxB,GAAOC,CAAS,CAAC;AAAA,IAChD;AAAA,EACF,CAAC,GAGC,gBAAA9pC,EAACuI,KAAM,MAAK,MAAK,UAAQ,IAAC,MAAAnB,GAAY,QAAQ4iC,GAC5C,UAAA;AAAA,IAAA,gBAAA/qC,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,4BAACA,EAAM,OAAN,EAAY,UAAA,eAAA,CAAY,EAAA,CAC3B;AAAA,sBACCA,EAAM,MAAN,EAAW,OAAO,EAAE,WAAW,QAAQ,WAAW,OAAA,GACjD,UAAA,gBAAAtJ,EAAC,OAAA,EAAI,WAAU,4BAA4B,aAAO,EAAA,CACpD;AAAA,EAAA,GACF;AAEJ;AAEA8qC,GAAW,YAAY;AAAA,EACrB,MAAM5qC,EAAU,KAAK;AAAA,EACrB,kBAAkBA,EAAU,OAAO;AAAA,EACnC,SAASA,EAAU,OAAO;AAAA,EAC1B,SAASA,EAAU,KAAK;AAAA,EACxB,OAAOA,EAAU,KAAK;AACxB;AC5JO,MAAMmrC,KAAgB;AAAA,EAC3B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,MAAM,EAAE,OAAO,QAAA;AAAA,EACf,UAAU,EAAE,GAAG,KAAK,GAAG,GAAA;AAAA,EACvB,OAAO;AAAA,EACP,QAAQ;AACV,GAEaC,KAAiB;AAAA,EAC5B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,MAAM,EAAE,OAAO,MAAA;AAAA,EACf,UAAU,EAAE,GAAG,KAAK,GAAG,IAAA;AAAA,EACvB,OAAO;AAAA,EACP,QAAQ;AACV,GAEaC,KAAe,CAACF,IAAeC,EAAc,GAE7CE,KAAkB;AAAA,EAC7B,GAAG;AAAA,EACH,GAAG;AAAA,EACH,MAAM;AACR,GCfMC,KAAoB,CAAAC,MAAQ;AAChC,QAAMC,IAAOzmC,EAAUwmC,KAAQ,EAAE,GAC3BE,IAAMD,GAAM,YAAY,CAAA;AAE9B,MAAIC,EAAI,SAAS;AACf,WAAO,EAAE,OAAOL,IAAc,OAAO,CAAA,GAAI,UAAUC,GAAA;AAErD,QAAMK,IAAQD,EAAI,OAAO,CAAAlM,MAAM,CAACA,EAAG,MAAM,GACnCoM,IAAQF,EACX,OAAO,CAAAlM,MAAMA,EAAG,UAAUA,EAAG,WAAWA,EAAG,MAAM,EACjD,IAAI,CAAAA,OACI,EAAE,GAAGA,GAAI,WAAW,EAAE,MAAMqM,GAAW,cAAY,EAC3D,GACGC,IAAW;AAAA,IACf,GAAGL,GAAM,SAAS,CAAC;AAAA,IACnB,GAAGA,GAAM,SAAS,CAAC;AAAA,IACnB,MAAMA,GAAM;AAAA,EAAA;AAEd,SAAO,EAAE,OAAAE,GAAO,OAAAC,GAAO,UAAAE,EAAA;AACzB,GCvBMC,KAAY,CAACC,GAAOC,MAAWD,EAAM,OAAO,OAAO,CAAAhjC,MAAKA,EAAE,OAAOijC,CAAM,EAAE,CAAC,GAG1EC,KAAe,CAACC,GAAcF,GAAQG,GAAaC,MAAS;AAChE,QAAM,EAAE,OAAAV,GAAO,OAAAC,EAAgB,IAAIO,GAG7BG,IAAKX,GAAO,OAAO,CAAA3iC,MAAKA,EAAE,OAAOijC,CAAM;AAC7C,MAAIK,EAAG,SAAS,EAAG,QAAO;AAC1B,QAAM,EAAE,OAAA3lC,EAAA,IAAU2lC,EAAG,CAAC,EAAE,MAClBC,IAAKX,KAAS,CAAA,GACdY,IAAKb,GAAO,OAAO,CAAA3iC,MAAKA,EAAE,SAAS,aAAaA,EAAE,IAAI,KAAK,CAAA,GAC3DyjC,IAAOF,EAAG,OAAO,CAAAvjC,MAAKA,EAAE,WAAWijC,CAAM,EAAE,IAAI,CAAAjjC,MAAKA,EAAE,MAAM,KAAK,CAAA,GACjE0jC,IAASF,EAAG,OAAO,CAAAG,MAAKF,EAAK,SAASE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAA3jC,OAAM,EAAE,KAAKA,EAAE,IAAI,OAAO,GAAGA,EAAE,KAAK,MAAM,KAAK,IAAIA,EAAE,KAAK,MAAM,GAAG,IAAA,EAAM,KAAK,CAAA;AACtI,MAAI0jC,EAAO,SAAS,GAAG;AACrB,UAAME,KAAYjmC,EAAM,UAAU,CAAA,GAAI,SAAS;AAC/C,IAAAA,EAAM,OAAO,KAAK;AAAA,MAChB,MAAM4S,EAAW;AAAA,MAAW,SAAS;AAAA,MAAI,OAAO;AAAA,MAAY,OAAO;AAAA,MAAQ,UAAU;AAAA,MAAO,YAAY,CAAA;AAAA,MAAI,iBAAiB,CAAA;AAAA,MAAI,UAAAqzB;AAAA,MAAU,YAAYF;AAAA,IAAA,CACxJ;AAAA,EACH;AACA,SAAA/lC,EAAM,UAAU,EAAE,SAASslC,GAAQ,cAAcG,EAAA,GACjDzlC,EAAM,cAAc0lC,IAAO,GACpB1lC;AACT,GAEMkmC,KAAmB,CAACC,GAAQC,MAAU;AAC1C,QAAMpmC,IAAQmmC;AACd,SAAAnmC,EAAM,OAAO,IAAI,CAAAqmC,MAAM;AACrB,UAAM3oC,IAAI2oC;AACV,QAAIC,IAAQ5oC,EAAE;AAEd,WAAI,CAAC4oC,KAASA,EAAM,SAAS,KAAKA,EAAM,OAAO,CAAA,MAAK,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,WAAWA,EAAM,SAAe5oC,KAChH4oC,IAAQA,EAAM,OAAO,CAAA,MAAK,EAAE,UAAUF,CAAK,GAEvCE,EAAM,SAAS,KACjB,OAAO5oC,EAAE,aACFA,MAGT4oC,IAAQA,EAAM,IAAI,CAAA,MAAK;AACrB,YAAMN,IAAI;AACV,aAAAA,EAAE,QAAQhmC,EAAM,KACTgmC;AAAA,IACT,CAAC,GACDtoC,EAAE,cAAc4oC,GACT5oC;AAAA,EACT,CAAC,GACMsC,EAAM;AACf,GAEMumC,KAAc,CAACz1B,GAAK1Q,GAAKomC,MAAa;AAC1C,QAAM9U,IAAO,CAAA,GACP+U,IAAK,OAAO,KAAK31B,CAAG;AAC1B,gBAAO,KAAKA,CAAG,EAAE,QAAQ,CAAAzO,MAAK;AAC5B,QAAI,OAAO,UAAU,eAAe,KAAKyO,GAAKzO,CAAC,MAC7CqvB,EAAKrvB,CAAC,IAAIyO,EAAIzO,CAAC,GACXA,MAAMjC,IAAK;AACb,YAAMsmC,IAAchV,EAAKrvB,CAAC,EAAE,UACtBskC,IAAMF,EAAG,OAAO,CAAA/f,MAAKA,MAAM8f,EAAS,OAAO9f,EAAE,WAAW,GAAG8f,EAAS,GAAG,GAAG,CAAC,EAAE;AACnF,UAAIG,MAAQ;AACV,QAAAjV,EAAK8U,EAAS,GAAG,IAAIA,GACrB9U,EAAK8U,EAAS,GAAG,EAAE,WAAWE;AAAA,WACzB;AACL,cAAME,IAAOJ,EAAS;AACtB,QAAA9U,EAAK,GAAG8U,EAAS,GAAG,IAAIG,CAAG,EAAE,IAAIH,GACjC9U,EAAK,GAAG8U,EAAS,GAAG,IAAIG,CAAG,EAAE,EAAE,WAAWD,GAC1ChV,EAAK,GAAG8U,EAAS,GAAG,IAAIG,CAAG,EAAE,EAAE,MAAM,GAAGH,EAAS,GAAG,IAAIG,CAAG,IAC3DjV,EAAK8U,EAAS,GAAG,EAAE,SAASN,GAAiBM,GAAUI,CAAI;AAAA,MAC7D;AAAA,IACF;AAAA,EAEJ,CAAC,GACG,OAAO,KAAK91B,CAAG,EAAE,WAAW,MAAG4gB,EAAK8U,EAAS,GAAG,IAAIA,IACjD9U;AACT,GAEMmV,KAAmB,CAACvmC,GAAQwmC,MAAU;AAC1C,MAAIC,IAAM,CAAA;AACV,gBAAO,KAAKzmC,CAAM,EAAE,QAAQ,CAAA+B,MAAK;AAC/B,IAAI,OAAO,UAAU,eAAe,KAAK/B,GAAQ+B,CAAC,MAC5C/B,EAAO+B,CAAC,EAAE,QAAQykC,IAAOC,IAAMA,EAAI,OAAOD,CAAK,IAC1CxmC,EAAO+B,CAAC,EAAE,WAAY/B,EAAO+B,CAAC,EAAE,QAAQ,iBAAiBykC,MAChEC,IAAMA,EAAI,OAAOF,GAAiBvmC,GAAQA,EAAO+B,CAAC,EAAE,GAAG,CAAC;AAAA,EAG9D,CAAC,GACM0kC;AACT,GAEMC,KAAmB,CAACC,IAAoB,CAAA,GAAIC,IAAW,IAAIC,IAAS,OAAO;AAC/E,QAAM7mC,IAAS2mC;AAEf,MAAI,EADYE,EAAO,QAAQA,EAAO,KAAK,QAAQA,EAAO,KAAK,MAAM,MAAM,MAC7D,QAAO,CAAA;AACrB,MAAIJ,IAAM,CAAA;AACV,gBAAO,KAAKzmC,CAAM,EAAE,QAAQ,CAAA+B,MAAK;AAC/B,QAAI,OAAO,UAAU,eAAe,KAAK/B,GAAQ+B,CAAC,GAAG;AACnD,YAAMhC,IAAKC,EAAO+B,CAAC,EAAE;AACrB,MAAIhC,KAAOA,EAAG,iBAAiB6mC,KAAc7mC,EAAG,YAAY8mC,EAAO,OACjEJ,IAAMA,EAAI,OAAOF,GAAiBvmC,GAAQA,EAAO+B,CAAC,EAAE,GAAG,CAAC;AAAA,IAE5D;AAAA,EACF,CAAC,GACD0kC,EAAI,QAAQ,CAAA1kC,MAAK,OAAO/B,EAAO+B,CAAC,CAAC,GAC1B/B;AACT,GAEM8mC,KAAc,CAACC,MAAa;AAChC,QAAMC,IAAOjpC,EAAUgpC,CAAQ,GACzB,EAAE,QAAA/mC,GAAQ,MAAAukC,GAAM,YAAA0C,EAAA,IAAeD,GAE/B,EAAE,OAAAtC,GAAO,OAAAC,GAAO,UAAAE,EAAA,IAAaoC,IACjClpC,EAAUkpC,CAAU,IACpB3C,GAAkBC,CAAI,GAElBpwB,IAAevZ,GAAOoF,GAAQ,CAAA7C,MAAKA,EAAE,QAAQ;AACnD,MAAIunC,GAAO,OAAO,CAAA3iC,MAAK,CAAC,CAAC,SAAS,QAAQ,EAAE,SAASA,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG;AAExE,UAAMmlC,IAAMxC,GACNY,IAAKX,GACLY,IAAK2B,EAAI,OAAO,CAAAnlC,MAAKA,EAAE,SAAS,aAAaA,EAAE,IAAI,GACnDolC,IAAM7B,EAAG,OAAO,CAAAvjC,MAAKA,EAAE,WAAW,GAAG,EAAE,IAAI,CAAAA,MAAKA,EAAE,MAAM,GACxDqlC,IAAY7B,EAAG,OAAO,CAAAG,MAAKyB,EAAI,SAASzB,EAAE,EAAE,CAAC,GAC7C2B,IAAS,CAAA;AACf,IAAAlzB,EAAa,QAAQ,CAACmzB,MAAgB;AACpC,YAAMC,IAASD;AACf,UAAIC,EAAO,IAAI;AACb,cAAM5B,KAAY4B,EAAO,UAAU,CAAA,GAAI,SAAS;AAEhD,QADeH,EAAU,OAAO,CAAA1B,MAAKA,EAAE,KAAK,MAAM,QAAQ6B,EAAO,GAAG,EAC7D,QAAQ,CAACC,MAAQ;AACtB,gBAAMC,IAAcnC,EAAG,OAAO,CAAAvjC,MAAKA,EAAE,WAAWylC,EAAI,MAAMzlC,EAAE,WAAWA,EAAE,MAAM,EAAE,IAAI,CAAAA,MAAKA,EAAE,MAAM,GAC5F0jC,IAASF,EAAG,OAAO,CAAAG,MAAK+B,EAAY,SAAS/B,EAAE,EAAE,CAAC,EAAE,IAAI,CAAA3jC,OAAM,EAAE,KAAKA,EAAE,IAAI,OAAO,GAAGA,EAAE,KAAK,MAAM,KAAK,IAAIA,EAAE,KAAK,MAAM,GAAG,IAAA,EAAM;AACvI,UAAI0jC,EAAO,SAAS,KAClB8B,EAAO,OAAO,KAAK;AAAA,YACjB,MAAMj1B,EAAW;AAAA,YAAW,SAAS;AAAA,YAAI,OAAO;AAAA,YAAY,OAAO;AAAA,YAAQ,UAAU;AAAA,YAAO,YAAY,CAAA;AAAA,YAAI,iBAAiB,CAAA;AAAA,YAAI,UAAAqzB;AAAA,YAAU,YAAYF;AAAA,UAAA,CACxJ,GAEH8B,EAAO,UAAU,EAAE,SAASC,EAAI,GAAA,GAChCD,EAAO,cAAc,GACrBA,EAAO,UAAUp2B,GAAA,GACjBk2B,EAAO,KAAKE,CAAM;AAAA,QACpB,CAAC;AAAA,MACH;AACE,QAAAF,EAAO,KAAKE,CAAM;AAAA,IAEtB,CAAC;AACD,UAAMG,IAAKrzB,GAAegzB,CAAM;AAChC,IAAAL,EAAK,SAASU;AAAA,EAChB;AACE,IAAAV,EAAK,SAAShnC;AAEhB,SAAOgnC;AACT,GC3JMW,KAAyB,CAACC,GAASC,GAAcC,MAAgB;AACrE,QAAMC,IAAczuC,GAAA,GACd,CAAC0uC,GAAOC,CAAQ,IAAIC,GAAWN,GAASC,GAAcC,CAAW;AAEvE,SAAA14B,GAAU,MAAM;AACd,IAAI24B,EAAY,YACdA,EAAY,QAAQC,CAAK,GACzBD,EAAY,UAAU;AAAA,EAE1B,GAAG,CAACC,CAAK,CAAC,GAOH,CAACA,GALe,CAACG,GAAQjzB,MAAa;AAC3C,IAAA6yB,EAAY,UAAU7yB,GACtB+yB,EAASE,CAAM;AAAA,EACjB,CAE6B;AAC/B;ACZA,SAASC,GAAyB;AAAA,EAChC,UAAA77B;AAAA,EAAU,UAAA8d;AACZ,GAAG;AACD,QAAM,EAAE,WAAA2T,EAAA,IAAcZ,GAAA,GAChBiL,IAAmBrK,GAAW,kBAC9BsK,IAActK,GAAW,aACzB1Q,IAAW0Q,GAAW,OAEtBuK,IAAqBF,GAAkB,mBAAmB,uBAAuB,CAAA,GAGjFG,IAActgB,GAASogB,CAAW,EAAE,QAAQ,IAG5CG,IAAoB,CAACtpB,GAAWjlB,MAAU;AAC9C,QAAIozB,GAAU;AACZ,YAAMob,IAAmB,EAAE,GAAGL,EAAA;AAC9B,MAAKK,EAAiB,sBACpBA,EAAiB,oBAAoB,CAAA,IAElCA,EAAiB,kBAAkB,wBACtCA,EAAiB,kBAAkB,sBAAsB,CAAA,IAE3DA,EAAiB,kBAAkB,oBAAoBvpB,CAAS,IAAIjlB,GACpEozB,EAASob,CAAgB;AAAA,IAC3B;AAAA,EACF,GAGMC,IAAgB,CAACxpB,MACjBA,MAAc,YACTopB,EAAmBppB,CAAS,KAAKqpB,IAEnCD,EAAmBppB,CAAS,KAAK,IAIpCpI,IAAS;AAAA,IACb;AAAA,MACE,KAAK;AAAA,MAAS,OAAO;AAAA,MAAS,MAAM;AAAA,MAAQ,aAAa;AAAA,MAAe,UAAU;AAAA,IAAA;AAAA,IAEpF;AAAA,MACE,KAAK;AAAA,MAAQ,OAAO;AAAA,MAAQ,MAAM;AAAA,MAAQ,aAAa;AAAA,MAAI,UAAU;AAAA,IAAA;AAAA,IAEvE;AAAA,MACE,KAAK;AAAA,MAAQ,OAAO;AAAA,MAAQ,MAAM;AAAA,MAAQ,aAAa;AAAA,MAAI,UAAU;AAAA,IAAA;AAAA,IAEvE;AAAA,MACE,KAAK;AAAA,MAAe,OAAO;AAAA,MAAe,MAAM;AAAA,MAAQ,aAAa;AAAA,MAA0B,UAAU;AAAA,IAAA;AAAA,IAE3G;AAAA,MACE,KAAK;AAAA,MAAW,OAAO;AAAA,MAAW,MAAM;AAAA,MAAQ,aAAa;AAAA,MAAI,UAAU;AAAA,IAAA;AAAA,IAE7E;AAAA,MACE,KAAK;AAAA,MAAY,OAAO;AAAA,MAAY,MAAM;AAAA,MAAQ,aAAa;AAAA,MAAuB,UAAU;AAAA,IAAA;AAAA,EAClG,GAII4L,IAAO,CAAA;AACb,WAAS6e,IAAI,GAAGA,IAAIzqB,EAAO,QAAQyqB,KAAK;AACtC,IAAA7e,EAAK,KAAK5L,EAAO,MAAMyqB,GAAGA,IAAI,CAAC,CAAC;AAGlC,SACE,gBAAA3oC;AAAA,IAACod;AAAA,IAAA;AAAA,MACC,kBAAiB;AAAA,MACjB,WAAU;AAAA,MAEV,UAAA,gBAAArc,EAACqc,GAAU,MAAV,EAAe,UAAS,KAAI,OAAO,EAAE,QAAQ,OAAA,GAC5C,UAAA;AAAA,QAAA,gBAAApd;AAAA,UAACod,GAAU;AAAA,UAAV;AAAA,YACC,IAAG;AAAA,YACH,WAAW,8CAA8C/N,GAAA,CAAS;AAAA,YAClE,OAAO,EAAE,WAAW,OAAA;AAAA,YAEpB,UAAA,gBAAArP,EAAC,UAAK,WAAU,yBAAwB,OAAO,EAAE,eAAe,UAAU,UAAA,sBAAA,CAAmB;AAAA,UAAA;AAAA,QAAA;AAAA,QAE/F,gBAAAA,EAACod,GAAU,MAAV,EAAe,WAAU,QACxB,UAAA,gBAAApd,EAAC,OAAA,EAAI,WAAU,mBACZ,UAAA8pB,EAAK,IAAI,CAACF,GAAK/U,MACd,gBAAA9T,EAAC,OAAA,EAAI,WAAW,OAAO8T,MAAU,IAAI,SAAS,EAAE,SAC7C,UAAA;AAAA,UAAA+U,EAAI,IAAI,CAACxjB,MACR,gBAAArF,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,YAAA,gBAAAf,EAACC,EAAK,OAAL,EAAY,UAAAmG,EAAM,OAAM;AAAA,YACzB,gBAAApG;AAAA,cAACC,EAAK;AAAA,cAAL;AAAA,gBACC,MAAMmG,EAAM;AAAA,gBACZ,OAAO0pC,EAAc1pC,EAAM,GAAG;AAAA,gBAC9B,aAAaA,EAAM;AAAA,gBACnB,UAAUorB,KAAY9d,KAAYtN,EAAM;AAAA,gBACxC,UAAUA,EAAM;AAAA,gBAChB,UAAU,CAAC8C,MAAM0mC,EAAkBxpC,EAAM,KAAK8C,EAAE,OAAO,KAAK;AAAA,gBAC5D,OAAO9C,EAAM,WAAW,EAAE,iBAAiB,UAAA,IAAc,CAAA;AAAA,cAAC;AAAA,YAAA;AAAA,UAC5D,KAV6BA,EAAM,GAWrC,CACD;AAAA,UAEAwjB,EAAI,SAAS,KAAK,MAAM,KAAK,EAAE,QAAQ,IAAIA,EAAI,OAAA,CAAQ,EAAE,IAAI,CAACmmB,GAAIC,MACjE,gBAAAhwC,EAAC,OAAA,EAAI,WAAU,WAAA,GAAgB,aAAa4pB,EAAI,CAAC,EAAE,GAAG,OAAOomB,IAAWpmB,EAAI,MAAM,EAAI,CACvF;AAAA,QAAA,EAAA,GAlB2DA,EAAI,IAAI,CAACrlB,MAAMA,EAAE,GAAG,EAAE,KAAK,GAAG,CAmB5F,CACD,EAAA,CACH,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAgrC,GAAyB,YAAY;AAAA,EACnC,UAAUrvC,EAAU;AAAA,EACpB,UAAUA,EAAU;AACtB;AAEAqvC,GAAyB,eAAe;AAAA,EACtC,kBAAkB,CAAA;AAAA,EAClB,aAAa,CAAA;AAAA,EACb,UAAU;AAAA,EACV,UAAU;AACZ;;;;;;;;;;;;GCpHaU,KAAY,CAACjqC,GAAM6oB,MAAO;AACrC,MAAI,CAAC7oB,KAAQ,CAAC6oB;AACZ,WAAO;AAIT,QAAM,EAAE,UAAAqhB,GAAU,UAAAC,GAAU,MAAAC,EAAA,IAAS,OAAO,UACtCC,IAAWD,IAAO,IAAIA,CAAI,KAAK;AAErC,SAAO,GAAGF,CAAQ,KAAKC,CAAQ,GAAGE,CAAQ,wBAAwBrqC,EAAK,YAAA,CAAa,IAAI6oB,CAAE;AAC5F,GAOayhB,KAAoB,CAACC,MAAc;AAC9C,QAAMC,IAAcD,EAAU,CAAC,GAAG,uBAC5BE,IAAYF,EAAU,CAAC,GAAG;AAEhC,SADaN,GAAUO,GAAaC,CAAS;AAE/C,GAOaC,KAAmB,CAACrwC,MACxB4vC,GAAU5vC,GAAS,MAAMA,GAAS,EAAE,GAShCswC,KAAqB,CAACvqC,GAAO/F,MAAY;AACpD,MAAI+F,EAAM,QAAQ;AAChB,WAAO/F,GAAS;AAElB,MAAI+F,EAAM,QAAQ,+BAA+B;AAC/C,UAAMmqC,IAAYlwC,GAAS,KAAK,eAAe;AAC/C,WAAI,CAACkwC,KAAa,CAAC,MAAM,QAAQA,CAAS,KAAKA,EAAU,WAAW,IAC3D,KAEFA,EAAU,CAAC,GAAI,uBAA0B;AAAA,EAClD;AACA,SAAO;AACT,GAQaK,KAAmB,CAACxqC,GAAO/F,MAAY;AAClD,MAAI+F,EAAM,QAAQ;AAChB,WAAOsqC,GAAiBrwC,CAAO;AAEjC,MAAI+F,EAAM,QAAQ,+BAA+B;AAC/C,UAAMmqC,IAAYlwC,GAAS,KAAK,eAAe;AAC/C,WAAI,CAACkwC,KAAa,CAAC,MAAM,QAAQA,CAAS,KAAKA,EAAU,WAAW,IAC3D,KAEFD,GAAkBC,CAAS;AAAA,EACpC;AACA,SAAO;AACT,GAQaM,KAAwB,CAACzqC,GAAO/F,MAAY;AACvD,QAAMke,IAAQoyB,GAAmBvqC,GAAO/F,CAAO;AAE/C,MAAI,CAACke;AACH,WACE,gBAAAve;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,MAAK;AAAA,QACL,OAAM;AAAA,QACN,UAAQ;AAAA,QACR,OAAO,EAAE,iBAAiB,UAAA;AAAA,MAAU;AAAA,IAAA;AAK1C,QAAMkoB,IAAMyoB,GAAiBxqC,GAAO/F,CAAO;AAE3C,2BACG,OAAA,EACC,UAAA,gBAAAL;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAMmoB;AAAA,MACN,QAAO;AAAA,MACP,KAAI;AAAA,MACJ,OAAO;AAAA,QACL,SAAS;AAAA,QACT,SAAS;AAAA,QACT,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,gBAAgB;AAAA,QAChB,OAAO;AAAA,QACP,UAAU;AAAA,QACV,cAAc;AAAA,QACd,YAAY;AAAA,MAAA;AAAA,MAGb,UAAA5J;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;ACvHA,SAASuyB,KAAuB;AAC9B,QAAM,EAAE,WAAA3L,EAAA,IAAcZ,GAAA,GAChBlkC,IAAU8kC,GAAW;AAC3B,MAAIlhC,IAAc5D,GAAS,MAAM,YAAA,KAAiB;AAElD,EAAIA,GAAS,cAAc,gBACzB4D,IAAc5D,GAAS,eAAe,SAAS;AAIjD,QAAM0wC,IAAe,CAACC,MAChB,OAAOA,KAAa,WACfC,GAAqB,WAAW,KAAK,CAAC1sC,MAAMA,EAAE,QAAQysC,CAAQ,IAEhEA,GAIHE,KADkBD,GAAqBhtC,CAAW,KAAKgtC,GAAqB,SAC7C,IAAIF,CAAY,EAAE,OAAO,CAACxsC,MAAMA,MAAM,MAAS,GAG9E4sC,IAAmBltC,EACtB,MAAM,GAAG,EACT,IAAI,CAACmtC,MAASA,EAAK,OAAO,CAAC,EAAE,YAAA,IAAgBA,EAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,GAAG,GAGLtB,IAAgB,CAAC1pC,MAAU;AAC/B,UAAM,EAAE,KAAAa,GAAK,eAAAoqC,GAAe,QAAAz/B,EAAA,IAAWxL;AAGvC,QAAIwL,MAAW;AACb,aAAI3K,MAAQ,sBACH,oBAAI,KAAA,GAAO,eAAA,IAEb;AAIT,QAAIA,MAAQ,UAAUhD;AACpB,aAAO,GAAGA,CAAW;AAIvB,QAAIgD,MAAQ;AACV,aAAO5G,GAAS,MAAM,MAAM,GAAG,GAAG,IAAA,EAAM,KAAA;AAI1C,QAAIgxC,GAAe;AACjB,YAAMC,IAAYjxC,IAAU4G,CAAG,KAAK,IAC9BsqC,IAAkBlxC,IAAUgxC,CAAa,KAAK;AACpD,aAAOE,IAAkB,GAAGD,CAAS,IAAIC,CAAe,KAAKD;AAAA,IAC/D;AAEA,WAAOjxC,IAAU4G,CAAG,KAAK;AAAA,EAC3B,GAGMuqC,IAAgB,CAACvqC,GAAKsX,MACtBtX,MAAQ,SACH,qBAEF,GAAGkqC,CAAgB,IAAI5yB,CAAK,IAI/BuL,IAAO,CAAA;AACb,WAAS6e,IAAI,GAAGA,IAAIuI,EAAa,QAAQvI,KAAK;AAC5C,IAAA7e,EAAK,KAAKonB,EAAa,MAAMvI,GAAGA,IAAI,CAAC,CAAC;AAGxC,SACE,gBAAA3oC;AAAA,IAACod;AAAA,IAAA;AAAA,MACC,kBAAiB;AAAA,MACjB,WAAU;AAAA,MAEV,UAAA,gBAAArc,EAACqc,GAAU,MAAV,EAAe,UAAS,KAAI,OAAO,EAAE,QAAQ,OAAA,GAC5C,UAAA;AAAA,QAAA,gBAAApd;AAAA,UAACod,GAAU;AAAA,UAAV;AAAA,YACC,IAAG;AAAA,YACH,WAAW,8CAA8C/N,GAAA,CAAS;AAAA,YAClE,OAAO,EAAE,WAAW,OAAA;AAAA,YAEpB,UAAA,gBAAAtO,EAAC,UAAK,WAAU,yBAAwB,OAAO,EAAE,eAAe,UAAU,UAAA;AAAA,cAAA;AAAA,cAEvE;AAAA,cACAowC;AAAA,YAAA,EAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,QAEF,gBAAAnxC,EAACod,GAAU,MAAV,EAAe,WAAU,QACxB,UAAA,gBAAApd,EAAC,OAAA,EAAI,WAAU,mBAAkB,OAAO,EAAE,YAAY,MAAA,GACnD,UAAA8pB,EAAK,IAAI,CAACF,MACT,gBAAA7oB,EAAC,OAAA,EAAI,WAAU,YACZ,UAAA;AAAA,UAAA6oB,EAAI,IAAI,CAACxjB,MACR,gBAAArF,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,YAAA,gBAAAf,EAACC,EAAK,OAAL,EAAW,OAAOmG,EAAM,cAAc,IACpC,UAAAorC,EAAcprC,EAAM,KAAKA,EAAM,KAAK,EAAA,CACvC;AAAA,YACCA,EAAM,QAAQ,wBACbyqC,GAAsBzqC,GAAO/F,CAAO,IAEpC,gBAAAL;AAAA,cAACC,EAAK;AAAA,cAAL;AAAA,gBACC,MAAK;AAAA,gBACL,OAAO6vC,EAAc1pC,CAAK;AAAA,gBAC1B,UAAQ;AAAA,gBACR,OAAO,EAAE,iBAAiB,UAAA;AAAA,cAAU;AAAA,YAAA;AAAA,UACtC,KAZ2BA,EAAM,GAcrC,CACD;AAAA,UAEAwjB,EAAI,SAAS,KAAK,MAAM,KAAK,EAAE,QAAQ,IAAIA,EAAI,OAAA,CAAQ,EAAE,IAAI,CAACmmB,GAAIC,MACjE,gBAAAhwC,EAAC,OAAA,EAAI,WAAU,WAAA,GAAgB,aAAa4pB,EAAI,CAAC,EAAE,GAAG,OAAOomB,IAAWpmB,EAAI,MAAM,EAAI,CACvF;AAAA,QAAA,EAAA,GArB4BA,EAAI,IAAI,CAACrlB,MAAMA,EAAE,GAAG,EAAE,KAAK,GAAG,CAsB7D,CACD,EAAA,CACH,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAusC,GAAqB,YAAY,CAAA;AAEjCA,GAAqB,eAAe,CAAA;AC9HpC,SAASW,KAAwB;AAC/B,QAAM,EAAE,WAAAtM,EAAA,IAAcZ,GAAA,GAChBlkC,IAAU8kC,GAAW,SAErBoL,IAAYlwC,GAAS,KAAK,eAAe;AAI/C,MAHoBA,GAAS,MAAM,YAAA,MAGf,YAAY,CAACkwC,KAAa,CAAC,MAAM,QAAQA,CAAS,KAAKA,EAAU,WAAW;AAC9F,WAAO;AAIT,QAAMryB,IAAS;AAAA,IACb;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,IAAA;AAAA,EACT,GAII4xB,IAAgB,CAACzrC,MACdksC,EAAU,CAAC,IAAIlsC,CAAQ,KAAK,IAI/BulB,IAAM1L;AAEZ,SACE,gBAAAle;AAAA,IAACod;AAAA,IAAA;AAAA,MACC,kBAAiB;AAAA,MACjB,WAAU;AAAA,MAEV,UAAA,gBAAArc,EAACqc,GAAU,MAAV,EAAe,UAAS,KAAI,OAAO,EAAE,QAAQ,OAAA,GAC5C,UAAA;AAAA,QAAA,gBAAApd;AAAA,UAACod,GAAU;AAAA,UAAV;AAAA,YACC,IAAG;AAAA,YACH,WAAW,8CAA8C/N,GAAA,CAAS;AAAA,YAClE,OAAO,EAAE,WAAW,OAAA;AAAA,YAEpB,UAAA,gBAAArP,EAAC,UAAK,WAAU,yBAAwB,OAAO,EAAE,eAAe,UAAU,UAAA,8CAAA,CAE1E;AAAA,UAAA;AAAA,QAAA;AAAA,QAEF,gBAAAA,EAACod,GAAU,MAAV,EAAe,WAAU,QACxB,UAAA,gBAAApd,EAAC,OAAA,EAAI,WAAU,mBAAkB,OAAO,EAAE,YAAY,SACpD,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,YACZ,UAAA4pB,EAAI,IAAI,CAACxjB,MACR,gBAAArF,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,UAAA,gBAAAf,EAACC,EAAK,OAAL,EACE,UAAAmG,EAAM,OACT;AAAA,UACCA,EAAM,QAAQ,gCACbyqC,GAAsBzqC,GAAO/F,CAAO,IAEpC,gBAAAL;AAAA,YAACC,EAAK;AAAA,YAAL;AAAA,cACC,MAAK;AAAA,cACL,OAAO6vC,EAAc1pC,EAAM,GAAG;AAAA,cAC9B,UAAQ;AAAA,cACR,OAAO,EAAE,iBAAiB,UAAA;AAAA,YAAU;AAAA,UAAA;AAAA,QACtC,EAAA,GAZ2BA,EAAM,GAcrC,CACD,EAAA,CACH,GACF,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAqrC,GAAsB,YAAY,CAAA;AAElCA,GAAsB,eAAe,CAAA;ACvDrC,MAAMzC,KAAe;AAAA,EACnB,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,cAAc;AAChB,GAEMD,KAAU,CAACI,GAAOG,OACf,EAAE,GAAGH,GAAO,GAAGG,EAAA,IAGlBoC,KAAe,CAAC5sC,MAAU;AAC9B,QAAM,CAACqqC,GAAOC,CAAQ,IAAIN,GAAuBC,IAASC,EAAY,GAChE;AAAA,IACJ,SAAAhrC;AAAA,IACA,UAAA2tC;AAAA,IACA,WAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAnR;AAAA,IACA,YAAAoR;AAAA,IACA,UAAAlN;AAAA,IACA,QAAAsC;AAAA,IACA,UAAA3a;AAAA,IACA,QAAAkZ;AAAA,IACA,WAAA7oB;AAAA,IACA,UAAAlZ;AAAA,IACA,aAAaquC;AAAA,IACb,WAAA5M;AAAA,EAAA,IACErgC;AAEJ,MAAI,OAAO,KAAKd,CAAO,EAAE,WAAW,EAAG,QAAO;AAE9C,QAAM,EAAE,WAAAkb,GAAW,UAAA9X,IAAW,CAAA,MAAOpD,GAC/BiE,IAAc8pC,KAAmBhuC,GAAeC,CAAO,GACvDguC,IAAoB,CAACt2B,GAAQC,MAAc;AAC/C,IAAAF,GAAkBzX,GAAS0X,GAAQC,CAAS,GAC5Cg2B,EAAS3tC,CAAO;AAAA,EAClB,GAEMiuC,IAAgB,CAACjF,MAAW;AAChC,IAAA9xB,GAASlX,GAASgpC,GAAQ,UAAU,GACpC2E,EAAS3tC,CAAO;AAAA,EAClB,GAEMkuC,IAAY,CAAC92B,GAAS+2B,MAAY;AACtC,UAAM,EAAE,QAAAhrC,MAAWnD,EAAQ;AAC3B,QAAIsX,IAAevZ,GAAOoF,GAAQ,CAAC,YAAY,aAAa,CAAC;AAE7D,UAAMoU,IAASD,EAAa,UAAU,CAACpS,OAAMA,GAAE,QAAQkS,CAAO,GACxDg3B,KAAS92B,EAAaC,CAAM;AAClC,QAAI82B,IAAS/2B,EAAa,UAAU,CAACpS,OAAMA,GAAE,QAAQipC,CAAO;AAC5D,QAAI,KAAK,IAAI52B,IAAS82B,CAAM,MAAM;AAChC,MAAA/2B,IAAeg3B,GAAWh3B,GAAcC,GAAQ82B,CAAM;AAAA,SACjD;AAEL,MAAA/2B,EAAa,OAAOC,GAAQ,CAAC,GAE7B82B,IAAS/2B,EAAa,UAAU,CAACpS,OAAMA,GAAE,QAAQipC,CAAO;AACxD,YAAMI,KAASj3B,EAAa+2B,CAAM;AAElC,MAAAD,GAAO,WAAWG,GAAO,UACzBH,GAAO,eAAeG,GAAO,eAAe,KAAK,GAEjDj3B,EAAa,OAAO+2B,IAAS,GAAG,GAAGD,EAAM;AAAA,IAC3C;AAEA,IAAA92B,EACG,OAAO,CAACpS,OAAMA,GAAE,aAAakpC,GAAO,QAAQ,EAC5C,IAAI,CAAClpC,IAAGqQ,OAAQ;AACf,YAAMmmB,KAAKx2B;AACX,aAAAw2B,GAAG,cAAcnmB,IACVmmB;AAAA,IACT,CAAC;AACH,UAAMmP,IAAKrzB,GAAeF,CAAY;AACtC,IAAAtX,EAAQ,WAAW,SAAS6qC,GAC5B7qC,EAAQ,UAAU,IAClB2tC,EAAS3tC,CAAO;AAAA,EAClB,GAEMwuC,IAAkB,CAACt6B,GAAO9R,GAAOS,MAAU;AAC/C,UAAM,EAAE,YAAA2iB,MAAexlB;AACvB,QAAIkU,GAAO;AACT,YAAM7W,IAAQ,IAAI,KAAK6W,CAAK,EACzB,eAAe,OAAO,EACtB,MAAM,IAAI,EACV,KAAK,GAAG;AACX,MAAAsR,EAAW,OAAO3iB,EAAM,GAAG,EAAET,CAAK,IAAI/E;AAAA,IACxC;AACE,aAAOmoB,EAAW,OAAO3iB,EAAM,GAAG,EAAET,CAAK;AAE3C,IAAApC,EAAQ,UAAU,IAClB2tC,EAAS3tC,CAAO;AAAA,EAClB,GAEMyuC,IAAc,CAAC9Y,GAAM9yB,MAAU;AACnC,UAAM,EAAE,QAAAM,MAAWnD,EAAQ,YAGrBqD,KAASD,EAAS,UAAU,CAAA,GAAI;AAAA,MAAK,CAACE,MAC1CA,EAAE,QAAQ,SAAST,EAAM,GAAG;AAAA,IAAA;AAE9B,QAAIQ,GAAO;AACT,YAAMqrC,IAAStrC,EAAS,OAAO,UAAU,CAACE,OAAMA,GAAE,OAAOD,EAAM,EAAE,GAC3DsrC,KAAYvrC,EAAS,OAAOsrC,CAAM,EAAE,UAAU,CAAA,GAC9CE,KAAWD,GAAU,QAAQ9rC,EAAM,GAAG;AAC5C,MAAI+rC,OAAa,MACfD,GAAU,OAAOC,IAAU,CAAC,GAE9BxrC,EAAS,OAAOsrC,CAAM,EAAE,SAASC,IACjC3uC,EAAQ,WAAWoD;AAAA,IACrB;AAEA,UAAMkU,IAAevZ,GAAOoF,GAAQ,CAAC,YAAY,aAAa,CAAC,GACzD0rC,KAAcv3B,EAAa,UAAU,CAACpS,MAAMA,EAAE,QAAQrC,EAAM,GAAG,GAC/Dm5B,IAAW1kB,EAAau3B,EAAW;AACzC,IAAAv3B,EAAa,OAAOu3B,IAAa,CAAC,GAClCv3B,EACG,OAAO,CAACpS,MAAMA,EAAE,aAAa82B,EAAS,QAAQ,EAC9C,IAAI,CAAC92B,GAAGqQ,OAAQ;AACf,YAAMmmB,KAAKx2B;AACX,aAAAw2B,GAAG,cAAcnmB,IACVmmB;AAAA,IACT,CAAC,GACH17B,EAAQ,WAAW,SAASwX,GAAeF,CAAY,GACvDtX,EAAQ,UAAU,IAClB2tC,EAAS3tC,CAAO;AAAA,EAClB,GAEM8uC,IAAY,CAAC56B,GAAOrR,MAAU;AAClC,UAAMxF,IAAQ6W,IAAQA,EAAM,QAAQ;AACpC,QAAI7W,GAAO;AACT,YAAM,EAAE,YAAAmoB,GAAY,oBAAAupB,EAAA,IAAuB/uC;AAE3C,UAAIgvC,KAAW;AACf,YAAMC,IAAWzpB,EAAW,OAAO,GAAG3iB,CAAK,EAAE,EAAE,OAAO;AAAA,QACpD,CAACqC,MAAMA,EAAE,UAAU;AAAA,MAAA,EACnB;AACF,UAAI7H,MAAU4xC,GAAU;AACtB,QAAIA,KAAYA,MAAa,MAAMA,MAAa5xC,MAC9C2xC,KAAW;AAEb,cAAM,EAAE,MAAAtH,GAAM,YAAA0C,GAAA,IAAe2E,GACvBG,KAAW1pB,EAAW,OAAO,GAAG3iB,CAAK,EAAE,GAEvC,EAAE,OAAAglC,IAAO,OAAAC,IAAO,UAAAE,GAAA,IAAaoC,KAC/BlpC,EAAUkpC,EAAU,IACpB3C,GAAkBC,CAAI,GAGpByH,KAAU/G;AAAA,UACd,EAAE,OAAAP,IAAO,OAAAC,GAAgB;AAAA,UACzBzqC;AAAA,UACAwF;AAAA,UACAqsC,GAAS;AAAA,QAAA;AAEX,QAAIC,OACF3pB,EAAW,SAAS4jB,GAAY5jB,EAAW,QAAQ3iB,GAAOssC,EAAO,IAE/DH,OACFxpB,EAAW,SAASqkB;AAAA,UAClBrkB,EAAW;AAAA,UACX3iB;AAAA,UACAolC,GAAU,EAAE,OAAAJ,GAAuB,GAAGoH,CAAQ;AAAA,QAAA,IAIlDzpB,EAAW,OAAO,GAAG3iB,CAAK,EAAE,EAAE,OAAO;AAAA,UACnC,CAACqC,OAAMA,GAAE,UAAU;AAAA,QAAA,EACnB,QAAQ7H,GACV2C,EAAQ,aAAawlB,GACrBxlB,EAAQ,UAAU,IAClB2tC,EAAS3tC,CAAO;AAAA,MAClB;AAAA,IACF;AAAA,EACF,GAEMovC,IAAe,CAACC,GAAOC,GAAQC,MAAS;AAC5C,QAAIC,IAAc;AAClB,UAAM,EAAE,QAAArsC,MAAWnD,EAAQ,YACrByvC,KAAgBtsC,EAAOmsC,CAAM;AACnC,QAAI3pB,IAAU8pB,GAAc,MAAM,CAAA;AAClC,YAAQF,GAAA;AAAA,MACN,KAAK5uC,EAAU;AACb,QAAAglB,IAAUA,EAAQ,OAAO,CAAC9hB,MAAMA,MAAMwrC,CAAK,GAC3CG,IAAc;AACd;AAAA,MACF,KAAK7uC,EAAU;AACb,QAAAglB,EAAQ,KAAK0pB,CAAK,GAClBG,IAAc;AACd;AAAA,IAEA;AAEJ,IAAIA,MACFC,GAAc,KAAK9pB,GACnB3lB,EAAQ,WAAW,OAAOsvC,CAAM,IAAIG,IACpCrE,EAAS,EAAE,cAAc,IAAO,kBAAkBkE,EAAA,GAAU,MAAM;AAChE,MAAA3B,EAAS3tC,CAAO;AAAA,IAClB,CAAC;AAAA,EAEL,GAEM0vC,IAAiB,CAACx7B,GAAO80B,MAAW;AACxC,UAAMnmC,IAAQmmC,GACR,EAAE,QAAA7lC,MAAWnD,EAAQ,YACrBsX,IAAevZ,GAAOoF,GAAQ,CAAC,YAAY,aAAa,CAAC,GACzDoS,KAAM+B,EAAa,UAAU,CAACpS,OAAMA,GAAE,QAAQimC,EAAM,gBAAgB,GAGpEsE,IAAgBn4B,EAAa/B,EAAG;AACtC,IAAA1S,EAAM,WAAW4sC,EAAc,UAC/B5sC,EAAM,cAAc4sC,EAAc,cAAc,GAChD5sC,EAAM,KAAK,IACXA,EAAM,UAAU,MAChB,OAAOA,EAAM;AAEb,UAAM2mC,IAAMlyB,EAAa;AAAA,MACvB,CAACpS,OAAMA,GAAE,QAAQrC,EAAM,OAAOqC,GAAE,IAAI,WAAW,GAAGrC,EAAM,GAAG,GAAG;AAAA,IAAA,EAC9D;AACF,QAAI2mC,IAAM,GAAG;AACX,YAAMmG,KAAU9sC,EAAM;AACtB,MAAAA,EAAM,MAAM,GAAGA,EAAM,GAAG,IAAI2mC,CAAG,IAC/B3mC,EAAM,SAASkmC,GAAiBlmC,GAAO8sC,EAAO;AAAA,IAChD;AAGA,UAAMtsC,MAASD,EAAS,UAAU,CAAA,GAAI;AAAA,MAAK,CAACE,OAC1CA,GAAE,QAAQ,SAAS6nC,EAAM,gBAAgB;AAAA,IAAA;AAE3C,QAAI9nC,IAAO;AAET,YAAMqrC,KAAStrC,EAAS,OAAO,UAAU,CAACE,OAAMA,GAAE,OAAOD,GAAM,EAAE,GAC3DsrC,KAAYvrC,EAAS,OAAOsrC,EAAM,EAAE,UAAU,CAAA,GAC9CG,KAAcF,GAAU,QAAQxD,EAAM,gBAAgB;AAC5D,MAAI0D,OAAgB,KAClBF,GAAU,OAAOE,KAAc,GAAG,GAAGhsC,EAAM,GAAG,IAE9C8rC,GAAU,KAAK9rC,EAAM,GAAG,GAE1BO,EAAS,OAAOsrC,EAAM,EAAE,SAASC,IACjC3uC,EAAQ,WAAWoD;AAAA,IACrB;AAGA,IAAAkU,EAAa,OAAO/B,KAAM,GAAG,GAAG1S,CAAK,GAErCyU,EACG,OAAO,CAACpS,OAAMA,GAAE,aAAauqC,EAAc,QAAQ,EACnD,IAAI,CAACvqC,IAAG0qC,OAAO;AACd,YAAMlU,KAAKx2B;AACX,aAAAw2B,GAAG,cAAckU,IACVlU;AAAA,IACT,CAAC;AACH,UAAMmP,KAAKrzB,GAAeF,CAAY;AACtC,IAAAtX,EAAQ,WAAW,SAAS6qC,IAC5BO,EAAS,EAAE,eAAe,IAAO,kBAAkBvoC,EAAM,IAAA,GAAO,MAAM;AACpE,MAAA8qC,EAAS3tC,CAAO;AAAA,IAClB,CAAC;AAAA,EACH,GAEMi1B,IAAoB,CAAC/gB,GAAO9R,GAAOS,GAAOb,IAAOyT,EAAW,WAAW;AAC3E,UAAM,EAAE,YAAA+P,MAAexlB;AACvB,QAAI3C,KAAQ,IACRmyC,IAAc;AAClB,YAAQxtC,GAAA;AAAA,MACN,KAAK;AACH,QAAAksC,EAAU9rC,GAAOS,CAAK,GACtB2sC,IAAc;AACd;AAAA,MACF,KAAK;AACH,QAAAhB,EAAgBt6B,GAAO9R,GAAOS,CAAK,GACnC2sC,IAAc;AACd;AAAA,MACF,KAAK;AACH,QAAAt7B,EAAM,gBAAA,GACNu6B,EAAYrsC,GAAOS,CAAK,GACxB2sC,IAAc;AACd;AAAA,MACF,KAAK/5B,EAAW,gBAAgB;AAC9B,cAAM,EAAE,QAAA0e,MAAWjgB;AACnB,QAAAs7B,IAAc,IACdxB,EAAkB7Z,GAAQtxB,CAAK;AAC/B;AAAA,MACF;AAAA,MACA,KAAK;AACH,QAAAqR,EAAM,gBAAA,GACNs7B,IAAc,IACdvB,EAAcprC,CAAK;AACnB;AAAA,MACF,KAAK;AACH,QAAAqR,EAAM,gBAAA,GACNs7B,IAAc,IACdpE,EAAS,EAAE,eAAe,IAAM,kBAAkBvoC,EAAM,KAAK;AAC7D;AAAA,MACF,KAAK;AACH,QAAAqR,EAAM,gBAAA,GACNs7B,IAAc,IACdpE,EAAS,EAAE,cAAc,IAAM,kBAAkBvoC,EAAM,KAAK;AAC5D;AAAA,MACF,KAAK4S,EAAW;AACd,QAAA+5B,IAAc,IACdV,EAAU56B,GAAOrR,CAAK;AACtB;AAAA,MACF,KAAK4S,EAAW;AACd,QAAApY,KAAQ6W,EAAM,OAAO;AACrB;AAAA,MACF,KAAKuB,EAAW;AACd,QAAIvB,EAAM,SACP,EAAE,OAAA7W,OAAU6W,EAAM,SAEnB7W,KAAQ6W;AAEV;AAAA,MACF,KAAKuB,EAAW,UAAU;AACxB,cAAMo6B,IAAO1mB,GAAY3D,GAAYtR,GAAO9R,GAAOS,CAAK;AAIxD,YAHAxF,KAAQwyC,EAAK,CAAC,GACVA,EAAK,CAAC,EAAE,SAAS,MACnB7vC,EAAQ,SAASA,EAAQ,SAAS,CAAA,GAAI,OAAO6vC,EAAK,CAAC,CAAC,IAClDA,EAAK,SAAS,GAAG;AACnB,gBAAMC,KAAUxmB;AAAA,YACdtpB,EAAQ,SAAS,CAAA;AAAA,YACjB,CAACupB,OAAMA,GAAE,QAAQrV,EAAM;AAAA,UAAA;AAEzB,UAAI47B,MAAW,KAAK9vC,EAAQ,SAASA,EAAQ,MAAM,SAAS,KAC1DA,EAAQ,MAAM,OAAO8vC,IAAS,CAAC;AAAA,QAEnC;AACA;AAAA,MACF;AAAA,MACA,KAAKr6B,EAAW;AACd,QAAApY,KAAQ6W,IAAQA,EAAM,QAAQ;AAC9B;AAAA,MACF,KAAKuB,EAAW;AACd,QAAApY,KAAQqtB,GAAaxW,KAAS,EAAE;AAChC;AAAA,MACF,KAAKuB,EAAW;AAAA,MAChB,KAAKA,EAAW;AAAA,MAChB,KAAKA,EAAW;AAAA,MAChB,KAAKA,EAAW;AACd,QAAApY,KAAQ6W;AACR;AAAA,MACF,KAAKuB,EAAW;AACd,QAAApY,KAAQ,IAAI,KAAK6W,CAAK,EAAE,eAAe,OAAO,EAAE,MAAM,IAAI,EAAE,KAAK,GAAG;AACpE;AAAA,MACF,KAAKuB,EAAW;AACd,SAAC,EAAE,OAAApY,OAAU6W,EAAM,SACnB7W,KAAQ,KAAK,MAAMA,EAAK;AACxB;AAAA,MACF;AACE,SAAC,EAAE,OAAAA,OAAU6W,EAAM;AAAA,IAAA;AAYvB,QATErR,MAAU,MACV,CAAC,QAAQ,eAAe,oBAAoB,EAAE,SAAST,CAAK,MAE3D,EAAE,OAAA/E,OAAU6W,EAAM,QACnBlU,EAAQoC,CAAK,IAAI/E,KAEfujC,KAAY5+B,EAAK,WAAW,OAAO,MACpC,EAAE,OAAA3E,OAAU6W,EAAM,SAEjBs7B,GAAa;AACf,UAAIxtC,MAASyT,EAAW;AACtB,QAAIvB,KACFsR,EAAW,OAAO,GAAG3iB,CAAK,EAAE,EAAE,OAAO;AAAA,UACnC,CAACqC,MAAMA,EAAE,UAAU9C;AAAA,QAAA,EACnB,QAAQ/E,IACV2C,EAAQ,aAAawlB,GACjBob,QAAkB,oBAAoBpb,MAE1C,OAAOA,EAAW,OAAO,GAAG3iB,CAAK,EAAE,EAAE,OAAO;AAAA,UAC1C,CAACqC,MAAMA,EAAE,UAAU9C;AAAA,QAAA,EACnB;AAAA,eAEKJ,MAASyT,EAAW;AAC7B,QAAA+P,EAAW,OAAO3iB,CAAK,EAAE,OAAO;AAAA,UAC9B,CAACqC,MAAMA,EAAE,UAAU9C;AAAA,QAAA,EACnB,aAAa/E,IACf2C,EAAQ,aAAawlB,GACjBob,QAAkB,oBAAoBpb;AAAA,eACjCxjB,MAASyT,EAAW;AAC7B,QAAA+P,EAAW,OAAO3iB,CAAK,EAAE,OAAO;AAAA,UAC9B,CAACqC,MAAMA,EAAE,UAAU9C;AAAA,QAAA,EACnB,aAAa/E,IACf2C,EAAQ,aAAawlB,GACjBob,QAAkB,oBAAoBpb;AAAA,eAE1C,EAAA3iB,MAAU,MACV,CAAC,QAAQ,eAAe,oBAAoB,EAAE,SAAST,CAAK,IAGvD;AAIL,YAHAojB,EAAW,OAAO,GAAG3iB,CAAK,EAAE,EAAE,OAAO;AAAA,UACnC,CAACqC,MAAMA,EAAE,UAAU9C;AAAA,QAAA,EACnB,QAAQ/E,IAER2E,MAASyT,EAAW,qBACnB,CAAC+P,EAAW,OAAO,GAAG3iB,CAAK,EAAE,EAAE,OAAO,KAAK,CAACqC,MAAMA,EAAE,UAAU9C,CAAK,EACjE,gBACDojB,EAAW,OAAO,GAAG3iB,CAAK,EAAE,EAAE,OAAO,KAAK,CAACqC,MAAMA,EAAE,UAAU9C,CAAK,EAC/D,iBAAiB,KACtB;AACA,gBAAMwgB,IAAM4C,EAAW,OAAO,GAAG3iB,CAAK,EAAE,EAAE,OAAO;AAAA,YAC/C,CAACqC,OAAMA,GAAE,UAAU9C;AAAA,UAAA,EACnB;AACF,UAAAojB,EAAW,OAAO,GAAG3iB,CAAK,EAAE,EAAE,OAAO;AAAA,YACnC,CAACqC,OAAMA,GAAE,UAAU9C;AAAA,UAAA,EACnB,eAAeklB,GAAS1E,CAAG,EAAE,CAAC,EAAE;AAAA,QACpC;AACA,QAAA5iB,EAAQ,aAAawlB,GACjBob,QAAkB,oBAAoBpb;AAAA,MAC5C;AACA,MAAAxlB,EAAQ,UAAU,IAClB2tC,EAAS3tC,CAAO;AAAA,IAClB;AAAA,EACF,GAEM43B,IAAkB,CAAC/0B,GAAO8Q,GAAK8sB,IAAY,OAAU;AACzD,UAAM,EAAE,YAAAjb,MAAexlB;AACvB,QAAI,CAACygC,GAAW;AACd,YAAMpa,IACJb,EAAW,OAAO,GAAG3iB,CAAK,EAAE,EAAE,OAAO;AAAA,QACnC,CAAC8wB,MAAMA,EAAE,UAAUhgB,EAAI,EAAE;AAAA,MAAA,EACzB,cAAc,CAAA,GACZo8B,KAAS1pB,EAAU,UAAU,CAACsN,MAAMA,EAAE,OAAOhgB,EAAI,IAAI,EAAE;AAC7D,MAAA0S,EAAU,OAAO0pB,IAAQ,GAAGp8B,EAAI,GAAG,GACnC6R,EAAW,OAAO,GAAG3iB,CAAK,EAAE,EAAE,OAAO;AAAA,QACnC,CAACqC,MAAMA,EAAE,UAAUyO,EAAI,EAAE;AAAA,MAAA,EACzB,aAAa0S;AAAA,IACjB;AACA,IAAAb,EAAW,OAAO,GAAG3iB,CAAK,EAAE,EAAE,OAAO;AAAA,MACnC,CAACqC,MAAMA,EAAE,UAAUyO,EAAI,EAAE;AAAA,IAAA,EACzB,aAAaA,EAAI,EAAE,cAAc,CAAA,GACnC3T,EAAQ,aAAawlB,GACrBxlB,EAAQ,UAAU,IAClB2tC,EAAS3tC,CAAO;AAAA,EAClB,GAEMgwC,IAAkB,CAACntC,GAAO8Q,MAAQ;AACtC,UAAM,EAAE,YAAA6R,MAAexlB,GACjBm3B,IAAS1P;AAAA,MACb9T,EAAI;AAAA,MACJA,EAAI;AAAA,MACJA,EAAI;AAAA,IAAA;AAEN,IAAA6R,EAAW,OAAO,GAAG3iB,CAAK,EAAE,EAAE,OAAO;AAAA,MACnC,CAACqC,MAAMA,EAAE,UAAUyO,EAAI;AAAA,IAAA,EACvB,eAAeA,EAAI,cACrB6R,EAAW,OAAO,GAAG3iB,CAAK,EAAE,EAAE,OAAO;AAAA,MACnC,CAACqC,MAAMA,EAAE,UAAUyO,EAAI;AAAA,IAAA,EACvB,QAAQwjB,GACVn3B,EAAQ,aAAawlB,GACrBxlB,EAAQ,UAAU,IAClB2tC,EAAS3tC,CAAO;AAAA,EAClB;AAEA,MAAI0lB,IACDxK,KAAaA,EAAU,YAAYA,EAAU,SAAS,CAAC,EAAE,YAAa,CAAA;AACzE,EAAAwK,IAAKA,EAAG,OAAO,CAAC7hB,MAAM,CAACA,EAAE,MAAM;AAE/B,QAAMosC,IAAqB;AAAA,IACzB,SAAAjwC;AAAA;AAAA;AAAA,IAGA,YAAYi1B;AAAA,IACZ,eAAe2C;AAAA,IACf,WAAWoY;AAAA;AAAA,IAEX,QAAQpC,KAAa,CAAA;AAAA,IACrB,IAAIC;AAAA,IACJ,WAAWnR,KAAa;AAAA,IACxB,UAAUoR,KAAc;AAAA,IACxB,UAAAlN;AAAA,IACA,QAAAsC;AAAA,IACA,UAAA3a;AAAA,IACA,OAAO7C,EAAG,SAAS;AAAA,IACnB,QAAA+b;AAAA,IACA,WAAA7oB;AAAA,IACA,UAAAlZ;AAAA,IACA,aAAAuE;AAAA,EAAA,GAGIisC,IAAe,gBAAAl0C,EAAC6mC,IAAA,EAAc,GAAGoN,EAAA,CAAoB,GAErDE,IACJ,gBAAAn0C;AAAA,IAACspB;AAAA,IAAA;AAAA,MACC,MAAM6lB,EAAM;AAAA,MACZ,SAAAnrC;AAAA,MACA,OAAOmrC,EAAM;AAAA,MACb,QAAQ,MAAMC,EAAS,EAAE,cAAc,CAACD,EAAM,cAAc;AAAA,MAC5D,QAAQiE;AAAA,IAAA;AAAA,EAAA;AAIZ,SACE,gBAAAryC,EAACujC,IAAA,EAAqB,OAAO,EAAE,WAAAa,KAC7B,UAAA;AAAA,IAAA,gBAAAnlC;AAAA,MAACkqC;AAAA,MAAA;AAAA,QACC,SAAAlmC;AAAA,QACA,YAAYmhC,GAAW;AAAA,MAAA;AAAA,IAAA;AAAA,IAExBl9B,MAAgBtD,EAAU,cAAc,WACvC,gBAAA3E;AAAA,MAACuvC;AAAA,MAAA;AAAA,QACC,UAAU;AAAA,QACV,UAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAGbtnC,MAAgBtD,EAAU,cAAc,6BACtCmsC,IAAA,EAAqB;AAAA,IAEvB7oC,MAAgBtD,EAAU,cAAc,6BACtC8sC,IAAA,EAAsB;AAAA,IAExByC;AAAA,IACD,gBAAAl0C;AAAA,MAAC8qC;AAAA,MAAA;AAAA,QACC,MAAMqE,EAAM;AAAA,QACZ,kBAAkBA,EAAM;AAAA,QACxB,SAASjqC,EAAUlB,CAAO,KAAK,CAAA;AAAA,QAC/B,SAAS,MAAMorC,EAAS,EAAE,eAAe,CAACD,EAAM,eAAe;AAAA,QAC/D,OAAOuE;AAAA,MAAA;AAAA,IAAA;AAAA,IAERS;AAAA,EAAA,GACH;AAEJ;AAEAzC,GAAa,YAAY;AAAA,EACvB,SAASxxC,EAAU,OAAO;AAAA,EAC1B,UAAUA,EAAU,KAAK;AAAA,EACzB,WAAWA,EAAU;AAAA,EACrB,OAAOA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,MAAM,CAAC;AAAA,EAC/D,WAAWA,EAAU,KAAK;AAAA,EAC1B,YAAYA,EAAU,KAAK;AAAA,EAC3B,UAAUA,EAAU;AAAA,EACpB,QAAQA,EAAU;AAAA,EAClB,UAAUA,EAAU;AAAA,EACpB,QAAQA,EAAU;AAAA,EAClB,WAAWA,EAAU;AAAA,EACrB,UAAUA,EAAU;AAAA,EACpB,aAAaA,EAAU;AAAA;AAAA,EACvB,WAAWA,EAAU;AACvB;AAEAwxC,GAAa,eAAe;AAAA,EAC1B,WAAW,CAAA;AAAA,EACX,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ,MAAM;AAAA,EAAC;AAAA,EACf,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,aAAa;AAAA,EACb,WAAW;AAAA,IACT,SAAS,CAAA;AAAA,IACT,kBAAkB,CAAA;AAAA,IAClB,aAAa,CAAA;AAAA,IACb,OAAO,MAAM;AAAA,IAAC;AAAA,EAAA;AAElB;AC7kBA,MAAM0C,KAAgB,CAAC,EAAE,QAAApH,QAAa;AACpC,QAAM,EAAE,SAAAhpC,GAAS,KAAA4zB,EAAA,IAAQoV,GACnB,EAAE,MAAA7nC,GAAM,OAAAoZ,GAAO,aAAAoO,EAAA,IAAgBiL,GAC/B,CAAC/wB,GAAOwtC,CAAQ,IAAIvkC,EAAS9L,CAAO;AAE1C,EAAAuS,GAAU,MAAM;AACd,IAAA89B,EAASrwC,CAAO;AAAA,EAClB,GAAG,CAACA,CAAO,CAAC;AAEZ,QAAMswC,IAAgB,CAAC5U,MAAO;AAC5B,IAAIA,EAAG,WACL2U,EAASnvC,EAAUw6B,CAAE,CAAC;AAAA,EAE1B;AAEA,SACE,gBAAA3+B;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,UAAU;AAAA,QACV,SAAS;AAAA,QACT,WAAW;AAAA,MAAA;AAAA,MAGb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,WACb,UAAA;AAAA,UAAA,gBAAAA,EAAC,MAAA,EACC,UAAA;AAAA,YAAA,gBAAAf,EAAC,OAAE,UAAA,oBAAA,CAAiB;AAAA,YAAI;AAAA,YAAEmF;AAAA,YAAK;AAAA,YAAEoZ,KAAS,IAAIA,CAAK;AAAA,UAAA,GACrD;AAAA,UACA,gBAAAxd,EAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,SAClC,UAAA;AAAA,YAAA,gBAAAf,EAAC,OAAA,EACC,UAAA,gBAAAA,EAAC,KAAA,EAAE,UAAA,iBAAA,CAAc,GACnB;AAAA,8BACC,OAAA,EAAI,OAAO,EAAE,YAAY,WAAA,GAAe,UAAA2sB,EAAA,CAAY;AAAA,UAAA,EAAA,CACvD;AAAA,QAAA,GACF;AAAA,QACA,gBAAA3sB;AAAA,UAAC0xC;AAAA,UAAA;AAAA,YACC,SAAS7qC,KAAS,CAAA;AAAA,YAClB,UAAUytC;AAAA,YACV,OAAO;AAAA,YACP,WAAS;AAAA,YACT,YAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MACd;AAAA,IAAA;AAAA,EAAA;AAGN,GC1CMC,KAAe,CAAC,EAAE,UAAAjkC,GAAU,UAAAQ,QAAe;AAC/C,QAAM,CAACqvB,GAAWC,CAAY,IAAItwB,EAAS,EAAK,GAC1C,CAAC0kC,GAAWC,CAAY,IAAI3kC,EAAS,IAAI;AAE/C,EAAAyG,GAAU,MAAM;AACd,IAAK4pB,KACHsU,EAAa,IAAI;AAAA,EAErB,GAAG,CAACtU,CAAS,CAAC;AAEd,QAAMuU,IAAa,MAAMtU,EAAa,EAAI,GACpC7rB,IAAc,MAAM6rB,EAAa,EAAK,GAEtCuU,IAAoB,CAAC5hC,MAAW;AACpC,IAAAzC,EAASyC,EAAO,MAAM,UAAU,GAChCqtB,EAAa,EAAK;AAAA,EACpB,GAEMwU,IAAoB,CAAC7hC,MAAW;AACpC,IAAAjC,EAASiC,EAAO,IAAI,GACpBqtB,EAAa,EAAK;AAAA,EACpB,GAEMyU,IAAkB,CAAC9hC,MAAW;AAClC,UAAMnL,IAAgBmL,EAAO,KAAK,YAAY,gBACxC/O,IAAU;AAAA,MACd,YAAY;AAAA,QACV,QAAQ;AAAA,UACN,CAAC+O,EAAO,KAAK,IAAI,GAAG;AAAA,YAClB,GAAGA,EAAO,KAAK;AAAA,UAAA;AAAA,QACjB;AAAA,QAEF,GAAInL,KAAiB,EAAE,gBAAgBA,EAAA;AAAA,MAAc;AAAA,MAEvD,oBAAoB;AAAA,QAClB,QAAQ;AAAA,UACN,CAACmL,EAAO,KAAK,IAAI,GAAG;AAAA,YAClB,GAAGA,EAAO,KAAK;AAAA,UAAA;AAAA,QACjB;AAAA,QAEF,GAAInL,KAAiB,EAAE,gBAAgBA,EAAA;AAAA,MAAc;AAAA,IACvD,GAEIgwB,IAAM;AAAA,MACV,aAAa7kB,EAAO,KAAK;AAAA,MACzB,OAAOA,EAAO,KAAK;AAAA,MACnB,MAAMA,EAAO,KAAK;AAAA,IAAA;AAEpB,IAAA0hC,EAAa,EAAE,SAAAzwC,GAAS,KAAA4zB,GAAK;AAAA,EAC/B,GAEMkd,IAAkB,MAAM;AAC5B,IAAAL,EAAa,IAAI;AAAA,EACnB;AAEA,SACE,gBAAA1zC,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,IAAA,EAAS,KAAI,eACZ,UAAA,gBAAA1O;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,SAASyzC;AAAA,QAER,UAAA;AAAA,UAAAhmC,EAAO;AAAA,UAAQ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEpB;AAAA,IACA,gBAAA3N;AAAA,MAACuI;AAAA,MAAA;AAAA,QACC,UAAQ;AAAA,QACR,MAAM62B;AAAA,QACN,QAAQ5rB;AAAA,QACR,iBAAgB;AAAA,QAEhB,UAAA;AAAA,UAAA,gBAAAvU,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,4BAACA,EAAM,OAAN,EAAY,UAAA,sBAAA,CAAmB,EAAA,CAClC;AAAA,UACA,gBAAAtJ,EAACsJ,EAAM,MAAN,EACE,cACC,gBAAAtJ,EAACo0C,IAAA,EAAc,QAAQI,EAAA,CAAW,IAElC,gBAAAx0C;AAAA,YAACgpB;AAAA,YAAA;AAAA,cACC,eAAe2rB;AAAA,cACf,eAAeC;AAAA,cACf,aAAaC;AAAA,YAAA;AAAA,UAAA,GAGnB;AAAA,UACA,gBAAA9zC,EAACuI,EAAM,QAAN,EAAa,WAAU,yBACrB,UAAA;AAAA,YAAAkrC,KACC,gBAAAx0C,EAACyP,IAAA,EAAS,KAAI,kBACZ,UAAA,gBAAAzP,EAACiB,GAAA,EAAO,WAAU,WAAU,SAAS6zC,GAAiB,UAAA,eAAA,CAEtD,GACF;AAAA,YAEF,gBAAA90C,EAACyP,IAAA,EAAS,KAAI,SACZ,UAAA,gBAAAzP,EAACiB,GAAA,EAAO,SAAQ,WAAU,SAASsT,GAAa,UAAA,QAAA,CAEhD,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,GC1GMwgC,KAAsB,CAAC,YAAY,QAAQ,QAAQ;AAKzD,SAASC,GAAmB;AAAA,EAC1B,WAAAC;AAAA,EACA,aAAAjP;AAAA,EACA,iBAAA7hC;AAAA,EACA,qBAAA+wC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,oBAAAC,IAAqB;AACvB,GAAG;AACD,QAAM,CAACC,GAAqBC,CAAsB,IAAIxlC,EAAS,EAAK,GAC9D,CAAC+Q,GAAY00B,CAAa,IAAIzlC,EAAS,CAAA,CAAE,GACzC,CAAC2jC,GAAe+B,CAAgB,IAAI1lC,EAAS,EAAE,GAC/C,CAAC2lC,GAAeC,CAAgB,IAAI5lC,EAAS,EAAE,GAC/C,CAAC6lC,GAAYC,CAAa,IAAI9lC,EAAS,EAAE,GACzC,CAAC+lC,GAAiBC,CAAkB,IAAIhmC,EAAS,CAAA,CAAE,GACnD,CAACimC,GAAYC,CAAa,IAAIlmC,EAAS,CAAC,GACxC,CAACmmC,GAAgBC,CAAiB,IAAIpmC,EAAS,EAAE;AAGvD,EAAAyG,GAAU,MAAM;AACd,IAAIyvB,KAAeA,EAAY,SAC7BuP,EAAcvP,EAAY,IAAI,GAC9BgQ,EAAchQ,EAAY,MAAM,CAAC;AAAA,EAErC,GAAG,CAACA,CAAW,CAAC;AAEhB,QAAMmQ,IAAwB,CAACtvC,MAAU;AACvC,QAAI,CAACA,KAAS,CAACA,EAAM,QAAQ;AAC3B,MAAAivC,EAAmB,CAAA,CAAE;AACrB;AAAA,IACF;AAEA,UAAMM,IAAiBvvC,EAAM,OAAO;AAAA,MAAO,CAACT,MAC1C2uC,GAAoB,SAAS3uC,EAAM,IAAI;AAAA,IAAA;AAEzC,IAAA0vC,EAAmBM,CAAc,GAE7BA,EAAe,SAAS,IAC1BV,EAAiBU,EAAe,CAAC,EAAE,KAAK,IAExCV,EAAiB,EAAE;AAAA,EAEvB;AA2GA,SAAO;AAAA,IACL,qBAAAL;AAAA,IACA,wBAAAC;AAAA,IACA,YAAAz0B;AAAA,IACA,eAAA4yB;AAAA,IACA,eAAAgC;AAAA,IACA,YAAAE;AAAA,IACA,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,YAAAE;AAAA,IACA,wBAnH6B,MAAM;AAEnC,UADAT,EAAuB,CAACD,CAAmB,GACvC,CAACA,KAAuBlxC,KAAmBA,EAAgB,SAAS,GAAG;AAEzE,cAAMkyC,IAAiBjB,IACnBjxC,EAAgB,OAAO,CAACG,MAAMA,EAAE,QAAQ2wC,CAAS,IACjD9wC;AAEJ,YAAIkyC,EAAe,SAAS,GAAG;AAC7B,gBAAMC,IAAaD,EAAe,CAAC;AACnC,UAAAb,EAAiBc,EAAW,GAAG,GAC/BH,EAAsBG,CAAU;AAAA,QAClC;AAAA,MACF;AAAA,IACF;AAAA,IAsGE,mBApGwB,CAACptC,MAAM;AAC/B,YAAMqtC,IAAgBrtC,EAAE,OAAO;AAC/B,MAAAssC,EAAiBe,CAAa;AAC9B,YAAM1vC,IAAQ1C,EAAgB,KAAK,CAACG,MAAMA,EAAE,QAAQiyC,CAAa;AACjE,MAAI1vC,KACFsvC,EAAsBtvC,CAAK,GAE7B+uC,EAAc,EAAE;AAAA,IAClB;AAAA,IA6FE,mBA3FwB,CAAC1sC,MAAM;AAC/B,MAAAwsC,EAAiBxsC,EAAE,OAAO,KAAK,GAC/B0sC,EAAc,EAAE;AAAA,IAClB;AAAA,IAyFE,oBAvFyB,CAAC1sC,MAAM;AAChC,MAAAgtC,EAAkBhtC,EAAE,OAAO,KAAK;AAAA,IAClC;AAAA,IAsFE,oBApFyB,CAAC0I,MAAW;AACrC,UAAI4kC;AAEJ,UAAI5kC,KAAU,OAAOA,KAAW;AAC9B,QAAA4kC,IAAe;AAAA,UACb,IAAI,GAAGzmC,GAAA,CAAQ,IAAIolC,CAAQ;AAAA,UAC3B,OAAO;AAAA,UACP,OAAO;AAAA,UACP,OAAOvjC;AAAA,QAAA;AAAA,WAEJ;AACL,YAAI,CAAC6hC,KAAiB,CAACgC;AACrB;AAKF,cAAMgB,IAFQtyC,EAAgB,KAAK,CAACG,MAAMA,EAAE,QAAQmvC,CAAa,GAC5C,QAAQ,KAAK,CAAClvC,MAAMA,EAAE,UAAUkxC,CAAa,GACxC,SAASh8B,EAAW;AAE9C,YAAIi9B,IAAiBf,EAAW,KAAA;AAChC,QAAIc,MACFC,IAAiBj0C,GAAOi0C,CAAc,IAExCF,IAAe;AAAA,UACb,IAAI,GAAGzmC,GAAA,CAAQ,IAAIolC,CAAQ;AAAA,UAC3B,OAAOM;AAAA,UACP,OAAOhC;AAAA,UACP,OAAOiD;AAAA,QAAA;AAAA,MAEX;AAEA,YAAMC,IAAoB,CAAC,GAAG91B,GAAY21B,CAAY;AACtD,MAAAjB,EAAcoB,CAAiB,GAC/Bf,EAAc,EAAE,GAEZV,KACFA,EAAoBD,GAAW;AAAA,QAC7B,IAAIc;AAAA,QACJ,MAAMY;AAAA,MAAA,CACP;AAAA,IAEL;AAAA,IA4CE,uBA1C4B,CAACC,MAAgB;AAC7C,YAAMD,IAAoB91B,EAAW,OAAO,CAACyC,MAAMA,EAAE,OAAOszB,CAAW;AACvE,MAAArB,EAAcoB,CAAiB,GAE3BzB,MACEyB,EAAkB,WAAW,IAC/BzB,EAAoBD,GAAW,IAAI,IAEnCC,EAAoBD,GAAW;AAAA,QAC7B,IAAIc;AAAA,QACJ,MAAMY;AAAA,MAAA,CACP;AAAA,IAGP;AAAA,IA6BE,gBA3BqB,CAACE,MAAU;AAChC,MAAAb,EAAca,CAAK,GAEf3B,KAAuBr0B,EAAW,SAAS,KAC7Cq0B,EAAoBD,GAAW;AAAA,QAC7B,IAAI4B;AAAA,QACJ,MAAMh2B;AAAA,MAAA,CACP;AAAA,IAEL;AAAA,IAmBE,gBAAAo1B;AAAA,IACA,mBAAAC;AAAA,EAAA;AAEJ;ACzKA,SAASY,GAAiB,EAAE,YAAAf,GAAY,YAAAgB,KAAc;AACpD,SACE,gBAAAh2C,EAAC,OAAA,EAAI,WAAU,0DACb,UAAA;AAAA,IAAA,gBAAAA,EAAC,SAAA,EAAM,WAAU,cAAa,UAAA;AAAA,MAAA;AAAA,MAEb,gBAAAf,EAAC,YAAO,UAAA,sCAAA,CAAmC;AAAA,MAAU;AAAA,MAAI;AAAA,IAAA,GAE1E;AAAA,sBACCuJ,IAAA,EAAY,MAAK,MACf,UAAAytC,GAAoB,IAAI,CAACrwB,MACxB,gBAAA3mB;AAAA,MAACiB;AAAA,MAAA;AAAA,QAEC,SACE80C,MAAepvB,EAAO,QAAQ,YAAY;AAAA,QAE5C,SAAS,MAAMowB,EAAWpwB,EAAO,KAAK;AAAA,QAErC,UAAAA,EAAO;AAAA,MAAA;AAAA,MANHA,EAAO;AAAA,IAAA,CAQf,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;AAEAmwB,GAAiB,YAAY;AAAA,EAC3B,YAAY52C,EAAU,OAAO;AAAA,EAC7B,YAAYA,EAAU,KAAK;AAC7B;ACzBA,SAAS+2C,GAAoB;AAAA,EAC3B,YAAAp2B;AAAA,EACA,eAAA4yB;AAAA,EACA,eAAAgC;AAAA,EACA,YAAAE;AAAA,EACA,iBAAAE;AAAA,EACA,YAAAE;AAAA,EACA,iBAAA5xC;AAAA,EACA,eAAAyD,IAAgB,CAAA;AAAA,EAChB,oBAAAwtC,IAAqB;AAAA,EACrB,kBAAA8B;AAAA,EACA,SAAAC;AAAA,EACA,eAAAC;AAAA,EACA,eAAAC;AAAA,EACA,eAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,YAAAT;AAAA,EACA,gBAAAd;AAAA,EACA,gBAAAwB;AACF,GAAG;AACD,QAAM,EAAE,SAAA/1C,IAAU,CAAA,GAAI,aAAAuG,EAAA,IAAgB3G,GAAA,GAEhCo2C,IAAetC,IACjBjxC,EAAgB,OAAO,CAAC0C,MAAUA,EAAM,QAAQqwC,CAAgB,IAChE/yC,GAGEwzC,IAAmB9B,EAAgB;AAAA,IACvC,CAACzvC,MAAUA,EAAM,UAAUqvC;AAAA,EAAA,GAEvBmC,IAAgBD,GAAkB,SAAS,UAC3CE,IAAkBF,GAAkB,SAAS,YAC7CG,IACJF,KAAiBD,GAAkB,gBAC/B/vC,EAAc+vC,EAAiB,aAAa,GAAG,WAAW,CAAA,IAC1D,CAAA,GAGAI,IAAmB,MACnBH,IAEA,gBAAA72C;AAAA,IAACd,EAAK;AAAA,IAAL;AAAA,MACC,MAAK;AAAA,MACL,OAAO01C;AAAA,MACP,UAAU2B;AAAA,MACV,OAAO,EAAE,MAAM,EAAA;AAAA,MAEf,UAAA;AAAA,QAAA,gBAAAt3C,EAAC,UAAA,EAAO,OAAM,IAAG,UAAA,qBAAiB;AAAA,QACjC83C,EAAmB,IAAI,CAACnxB,MACvB,gBAAA3mB,EAAC,UAAA,EAAwB,OAAO2mB,EAAO,KACpC,UAAAA,EAAO,MAAA,GADGA,EAAO,GAEpB,CACD;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAKHkxB,IAEA,gBAAA92C;AAAA,IAACd,EAAK;AAAA,IAAL;AAAA,MACC,MAAK;AAAA,MACL,OAAO01C;AAAA,MACP,UAAU2B;AAAA,MACV,OAAO,EAAE,MAAM,EAAA;AAAA,MAEf,UAAA;AAAA,QAAA,gBAAAt3C,EAAC,UAAA,EAAO,OAAM,SAAQ,UAAA,qBAAiB;AAAA,QACvC,gBAAAA,EAAC,UAAA,EAAO,OAAM,QAAO,UAAA,iBAAA,CAAc;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAMvC,gBAAAA;AAAA,IAACC,EAAK;AAAA,IAAL;AAAA,MACC,MAAK;AAAA,MACL,MAAK;AAAA,MACL,aAAY;AAAA,MACZ,OAAO01C;AAAA,MACP,UAAU2B;AAAA,MACV,OAAO,EAAE,MAAM,EAAA;AAAA,IAAE;AAAA,EAAA,GAMjBU,IAAgB,MAChBJ,IAAsB,mCACtBC,IAAwB,uCACrB;AAGT,SACE,gBAAA92C,EAAC6lC,IAAA,EAAK,WAAU,2BACd,UAAA;AAAA,IAAA,gBAAA7lC,EAAC6lC,GAAK,QAAL,EAAY,WAAU,wEACrB,UAAA;AAAA,MAAA,gBAAA5mC,EAAC,WAAM,UAAA,yBAAA,CAAsB;AAAA,MAC7B,gBAAAA,EAACiB,KAAO,SAAQ,SAAQ,MAAK,OAAM,SAASk2C,GAAS,UAAA,QAAA,CAErD;AAAA,IAAA,GACF;AAAA,IACA,gBAAAp2C,EAAC6lC,GAAK,MAAL,EAAU,WAAU,OACnB,UAAA;AAAA,MAAA,gBAAA5mC,EAAC82C,IAAA,EAAiB,YAAAf,GAAwB,YAAAgB,EAAA,CAAwB;AAAA,MACjEl2B,EAAW,SAAS,KACnB,gBAAA9f,EAAC,OAAA,EAAI,WAAU,QACb,UAAA;AAAA,QAAA,gBAAAf,EAAC,SAAA,EAAM,WAAU,2BAA0B,UAAA,wBAE3C;AAAA,QACC6gB,EAAW,IAAI,CAACnc,MAAS;AACxB,gBAAM,EAAE,YAAAuzC,GAAY,YAAAC,GAAY,YAAAC,EAAA,IAC9B1zC,GAAoBC,GAAMP,GAAiBzC,CAAO;AACpD,iBACE,gBAAAX;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAU;AAAA,cAEV,UAAA;AAAA,gBAAA,gBAAAA,EAAC,SAAA,EAAM,WAAU,eACf,UAAA;AAAA,kBAAA,gBAAAf,EAAC,YAAQ,UAAAi4C,EAAA,CAAW;AAAA,kBAAS;AAAA,kBAAIC;AAAA,kBAAW;AAAA,kBAC3CC;AAAA,kBAAW;AAAA,gBAAA,GACd;AAAA,gBACA,gBAAAn4C;AAAA,kBAACiB;AAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,SAAS,MAAMu2C,EAAkB9yC,EAAK,EAAE;AAAA,oBACxC,OAAM;AAAA,oBAEL,UAAAgK,EAAO;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACV;AAAA,YAAA;AAAA,YAdKhK,EAAK;AAAA,UAAA;AAAA,QAiBhB,CAAC;AAAA,MAAA,GACH;AAAA,MAGF,gBAAA3D,EAAC,OAAA,EAAI,WAAU,mBACb,UAAA;AAAA,QAAA,gBAAAf,EAAC,SAAA,EAAM,WAAU,2BAA0B,UAAA,sBAAkB;AAAA,QAC7D,gBAAAe,EAACd,EAAK,OAAL,EAAW,WAAU,QACpB,UAAA;AAAA,UAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,WAAU,SAAQ,UAAA,mCAA+B;AAAA,UAC7D,gBAAAD;AAAA,YAACC,EAAK;AAAA,YAAL;AAAA,cACC,MAAK;AAAA,cACL,OAAOwzC;AAAA,cACP,UAAU2D;AAAA,cAET,UAAAM,KACCA,EAAa,IAAI,CAAC7wC,MAChB,gBAAA9F,EAAC,UAAA,EAAuB,OAAO8F,EAAM,KAClC,UAAA;AAAA,gBAAAA,EAAM,SAASA,EAAM;AAAA,gBAAI;AAAA,gBAAGA,EAAM;AAAA,gBAAI;AAAA,cAAA,EAAA,GAD5BA,EAAM,GAEnB,CACD;AAAA,YAAA;AAAA,UAAA;AAAA,QACL,GACF;AAAA,QAEA,gBAAA9F,EAAC,OAAA,EAAI,WAAU,8BACb,UAAA;AAAA,UAAA,gBAAAf,EAAC,SAAI,WAAU,YACb,UAAA,gBAAAe,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,YAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,WAAU,SAAQ,UAAA,gBAAY;AAAA,YAC1C,gBAAAD;AAAA,cAACC,EAAK;AAAA,cAAL;AAAA,gBACC,MAAK;AAAA,gBACL,OAAOw1C;AAAA,gBACP,UAAU4B;AAAA,gBACV,UAAUxB,EAAgB,WAAW;AAAA,gBAGpC,UAAAA,EAAgB,IAAI,CAACzvC,wBACnB,UAAA,EAAyB,OAAOA,EAAM,OACpC,UAAA;AAAA,kBAAAA,EAAM,SAASA,EAAM;AAAA,kBAAM;AAAA,kBAAGA,EAAM;AAAA,kBAAM;AAAA,kBAASA,EAAM;AAAA,kBAAK;AAAA,gBAAA,EAAA,GADpDA,EAAM,KAEnB,CACD;AAAA,cAAA;AAAA,YAAA;AAAA,8BAEFnG,EAAK,MAAL,EAAU,OAAK,IAAC,UAAA,2CAAA,CAEjB;AAAA,UAAA,EAAA,CACF,EAAA,CACF;AAAA,4BACC,OAAA,EAAI,WAAU,YACb,UAAA,gBAAAc,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,YAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,WAAU,SAAQ,UAAA,eAAW;AAAA,YACzC,gBAAAc,EAAC,OAAA,EAAI,WAAU,kCACZ,UAAA;AAAA,cAAAg3C,EAAA;AAAA,cACD,gBAAA/3C;AAAA,gBAACiB;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,SAASs2C;AAAA,kBACT,UACE,CAAC9D,KACD,CAACgC,KACDI,EAAgB,WAAW;AAAA,kBAE7B,OAAO,EAAE,YAAY,EAAA;AAAA,kBACrB,OAAM;AAAA,kBAEL,UAAAnnC,EAAO;AAAA,gBAAA;AAAA,cAAA;AAAA,YACV,GACF;AAAA,8BACCzO,EAAK,MAAL,EAAU,OAAK,IAAE,cAAc,CAAE;AAAA,UAAA,EAAA,CACpC,EAAA,CACF;AAAA,QAAA,GACF;AAAA,QAECgI,MAAgBtD,EAAU,cAAc,WACvC,gBAAA3E,EAAC,SAAI,WAAU,yBACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,aACb,UAAA,gBAAAe,EAACd,EAAK,OAAL,EAAW,WAAU,mBACpB,UAAA;AAAA,UAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,WAAU,SAAQ,UAAA,oBAAgB;AAAA,UAC9C,gBAAAc,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA;AAAA,YAAA,gBAAAA;AAAA,cAACd,EAAK;AAAA,cAAL;AAAA,gBACC,MAAK;AAAA,gBACL,OAAOg2C,KAAkB;AAAA,gBACzB,UAAUwB;AAAA,gBACV,UAAU/1C,EAAQ,WAAW;AAAA,gBAC7B,OAAO,EAAE,MAAM,EAAA;AAAA,gBAEf,UAAA;AAAA,kBAAA,gBAAA1B,EAAC,UAAA,EAAO,OAAM,IAAG,UAAA,sBAAkB;AAAA,kBAClC0B,EAAQ,IAAI,CAACwE,wBACX,UAAA,EAAwB,OAAOA,EAAM,MACnC,UAAA;AAAA,oBAAAA,EAAM,SAASA,EAAM;AAAA,oBAAK;AAAA,oBAAGA,EAAM;AAAA,oBAAK;AAAA,kBAAA,EAAA,GAD9BA,EAAM,IAEnB,CACD;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAEH,gBAAAlG;AAAA,cAACiB;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,SAAS,MAAMs2C,EAAetB,CAAc;AAAA,gBAC5C,UAAU,CAACA,KAAkBv0C,EAAQ,WAAW;AAAA,gBAChD,OAAO,EAAE,YAAY,EAAA;AAAA,gBACrB,OAAM;AAAA,gBAEL,UAAAgN,EAAO;AAAA,cAAA;AAAA,YAAA;AAAA,UACV,GACF;AAAA,4BACCzO,EAAK,MAAL,EAAU,OAAK,IAAC,UAAA,6BAAA,CAA0B;AAAA,QAAA,EAAA,CAC7C,GACF,EAAA,CACF;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AAEAg3C,GAAoB,YAAY;AAAA,EAC9B,YAAY/2C,EAAU;AAAA,IACpBA,EAAU,MAAM;AAAA,MACd,IAAIA,EAAU;AAAA,MACd,OAAOA,EAAU;AAAA,MACjB,OAAOA,EAAU;AAAA,MACjB,OAAOA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,IAAI,CAAC;AAAA,IAAA,CAC9D;AAAA,EAAA,EACD;AAAA,EACF,eAAeA,EAAU,OAAO;AAAA,EAChC,eAAeA,EAAU,OAAO;AAAA,EAChC,YAAYA,EAAU,OAAO;AAAA,EAC7B,iBAAiBA,EAAU;AAAA,IACzBA,EAAU,MAAM;AAAA,MACd,OAAOA,EAAU;AAAA,MACjB,OAAOA,EAAU;AAAA,MACjB,MAAMA,EAAU;AAAA,IAAA,CACjB;AAAA,EAAA,EACD;AAAA,EACF,YAAYA,EAAU,OAAO;AAAA,EAC7B,iBAAiBA,EAAU;AAAA,IACzBA,EAAU,MAAM;AAAA,MACd,KAAKA,EAAU,OAAO;AAAA,MACtB,OAAOA,EAAU;AAAA,MACjB,QAAQA,EAAU,QAAQA,EAAU,MAAM;AAAA,IAAA,CAC3C;AAAA,EAAA,EACD;AAAA,EACF,eAAeA,EAAU;AAAA,EACzB,oBAAoBA,EAAU;AAAA,EAC9B,kBAAkBA,EAAU;AAAA,EAC5B,SAASA,EAAU,KAAK;AAAA,EACxB,eAAeA,EAAU,KAAK;AAAA,EAC9B,eAAeA,EAAU,KAAK;AAAA,EAC9B,eAAeA,EAAU,KAAK;AAAA,EAC9B,gBAAgBA,EAAU,KAAK;AAAA,EAC/B,mBAAmBA,EAAU,KAAK;AAAA,EAClC,YAAYA,EAAU,KAAK;AAAA,EAC3B,gBAAgBA,EAAU;AAAA,EAC1B,gBAAgBA,EAAU;AAC5B;AAEA+2C,GAAoB,eAAe;AAAA,EACjC,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,eAAe,CAAA;AACjB;AC9RA,MAAMmB,KAAkB,YAClBC,KAAa;AAKnB,SAASC,GAAiB;AAAA,EACxB,UAAAl0C;AAAA,EACA,WAAAm0C;AAAA,EACA,UAAA14C;AAAA,EACA,iBAAA24C;AAAA,EACA,gBAAAr+B;AAAA,EACA,qBAAA+6B;AAAA,EACA,aAAAlP;AAAA,EACA,iBAAA7hC;AAAA,EACA,eAAAyD;AACF,GAAG;AACD,QAAM,EAAE,OAAA2W,GAAO,OAAAqE,EAAA,IAAU21B,GACnB,CAACE,GAAgBC,CAAiB,IAAI5oC,EAAS,EAAK,GACpD,CAAC6oC,GAAaC,CAAc,IAAI9oC,EAASsoC,EAAe,GACxD,CAAChN,GAAiByN,CAAkB,IAAI/oC,EAAS,EAAE,GACnD,CAACgpC,GAAeC,CAAgB,IAAIjpC,EAAS,EAAE,GAC/C;AAAA,IACJ,qBAAAulC;AAAA,IACA,wBAAAC;AAAA,IACA,YAAAz0B;AAAA,IACA,eAAA4yB;AAAA,IACA,eAAAgC;AAAA,IACA,YAAAE;AAAA,IACA,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,YAAAE;AAAA,IACA,wBAAAiD;AAAA,IACA,mBAAAC;AAAA,IACA,mBAAArJ;AAAA,IACA,oBAAAsJ;AAAA,IACA,uBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,gBAAAnD;AAAA,IACA,oBAAAoD;AAAA,EAAA,IACErE,GAAmB;AAAA,IACrB,WAAW5wC;AAAA,IACX,aAAA4hC;AAAA,IACA,iBAAA7hC;AAAA,IACA,qBAAA+wC;AAAA,IACA,UAAU;AAAA,IACV,oBAAoB;AAAA,EAAA,CACrB,GAEKoE,IAAoB,MAAM;AAE9B,QADAZ,EAAkB,CAACD,CAAc,GAC7B,CAACA,GAAgB;AAEnB,MAAAG,EAAeR,EAAe;AAC9B,YAAMmB,IAAeC;AAAA,QACnBr/B,KAAkB,CAAA;AAAA,QAClB,CAAC,CAAC7S,MAAMA,EAAE,MAAM,aAAa;AAAA,QAC7B,CAAC,KAAK;AAAA,MAAA;AAER,MAAAuxC,EAAmBU,EAAa,SAAS,IAAIA,EAAa,CAAC,EAAE,KAAK,EAAE,GACpER,EAAiB,EAAE;AAAA,IACrB;AAAA,EACF,GAEMU,IAAe,MAAM;AACzB,IAAIjB,MACEG,MAAgBP,KACdhN,MACFoN,EAAgBp0C,GAAUgnC,GAAiB,IAAI,GAC/CsN,EAAkB,EAAK,KAEhBC,MAAgBN,MACrBS,EAAc,WAChBN,EAAgBp0C,GAAU,MAAM00C,EAAc,KAAA,CAAM,GACpDJ,EAAkB,EAAK;AAAA,EAI/B;AAEA,SACE,gBAAA33C,EAAC6lC,IAAA,EAAK,WAAU,eACd,UAAA;AAAA,IAAA,gBAAA7lC;AAAA,MAAC6lC,GAAK;AAAA,MAAL;AAAA,QACC,WAAW,GAAGv3B,GAAA,CAAS;AAAA,QAEvB,UAAA;AAAA,UAAA,gBAAArP,EAAC,QAAA,EAAK,WAAW4iB,KAAS,yBACvB,eAASxe,GACZ;AAAA,UACA,gBAAArD,EAAC,OAAA,EAAI,WAAU,gBACZ,UAAA;AAAA,YAAAw3C,EAAU,wBACRl7B,IAAA,EAAO,SAAQ,WAAU,OAAM,WAAU,MAAK,WAAA,CAAW;AAAA,YAE3D63B,KACC,gBAAAl1C;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OACEu4C,EAAU,KACN,kDACA;AAAA,gBAEN,OAAOA,EAAU,KAAK,EAAE,QAAQ,cAAA,IAAkB,CAAA;AAAA,gBAElD,UAAA,gBAAAx3C;AAAA,kBAACE;AAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,SAAS+3C;AAAA,oBACT,UAAUT,EAAU;AAAA,oBACpB,OAAOA,EAAU,KAAK,EAAE,eAAe,OAAA,IAAW,CAAA;AAAA,oBAElD,UAAA;AAAA,sBAAA,gBAAAv4C,EAAC,QAAA,EAAM,YAAO,QAAA,CAAQ;AAAA,sBAAO;AAAA,sBAAE6gB,EAAW,SAAS,KAAK,IAAIA,EAAW,MAAM;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAC/E;AAAA,YAAA;AAAA,YAGH23B,KACC,gBAAAx4C;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OACEu4C,EAAU,KACN,mDACA;AAAA,gBAEN,OAAOA,EAAU,KAAK,EAAE,QAAQ,cAAA,IAAkB,CAAA;AAAA,gBAElD,UAAA,gBAAAv4C;AAAA,kBAACiB;AAAA,kBAAA;AAAA,oBACC,SAASw3C,IAAiB,UAAU;AAAA,oBACpC,MAAK;AAAA,oBACL,SAASa;AAAA,oBACT,UAAUf,EAAU;AAAA,oBACpB,OAAOA,EAAU,KAAK,EAAE,eAAe,OAAA,IAAW,CAAA;AAAA,oBAEjD,UAAAE,IAAiB,UAChB,gBAAA13C,EAAAsI,GAAA,EACG,UAAA;AAAA,sBAAAqF,EAAO;AAAA,sBAAa;AAAA,oBAAA,EAAA,CACvB;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAEJ;AAAA,YAAA;AAAA,UACF,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAA3N,EAAC6lC,GAAK,MAAL,EAAU,WAAU,aAClB,UAAA;AAAA,MAAA/mC;AAAA,MACAq1C,KAAuBG,KAAuB,CAACkD,EAAU,MACxD,gBAAAv4C;AAAA,QAACi3C;AAAA,QAAA;AAAA,UACC,YAAAp2B;AAAA,UACA,eAAA4yB;AAAA,UACA,eAAAgC;AAAA,UACA,YAAAE;AAAA,UACA,iBAAAE;AAAA,UACA,YAAAE;AAAA,UACA,iBAAA5xC;AAAA,UACA,eAAAyD;AAAA,UACA,oBAAkB;AAAA,UAClB,kBAAkBxD;AAAA,UAClB,SAAS,MAAMkxC,EAAuB,EAAK;AAAA,UAC3C,eAAe2D;AAAA,UACf,eAAerJ;AAAA,UACf,eAAe,CAAC1mC,MAAM0sC,EAAc1sC,EAAE,OAAO,KAAK;AAAA,UAClD,gBAAgBgwC;AAAA,UAChB,mBAAmBC;AAAA,UACnB,YAAYC;AAAA,UACZ,gBAAAnD;AAAA,UACA,gBAAgBoD;AAAA,QAAA;AAAA,MAAA;AAAA,MAGnBb,KAAmBC,KAClB,gBAAAz4C,EAAC,OAAA,EAAI,WAAU,oCACb,UAAA,gBAAAe,EAAC,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,QAAA,gBAAAf,EAAC,SAAI,WAAU,YACb,UAAA,gBAAAe,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,UAAA,gBAAAD;AAAA,YAACC,EAAK;AAAA,YAAL;AAAA,cACC,MAAK;AAAA,cACL,IAAI,GAAGmE,CAAQ;AAAA,cACf,OAAM;AAAA,cACN,SAASu0C,MAAgBN;AAAA,cACzB,UAAU,MAAMO,EAAeP,EAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAE1CM,MAAgBN,MACf,gBAAAr4C;AAAA,YAACC,EAAK;AAAA,YAAL;AAAA,cACC,MAAK;AAAA,cACL,MAAK;AAAA,cACL,aAAY;AAAA,cACZ,WAAU;AAAA,cACV,OAAO64C;AAAA,cACP,UAAU,CAAC5vC,MAAM6vC,EAAiB7vC,EAAE,OAAO,KAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QAClD,EAAA,CAEJ,EAAA,CACF;AAAA,0BACC,OAAA,EAAI,WAAU,YACb,UAAA,gBAAAnI,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,UAAA,gBAAAD;AAAA,YAACC,EAAK;AAAA,YAAL;AAAA,cACC,MAAK;AAAA,cACL,IAAI,GAAGmE,CAAQ;AAAA,cACf,OAAM;AAAA,cACN,SAASu0C,MAAgBP;AAAA,cACzB,UAAU,MAAMQ,EAAeR,EAAe;AAAA,YAAA;AAAA,UAAA;AAAA,UAE/CO,MAAgBP,MACfj+B,KACAA,EAAe,SAAS,KACtB,gBAAAna;AAAA,YAACC,EAAK;AAAA,YAAL;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,OAAOmrC;AAAA,cACP,UAAU,CAACliC,MAAM2vC,EAAmB3vC,EAAE,OAAO,KAAK;AAAA,cAEjD,UAAAswC;AAAA,gBACCr/B;AAAA,gBACA,CAAC,CAAC7S,MAAMA,EAAE,MAAM,aAAa;AAAA,gBAC7B,CAAC,KAAK;AAAA,cAAA,EACN,IAAI,CAACD,MACL,gBAAArH,EAAC,UAAA,EAAsB,OAAOqH,EAAM,IACjC,UAAAA,EAAM,MAAA,GADIA,EAAM,EAEnB,CACD;AAAA,YAAA;AAAA,UAAA;AAAA,UAGNsxC,MAAgBP,OACd,CAACj+B,KAAkBA,EAAe,WAAW,MAC5C,gBAAAna,EAAC,OAAA,EAAI,WAAU,yBAAwB,UAAA,+BAAA,CAEvC;AAAA,QAAA,EAAA,CAEN,EAAA,CACF;AAAA,QACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,qBACb,UAAA,gBAAAA;AAAA,UAACiB;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,SAASw4C;AAAA,YACT,UACGd,MAAgBP,MAAmB,CAAChN,KACpCuN,MAAgBN,MAAc,CAACS,EAAc,KAAA;AAAA,YAEjD,UAAA;AAAA,UAAA;AAAA,QAAA,EAED,CACF;AAAA,MAAA,EAAA,CACF,EAAA,CACF;AAAA,IAAA,EAAA,CAEJ;AAAA,EAAA,GACF;AAEJ;AAEAR,GAAiB,YAAY;AAAA,EAC3B,UAAUp4C,EAAU,OAAO;AAAA,EAC3B,WAAWA,EAAU,MAAM;AAAA,IACzB,OAAOA,EAAU;AAAA,IACjB,OAAOA,EAAU;AAAA,IACjB,OAAOA,EAAU;AAAA,IACjB,IAAIA,EAAU;AAAA,EAAA,CACf,EAAE;AAAA,EACH,UAAUA,EAAU,KAAK;AAAA,EACzB,iBAAiBA,EAAU,KAAK;AAAA,EAChC,gBAAgBA,EAAU;AAAA,IACxBA,EAAU,MAAM;AAAA,MACd,IAAIA,EAAU,OAAO;AAAA,MACrB,OAAOA,EAAU,OAAO;AAAA,IAAA,CACzB;AAAA,EAAA;AAAA,EAEH,qBAAqBA,EAAU;AAAA,EAC/B,aAAaA,EAAU,MAAM;AAAA,IAC3B,IAAIA,EAAU;AAAA,IACd,MAAMA,EAAU;AAAA,MACdA,EAAU,MAAM;AAAA,QACd,IAAIA,EAAU;AAAA,QACd,OAAOA,EAAU;AAAA,QACjB,OAAOA,EAAU;AAAA,QACjB,OAAOA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,IAAI,CAAC;AAAA,MAAA,CAC9D;AAAA,IAAA;AAAA,EACH,CACD;AAAA,EACD,iBAAiBA,EAAU;AAAA,IACzBA,EAAU,MAAM;AAAA,MACd,KAAKA,EAAU,OAAO;AAAA,MACtB,OAAOA,EAAU;AAAA,MACjB,QAAQA,EAAU,QAAQA,EAAU,MAAM;AAAA,IAAA,CAC3C;AAAA,EAAA;AAAA,EAEH,eAAeA,EAAU;AAC3B;AAEAo4C,GAAiB,eAAe;AAAA,EAC9B,gBAAgB,CAAA;AAAA,EAChB,qBAAqB;AAAA,EACrB,aAAa;AAAA,EACb,iBAAiB,CAAA;AAAA,EACjB,eAAe,CAAA;AACjB;AChSA,SAASoB,GAAiB;AAAA,EACxB,UAAAt1C;AAAA,EACA,WAAAm0C;AAAA,EACA,UAAA14C;AAAA,EACA,mBAAA85C;AAAA,EACA,SAAAj/B;AAAA,EACA,qBAAAw6B;AAAA,EACA,aAAAlP;AAAA,EACA,iBAAA7hC;AAAA,EACA,eAAAyD;AACF,GAAG;AACD,QAAM,EAAE,OAAA2W,GAAO,OAAAjP,GAAO,OAAAsT,EAAA,IAAU21B,GAC1B;AAAA,IACJ,qBAAAlD;AAAA,IACA,wBAAAC;AAAA,IACA,YAAAz0B;AAAA,IACA,eAAA4yB;AAAA,IACA,eAAAgC;AAAA,IACA,YAAAE;AAAA,IACA,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,YAAAE;AAAA,IACA,wBAAAiD;AAAA,IACA,mBAAAC;AAAA,IACA,mBAAArJ;AAAA,IACA,oBAAAsJ;AAAA,IACA,uBAAAC;AAAA,IACA,gBAAAC;AAAA,EAAA,IACEpE,GAAmB;AAAA,IACrB,WAAW5wC;AAAA,IACX,aAAA4hC;AAAA,IACA,iBAAA7hC;AAAA,IACA,qBAAA+wC;AAAA,IACA,UAAU;AAAA,IACV,oBAAoB;AAAA,EAAA,CACrB,GAEK0E,IAAe,MAAM;AACzB,IAAID,KAAqBj/B,KACvBi/B,EAAkBj/B,GAAStW,CAAQ;AAAA,EAEvC;AAEA,SACE,gBAAArD,EAAC6lC,IAAA,EAAK,WAAU,gCACd,UAAA;AAAA,IAAA,gBAAA7lC;AAAA,MAAC6lC,GAAK;AAAA,MAAL;AAAA,QACC,WAAW,QAAQv3B,GAAA,CAAS;AAAA,QAE5B,UAAA;AAAA,UAAA,gBAAArP,EAAC,QAAA,EAAK,WAAW4iB,KAAS,4BACvB,eAASxe,GACZ;AAAA,UACA,gBAAArD,EAAC,OAAA,EAAI,WAAU,gBACZ,UAAA;AAAA,YAAAm0C,KACC,gBAAAl1C;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OACEu4C,EAAU,KACN,kDACA;AAAA,gBAEN,OAAOA,EAAU,KAAK,EAAE,QAAQ,cAAA,IAAkB,CAAA;AAAA,gBAElD,UAAA,gBAAAx3C;AAAA,kBAACE;AAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,SAAS+3C;AAAA,oBACT,UAAUT,EAAU;AAAA,oBACpB,OAAOA,EAAU,KAAK,EAAE,eAAe,OAAA,IAAW,CAAA;AAAA,oBAElD,UAAA;AAAA,sBAAA,gBAAAv4C,EAAC,QAAA,EAAM,YAAO,QAAA,CAAQ;AAAA,sBAAO;AAAA,sBAAE6gB,EAAW,SAAS,KAAK,IAAIA,EAAW,MAAM;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAC/E;AAAA,YAAA;AAAA,YAGH84B,KACC,gBAAA35C;AAAA,cAACiB;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,SAAS24C;AAAA,gBACT,OAAM;AAAA,gBAEL,UAAAlrC,EAAO;AAAA,cAAA;AAAA,YAAA;AAAA,UACV,EAAA,CAEJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAA3N,EAAC6lC,GAAK,MAAL,EAAU,WAAU,aAClB,UAAA;AAAA,MAAAsO,KAAuBG,KAAuB,CAACkD,EAAU,MACxD,gBAAAv4C;AAAA,QAACi3C;AAAA,QAAA;AAAA,UACC,YAAAp2B;AAAA,UACA,eAAA4yB;AAAA,UACA,eAAAgC;AAAA,UACA,YAAAE;AAAA,UACA,iBAAAE;AAAA,UACA,YAAAE;AAAA,UACA,iBAAA5xC;AAAA,UACA,eAAAyD;AAAA,UACA,oBAAkB;AAAA,UAClB,kBAAkBxD;AAAA,UAClB,SAAS,MAAMkxC,EAAuB,EAAK;AAAA,UAC3C,eAAe2D;AAAA,UACf,eAAerJ;AAAA,UACf,eAAe,CAAC1mC,MAAM0sC,EAAc1sC,EAAE,OAAO,KAAK;AAAA,UAClD,gBAAgBgwC;AAAA,UAChB,mBAAmBC;AAAA,UACnB,YAAYC;AAAA,QAAA;AAAA,MAAA;AAAA,MAGfv5C;AAAA,IAAA,EAAA,CACH;AAAA,EAAA,GACF;AAEJ;AAEA65C,GAAiB,YAAY;AAAA,EAC3B,UAAUx5C,EAAU,OAAO;AAAA,EAC3B,WAAWA,EAAU,MAAM;AAAA,IACzB,OAAOA,EAAU;AAAA,IACjB,OAAOA,EAAU;AAAA,IACjB,OAAOA,EAAU;AAAA,IACjB,IAAIA,EAAU;AAAA,EAAA,CACf,EAAE;AAAA,EACH,UAAUA,EAAU,KAAK;AAAA,EACzB,mBAAmBA,EAAU;AAAA,EAC7B,SAASA,EAAU;AAAA,EACnB,qBAAqBA,EAAU;AAAA,EAC/B,aAAaA,EAAU,MAAM;AAAA,IAC3B,IAAIA,EAAU;AAAA,IACd,MAAMA,EAAU;AAAA,MACdA,EAAU,MAAM;AAAA,QACd,IAAIA,EAAU;AAAA,QACd,OAAOA,EAAU;AAAA,QACjB,OAAOA,EAAU;AAAA,QACjB,OAAOA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,IAAI,CAAC;AAAA,MAAA,CAC9D;AAAA,IAAA;AAAA,EACH,CACD;AAAA,EACD,iBAAiBA,EAAU;AAAA,IACzBA,EAAU,MAAM;AAAA,MACd,KAAKA,EAAU,OAAO;AAAA,MACtB,OAAOA,EAAU;AAAA,MACjB,QAAQA,EAAU,QAAQA,EAAU,MAAM;AAAA,IAAA,CAC3C;AAAA,EAAA;AAAA,EAEH,eAAeA,EAAU;AAC3B;AAEAw5C,GAAiB,eAAe;AAAA,EAC9B,mBAAmB;AAAA,EACnB,SAAS;AAAA,EACT,qBAAqB;AAAA,EACrB,aAAa;AAAA,EACb,iBAAiB,CAAA;AAAA,EACjB,eAAe,CAAA;AACjB;ACxJA,SAASG,GAAiB;AAAA,EACxB,SAAAn/B;AAAA,EACA,YAAAqrB;AAAA,EACA,eAAA+T;AAAA,EACA,QAAA3yC;AAAA,EACA,aAAAub;AAAA,EACA,UAAAq3B;AAAA,EACA,wBAAAC;AAAA,EACA,qBAAA9E;AAAA,EACA,aAAAlP;AAAA,EACA,iBAAA7hC;AAAA,EACA,0BAAA81C;AAAA,EACA,aAAAl/B;AAAA,EACA,eAAAnT;AACF,GAAG;AACD,QAAM;AAAA,IACJ,qBAAAytC;AAAA,IACA,wBAAAC;AAAA,IACA,YAAAz0B;AAAA,IACA,eAAA4yB;AAAA,IACA,eAAAgC;AAAA,IACA,YAAAE;AAAA,IACA,eAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,YAAAE;AAAA,IACA,wBAAAiD;AAAA,IACA,mBAAAC;AAAA,IACA,mBAAArJ;AAAA,IACA,oBAAAsJ;AAAA,IACA,uBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,gBAAAnD;AAAA,IACA,oBAAAoD;AAAA,EAAA,IACErE,GAAmB;AAAA,IACrB,WAAWt6B;AAAA,IACX,aAAAsrB;AAAA,IACA,iBAAA7hC;AAAA,IACA,qBAAA+wC;AAAA,IACA,UAAU;AAAA,IACV,oBAAoB;AAAA,EAAA,CACrB,GAEKgF,IAAoB,MAAM;AAC9B,IAAIH,KACFA,EAASr/B,CAAO;AAAA,EAEpB;AAEA,SACE,gBAAA3Z,EAAC6lC,IAAA,EAAK,WAAU,uCACd,UAAA;AAAA,IAAA,gBAAA7lC,EAAC6lC,GAAK,QAAL,EAAY,WAAU,qDACrB,UAAA;AAAA,MAAA,gBAAA7lC,EAAC,QAAA,EAAK,WAAU,yBACd,UAAA;AAAA,QAAA,gBAAAf,EAAC,QAAA,EAAM,YAAO,aAAA,CAAa;AAAA,QAC1B+lC,KAAcrrB;AAAA,MAAA,GAMjB;AAAA,MACA,gBAAA3Z,EAAC,OAAA,EAAI,WAAU,gBACZ,UAAA;AAAA,QAAAm0C,KACC,gBAAAn0C;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,SAAS+3C;AAAA,YACT,OAAM;AAAA,YAEN,UAAA;AAAA,cAAA,gBAAAh5C,EAAC,QAAA,EAAM,YAAO,QAAA,CAAQ;AAAA,cAAO;AAAA,cAAE6gB,EAAW,SAAS,KAAK,IAAIA,EAAW,MAAM;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGhFk5B,KACC,gBAAA/5C;AAAA,UAACiB;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,SAASi5C;AAAA,YACT,OAAM;AAAA,YAEL,UAAAxrC,EAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MACV,EAAA,CAEJ;AAAA,IAAA,GACF;AAAA,IACA,gBAAA3N,EAAC6lC,GAAK,MAAL,EAAU,WAAU,sBAClB,UAAA;AAAA,MAAAyO,KACC,gBAAAr1C;AAAA,QAACi3C;AAAA,QAAA;AAAA,UACC,YAAAp2B;AAAA,UACA,eAAA4yB;AAAA,UACA,eAAAgC;AAAA,UACA,YAAAE;AAAA,UACA,iBAAAE;AAAA,UACA,YAAAE;AAAA,UACA,iBAAA5xC;AAAA,UACA,eAAAyD;AAAA,UACA,oBAAoB;AAAA,UACpB,kBAAkB8S;AAAA,UAClB,SAAS,MAAM46B,EAAuB,EAAK;AAAA,UAC3C,eAAe2D;AAAA,UACf,eAAerJ;AAAA,UACf,eAAe,CAAC1mC,MAAM0sC,EAAc1sC,EAAE,OAAO,KAAK;AAAA,UAClD,gBAAgBgwC;AAAA,UAChB,mBAAmBC;AAAA,UACnB,YAAYC;AAAA,UACZ,gBAAAnD;AAAA,UACA,gBAAgBoD;AAAA,QAAA;AAAA,MAAA;AAAA,MAInBlyC,KACCA,EAAO,IAAI,CAACN,MACV,gBAAA7G;AAAA,QAAC05C;AAAA,QAAA;AAAA,UAEC,UAAU7yC,EAAM;AAAA,UAChB,WAAWA,EAAM;AAAA,UACjB,mBAAmBmzC;AAAA,UACnB,SAAAt/B;AAAA,UACA,qBAAqBu/B;AAAA,UACrB,aACEpzC,EAAM,KAAK,cACP;AAAA,YACE,IAAIA,EAAM,KAAK,iBAAiB;AAAA,YAChC,MAAMA,EAAM,KAAK;AAAA,UAAA,IAEnB;AAAA,UAEN,iBAAiBkU;AAAA,UACjB,eAAAnT;AAAA,UAEC,UAAA8a,IAAcA,EAAY7b,CAAK,IAAI;AAAA,QAAA;AAAA,QAjB/BA,EAAM;AAAA,MAAA,CAmBd;AAAA,IAAA,EAAA,CACL;AAAA,EAAA,GACF;AAEJ;AAEAgzC,GAAiB,YAAY;AAAA,EAC3B,SAAS35C,EAAU,OAAO;AAAA,EAC1B,YAAYA,EAAU,OAAO;AAAA,EAC7B,eAAeA,EAAU;AAAA,EACzB,QAAQA,EAAU;AAAA,IAChBA,EAAU,MAAM;AAAA,MACd,KAAKA,EAAU,OAAO;AAAA,MACtB,UAAUA,EAAU;AAAA,MACpB,MAAMA,EAAU,MAAM,CAAA,CAAE,EAAE;AAAA,IAAA,CAC3B;AAAA,EAAA,EACD;AAAA,EACF,aAAaA,EAAU,KAAK;AAAA,EAC5B,UAAUA,EAAU;AAAA,EACpB,wBAAwBA,EAAU;AAAA,EAClC,qBAAqBA,EAAU;AAAA,EAC/B,aAAaA,EAAU,MAAM;AAAA,IAC3B,IAAIA,EAAU;AAAA,IACd,MAAMA,EAAU;AAAA,MACdA,EAAU,MAAM;AAAA,QACd,IAAIA,EAAU;AAAA,QACd,OAAOA,EAAU;AAAA,QACjB,OAAOA,EAAU;AAAA,QACjB,OAAOA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,IAAI,CAAC;AAAA,MAAA,CAC9D;AAAA,IAAA;AAAA,EACH,CACD;AAAA,EACD,iBAAiBA,EAAU;AAAA,IACzBA,EAAU,MAAM;AAAA,MACd,KAAKA,EAAU,OAAO;AAAA,MACtB,OAAOA,EAAU;AAAA,MACjB,QAAQA,EAAU,QAAQA,EAAU,MAAM;AAAA,IAAA,CAC3C;AAAA,EAAA;AAAA,EAEH,0BAA0BA,EAAU;AAAA,EACpC,aAAaA,EAAU;AAAA,IACrBA,EAAU,MAAM;AAAA,MACd,KAAKA,EAAU,OAAO;AAAA,MACtB,OAAOA,EAAU;AAAA,MACjB,QAAQA,EAAU,QAAQA,EAAU,MAAM;AAAA,IAAA,CAC3C;AAAA,EAAA;AAAA,EAEH,eAAeA,EAAU;AAC3B;AAEA25C,GAAiB,eAAe;AAAA,EAC9B,eAAe;AAAA,EACf,UAAU;AAAA,EACV,wBAAwB;AAAA,EACxB,qBAAqB;AAAA,EACrB,aAAa;AAAA,EACb,iBAAiB,CAAA;AAAA,EACjB,0BAA0B;AAAA,EAC1B,aAAa,CAAA;AAAA,EACb,eAAe,CAAA;AACjB;ACpLA,SAASM,GAAiB,EAAE,OAAAj0C,GAAO,eAAAk0C,GAAe,kBAAAC,KAAoB;AAEpE,QAAM,CAACC,GAAeC,CAAgB,IAAIzqC;AAAA,IACxCsqC,GAAe,UAAU,CAAA;AAAA,EAAC,GAEtB,CAACI,GAAqBC,CAAsB,IAAI3qC;AAAA,IACpDsqC,GAAe,YAAY,CAAA;AAAA,EAAC;AAI9B,EAAA7jC,GAAU,MAAM;AACd,IAAAgkC,EAAiBH,GAAe,UAAU,EAAE,GAC5CK,EAAuBL,GAAe,YAAY,EAAE;AAAA,EACtD,GAAG,CAACA,CAAa,CAAC;AAQlB,QAAMM,IAAgC,CAACC,GAAW3gC,MAAiB;AACjE,UAAM4gC,IAAsB,EAAE,GAAG5gC,EAAA,GAC3B6gC,IAAe,IAAI,IAAIF,CAAS;AAGtC,kBAAO,KAAKC,CAAmB,EAAE,QAAQ,CAACE,MAAmB;AAC3D,YAAM9U,IAAc4U,EAAoBE,CAAc;AACtD,UAAI9U,KAAeA,EAAY,MAAM;AAEnC,cAAM+U,IAAqB/U,EAAY,KAAK;AAAA,UAC1C,CAACthC,MAAS,CAACm2C,EAAa,IAAIn2C,EAAK,KAAK;AAAA,QAAA;AAGxC,QAAIq2C,EAAmB,WAAW,IAEhC,OAAOH,EAAoBE,CAAc,IAChCC,EAAmB,WAAW/U,EAAY,KAAK,WAExD4U,EAAoBE,CAAc,IAAI;AAAA,UACpC,GAAG9U;AAAA,UACH,MAAM+U;AAAA,QAAA;AAAA,MAGZ;AAAA,IACF,CAAC,GAEMH;AAAA,EACT,GAMMI,IAA2B,CAC/BC,GACAhiC,GACA2hC,MACG;AAEH,UAAMjhC,IAAYlB,GAAiBwiC,EAAa,QAAQ;AAAA,MACtD,QAAQhiC;AAAA,MACR,UAAU2hC;AAAA,IAAA,CACX,GAGKM,IAA2Bh2C,EAAU;AAAA,MACzC,GAAG+1C;AAAA,MACH,QAAQthC,EAAU;AAAA,IAAA,CACnB;AAGD,IAAA4gC,EAAiB5gC,EAAU,SAAS,UAAU,CAAA,CAAE,GAChD8gC,EAAuB9gC,EAAU,SAAS,YAAY,CAAA,CAAE,GAGpD0gC,KACFA,EAAiB;AAAA,MACf,QAAQ1gC,EAAU,SAAS,UAAU,CAAA;AAAA,MACrC,UAAUA,EAAU,SAAS,YAAY,CAAA;AAAA,MACzC,OAAOuhC;AAAA,IAAA,CACR;AAAA,EAEL,GAKMhB,IAAoB,CAACx/B,MAAY;AAErC,UAAMzB,IAAgB,CAAC,GAAGqhC,CAAa,GAGjCa,IAAgBliC,EAAc,KAAK,CAAC3R,MAAMA,EAAE,OAAOoT,CAAO,GAC1D0gC,IAAgBD,IAAgBA,EAAc,SAAS,CAAA;AAI7D,QAFe1gC,GAAYxB,GAAeyB,CAAO,EAEtC,SAAS;AAElB,UAAIkgC,IAAsB,EAAE,GAAGJ,EAAA;AAC/B,aAAOI,EAAoBlgC,CAAO,GAGlCkgC,IAAsBF;AAAA,QACpBU;AAAA,QACAR;AAAA,MAAA;AAIF,YAAMK,IAAe,EAAE,GAAG/0C,EAAA;AAC1B,MAAI+0C,EAAa,UACfG,EAAc,QAAQ,CAACh3C,MAAa;AAClC,QAAI62C,EAAa,OAAO72C,CAAQ,MAC9B,OAAO62C,EAAa,OAAO72C,CAAQ,EAAE,aACrC,OAAO62C,EAAa,OAAO72C,CAAQ,EAAE;AAAA,MAEzC,CAAC,GAIH42C;AAAA,QACEC;AAAA,QACAhiC;AAAA,QACA2hC;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF,GAKMS,IAAsB,CAACj3C,GAAUk3C,GAAiBxC,MAAkB;AACxE,UAAM7/B,IAAgB,CAAC,GAAGqhC,CAAa;AACvC,QAAI9L;AAEJ,QAAI8M;AAEF,MAAA9M,IAAS7zB;AAAA,QACP1B;AAAA,QACAqiC;AAAA,QACAl3C;AAAA,QACA8B,GAAO;AAAA,MAAA;AAAA,aAEA4yC,GAAe;AAExB,YAAMyC,IAAgBtiC,EAAc;AAAA,QAClC,CAAC3R,MAAMA,EAAE,MAAM,YAAA,MAAkBwxC,EAAc,YAAA;AAAA,MAAY;AAG7D,UAAIyC;AAEF,QAAA/M,IAAS7zB;AAAA,UACP1B;AAAA,UACAsiC,EAAc;AAAA,UACdn3C;AAAA,UACA8B,GAAO;AAAA,QAAA;AAAA,WAEJ;AAGL,cAAMs1C,IAAa,GAAGzrC,GAAA,CAAQ,MAGxB0rC,IAAgBv1C,GAAO,SAAS9B,CAAQ,GAAG,YAAY;AAS7D,QAAAoqC,IAASl0B,GAASrB,GAPD;AAAA,UACf,IAAIuiC;AAAA,UACJ,OAAO1C;AAAA,UACP,QAAQ,CAAC10C,CAAQ;AAAA,UACjB,UAAUq3C;AAAA;AAAA,QAAA,GAG+Bv1C,GAAO,MAAM;AAAA,MAC1D;AAAA,IACF;AAEA,QAAIsoC,KAAUA,EAAO,SAAS;AAE5B,YAAMoM,IAAsBF;AAAA,QAC1B,CAACt2C,CAAQ;AAAA,QACTo2C;AAAA,MAAA,GAKIS,IAAe/1C,EAAUgB,CAAK;AACpC,MAAI+0C,EAAa,WAEXA,EAAa,OAAO72C,CAAQ,MAC9B,OAAO62C,EAAa,OAAO72C,CAAQ,EAAE,aACrC,OAAO62C,EAAa,OAAO72C,CAAQ,EAAE,gBAIvC,OAAO,KAAK62C,EAAa,MAAM,EAAE,QAAQ,CAACS,MAAkB;AAC1D,cAAM70C,IAAQo0C,EAAa,OAAOS,CAAa;AAC/C,YAAI70C,EAAM,eAAe,MAAM,QAAQA,EAAM,WAAW,GAAG;AACzD,gBAAMk0C,IAAqBl0C,EAAM,YAAY;AAAA,YAC3C,CAACnC,MAASA,EAAK,UAAUN;AAAA,UAAA;AAG3B,UAAI22C,EAAmB,WAAW,KAEhC,OAAOl0C,EAAM,aACb,OAAOA,EAAM,iBACJk0C,EAAmB,WAAWl0C,EAAM,YAAY,WAEzDA,EAAM,cAAck0C;AAAA,QAExB;AAAA,MACF,CAAC,IAIHC;AAAA,QACEC;AAAA,QACAhiC;AAAA,QACA2hC;AAAA,MAAA;AAAA,IAEJ,MAAA,CAAWpM,KAAUA,EAAO,SAE1B,QAAQ,MAAM,6BAA6BA,EAAO,KAAK;AAAA,EAE3D,GAKMmN,IAA6B,CAACjhC,GAAStW,MAAa;AACxD,UAAM6U,IAAgB,CAAC,GAAGqhC,CAAa,GACjC9L,IAAS5zB,GAAqB3B,GAAeyB,GAAStW,CAAQ;AAEpE,QAAIoqC,KAAUA,EAAO,SAAS;AAE5B,MAAIA,EAAO,WACT/zB,GAAYxB,GAAeyB,CAAO;AAIpC,YAAMkgC,IAAsBF;AAAA,QAC1B,CAACt2C,CAAQ;AAAA,QACTo2C;AAAA,MAAA,GAKIS,IAAe/1C,EAAUgB,CAAK;AACpC,MAAI+0C,EAAa,WAEXA,EAAa,OAAO72C,CAAQ,MAC9B,OAAO62C,EAAa,OAAO72C,CAAQ,EAAE,aACrC,OAAO62C,EAAa,OAAO72C,CAAQ,EAAE,gBAIvC,OAAO,KAAK62C,EAAa,MAAM,EAAE,QAAQ,CAACS,MAAkB;AAC1D,cAAM70C,IAAQo0C,EAAa,OAAOS,CAAa;AAC/C,YAAI70C,EAAM,eAAe,MAAM,QAAQA,EAAM,WAAW,GAAG;AACzD,gBAAMk0C,IAAqBl0C,EAAM,YAAY;AAAA,YAC3C,CAACnC,MAASA,EAAK,UAAUN;AAAA,UAAA;AAG3B,UAAI22C,EAAmB,WAAW,KAEhC,OAAOl0C,EAAM,aACb,OAAOA,EAAM,iBACJk0C,EAAmB,WAAWl0C,EAAM,YAAY,WAEzDA,EAAM,cAAck0C;AAAA,QAExB;AAAA,MACF,CAAC,IAIHC;AAAA,QACEC;AAAA,QACAhiC;AAAA,QACA2hC;AAAA,MAAA;AAAA,IAEJ,MAAA,CAAWpM,KAAUA,EAAO,SAE1B,QAAQ,MAAM,oCAAoCA,EAAO,KAAK;AAAA,EAElE,GAKMoN,IAA0B,CAAClhC,GAASsrB,MAAgB;AACxD,UAAM4U,IAAsB,EAAE,GAAGJ,EAAA;AAEjC,IACExU,MAAgB,QAChB,CAACA,EAAY,QACbA,EAAY,KAAK,WAAW,IAG5B,OAAO4U,EAAoBlgC,CAAO,IAGlCkgC,EAAoBlgC,CAAO,IAAIsrB,GAGjCyU,EAAuBG,CAAmB,GAGtCP,KACFA,EAAiB;AAAA,MACf,QAAQC;AAAA,MACR,UAAUM;AAAA,IAAA,CACX;AAAA,EAEL,GAKMiB,IAA+B,CAACz3C,GAAU4hC,MAAgB;AAE9D,QAAIqU,GAAkB;AAEpB,YAAMY,IAAe/1C,EAAUgB,CAAK;AAIpC,UAHK+0C,EAAa,WAChBA,EAAa,SAAS,CAAA,IAEpB,CAACA,EAAa,OAAO72C,CAAQ;AAC/B;AAGF,MACE4hC,MAAgB,QAChB,CAACA,EAAY,QACbA,EAAY,KAAK,WAAW,KAG5B,OAAOiV,EAAa,OAAO72C,CAAQ,EAAE,aACrC,OAAO62C,EAAa,OAAO72C,CAAQ,EAAE,kBAGrC62C,EAAa,OAAO72C,CAAQ,EAAE,cAAc4hC,EAAY,MACxDiV,EAAa,OAAO72C,CAAQ,EAAE,gBAAgB4hC,EAAY,KAG5DqU,EAAiB;AAAA,QACf,QAAQC;AAAA,QACR,UAAUE;AAAA,QACV,OAAOS;AAAA,MAAA,CACR;AAAA,IACH;AAAA,EACF,GAMMa,IAAqB,CAACj1C,MAAU;AACpC,UAAM,EAAE,MAAAmB,MAASnB,GACX,EAAE,MAAAi+B,MAAS98B;AAEjB,6BAAQ,QAAA,EAAK;AAAA,EAQf,GAGM8S,IAAeD;AAAA,IACnB3U,GAAO,UAAU,CAAA;AAAA,IACjBo0C;AAAA,EAAA,GAIIn2C,IAAkB,CAAA;AACxB,EAAA2W,EAAa,QAAQ,CAAC3B,MAAS;AAC7B,IAAIA,EAAK,SAAS,UAChBA,EAAK,OAAO,QAAQ,CAAC8wB,MAAc;AACjC,MAAA9lC,EAAgB,KAAK;AAAA,QACnB,KAAK8lC,EAAU;AAAA,QACf,OAAOA,EAAU,KAAK;AAAA,QACtB,QAAQA,EAAU,KAAK,UAAU,CAAA;AAAA,MAAC,CACnC;AAAA,IACH,CAAC,IAED9lC,EAAgB,KAAK;AAAA,MACnB,KAAKgV,EAAK;AAAA,MACV,OAAOA,EAAK,KAAK;AAAA,MACjB,QAAQA,EAAK,KAAK,UAAU,CAAA;AAAA,IAAC,CAC9B;AAAA,EAEL,CAAC;AAGD,QAAM4iC,wBAAuB,IAAA;AAC7B,EAAAzB,EAAc,QAAQ,CAACjzC,MAAU;AAC/B,IAAIA,EAAM,UACRA,EAAM,OAAO,QAAQ,CAACjD,MAAa23C,EAAiB,IAAI33C,CAAQ,CAAC;AAAA,EAErE,CAAC;AAGD,QAAM0U,IAAkB3U,EAAgB;AAAA,IACtC,CAAC0C,MAAU,CAACk1C,EAAiB,IAAIl1C,EAAM,GAAG;AAAA,EAAA;AAG5C,SACE,gBAAA9F,EAACi7C,IAAA,EAAU,OAAK,IAAC,WAAU,OACxB,UAAA;AAAA,IAAAlhC,EAAa,WAAW,KACvB,gBAAA9a,EAAC,OAAA,EAAI,WAAU,+BACb,UAAA,gBAAAA,EAAC,KAAA,EAAE,UAAA,sBAAA,CAAmB,EAAA,CACxB;AAAA,IAGD8a,EAAa,IAAI,CAAC3B,MAAS;AAC1B,UAAIA,EAAK,SAAS,SAAS;AAEzB,cAAM4B,IAAc5B,EAAK,OAAO,IAAI,CAACtS,OAAW;AAAA,UAC9C,KAAKA,EAAM;AAAA,UACX,OAAOA,EAAM,KAAK,SAASA,EAAM;AAAA,UACjC,QAAQA,EAAM,KAAK,UAAU,CAAA;AAAA,QAAC,EAC9B;AAGF,eACE,gBAAA7G;AAAA,UAAC65C;AAAA,UAAA;AAAA,YAEC,SAAS1gC,EAAK;AAAA,YACd,YAAYA,EAAK;AAAA,YACjB,eAAeA,EAAK;AAAA,YACpB,QAAQA,EAAK;AAAA,YACb,aAAa2iC;AAAA,YACb,UAAU5B;AAAA,YACV,wBAAwByB;AAAA,YACxB,qBAAqBC;AAAA,YACrB,aAAapB,EAAoBrhC,EAAK,EAAE;AAAA,YACxC,iBAAiBL;AAAA,YACjB,0BAA0B+iC;AAAA,YAC1B,aAAA9gC;AAAA,YACA,eAAe7U,GAAO,kBAAkB,CAAA;AAAA,UAAC;AAAA,UAbpCiT,EAAK;AAAA,QAAA;AAAA,MAgBhB;AAGA,aACE,gBAAAnZ;AAAA,QAACs4C;AAAA,QAAA;AAAA,UAEC,UAAUn/B,EAAK;AAAA,UACf,WAAWA,EAAK;AAAA,UAChB,iBAAiBkiC;AAAA,UACjB,gBAAgBf;AAAA,UAChB,qBAAqBuB;AAAA,UACrB,aACE1iC,EAAK,KAAK,cACN;AAAA,YACE,IAAIA,EAAK,KAAK,iBAAiB;AAAA,YAC/B,MAAMA,EAAK,KAAK;AAAA,UAAA,IAElB;AAAA,UAEN,iBAAiBL;AAAA,UACjB,eAAe5S,GAAO,kBAAkB,CAAA;AAAA,UAEvC,YAAmBiT,CAAI;AAAA,QAAA;AAAA,QAjBnBA,EAAK;AAAA,MAAA;AAAA,IAoBhB,CAAC;AAAA,EAAA,GACH;AAEJ;AAEAghC,GAAiB,YAAY;AAAA,EAC3B,OAAOj6C,EAAU,MAAM;AAAA,IACrB,QAAQA,EAAU,SAASA,EAAU,MAAM;AAAA,EAAA,CAC5C,EAAE;AAAA,EACH,eAAeA,EAAU,MAAM;AAAA,IAC7B,QAAQA,EAAU,QAAQA,EAAU,MAAM;AAAA,IAC1C,UAAUA,EAAU,SAASA,EAAU,MAAM;AAAA,EAAA,CAC9C;AAAA,EACD,kBAAkBA,EAAU;AAC9B;AAEAi6C,GAAiB,eAAe;AAAA,EAC9B,eAAe,EAAE,QAAQ,IAAI,UAAU,CAAA,EAAC;AAAA,EACxC,kBAAkB;AACpB;ACvfA,SAAS8B,KAAY;AACnB,QAAM,CAACC,GAAYC,CAAa,IAAIrsC,EAAS,EAAI;AAMjD,SACE,gBAAA/O,EAAC,OAAA,EAAI,WAAU,8CACb,UAAA;AAAA,IAAA,gBAAAA;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,SATe,MAAM;AACzB,UAAAk7C,EAAc,CAACD,CAAU;AAAA,QAC3B;AAAA,QAQM,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,gBAAAl8C,EAAC,QAAA,EAAK,WAAU,QAAQ,UAAA0O,EAAO,qBAAoB;AAAA,UAAO;AAAA,4BAEzD,QAAA,EAAK,WAAW,iBAAiBwtC,IAAa,OAAO,MAAM,QAAA,CAAS;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEtEA,KACC,gBAAAl8C;AAAA,MAACigC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,WAAU;AAAA,QACV,SAAS,MAAMkc,EAAc,EAAK;AAAA,QAClC,aAAW;AAAA,QAEX,UAAA,gBAAAp7C,EAAC,OAAA,EAAI,WAAU,SACb,UAAA;AAAA,UAAA,gBAAAA,EAAC,KAAA,EAAE,WAAU,QACX,UAAA;AAAA,YAAA,gBAAAf,EAAC,QAAA,EAAK,WAAU,QAAQ,UAAA0O,EAAO,qBAAoB;AAAA,YACnD,gBAAA1O,EAAC,YAAO,UAAA,qCAAA,CAAkC;AAAA,UAAA,GAC5C;AAAA,UACA,gBAAAA,EAAC,KAAA,EAAE,WAAU,mBAAkB,UAAA,mKAAA,CAI/B;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GAEJ;AAEJ;AC1CA,SAASo8C,GAAW,EAAE,SAAAp4C,GAAS,QAAA6f,GAAQ,WAAA3b,KAAa;AAClD,QAAM,EAAE,MAAAC,GAAM,SAAAC,EAAA,IAAYF,GACpB,CAACm0C,GAAiBC,CAAkB,IAAIxsC,EAAS,IAAI,GACrD,CAACysC,GAAcC,CAAe,IAAI1sC,EAAS,IAAI,GAC/C,CAAC2sC,GAAiBC,CAAkB,IAAI5sC,EAAS,IAAI;AAkB3D,MAfAjL,GAAM,UAAU,MAAM;AACpB,IAAIsD,MAEFq0C;AAAA,MACE,KAAK,MAAM,KAAK,UAAUx4C,GAAS,uBAAuB,EAAE,CAAC;AAAA,IAAA,GAE/D04C;AAAA,MACE,KAAK;AAAA,QACH,KAAK,UAAU14C,GAAS,YAAY,EAAE,QAAQ,CAAA,GAAI,UAAU,GAAC,CAAG;AAAA,MAAA;AAAA,IAClE,GAEFs4C,EAAmB,IAAI;AAAA,EAE3B,GAAG,CAACn0C,GAAMnE,CAAO,CAAC,GAEd,CAACmE,EAAM,QAAO;AAElB,QAAMw0C,IAAuB,CAACr7B,MAAgB;AAC5C,IAAAg7B,EAAmBh7B,CAAW,GAE1BA,EAAY,SACdk7B,EAAgBl7B,EAAY,KAAK,IAGjCA,EAAY,WAAW,UACvBA,EAAY,aAAa,WAEzBo7B,EAAmB;AAAA,MACjB,QAAQp7B,EAAY;AAAA,MACpB,UAAUA,EAAY;AAAA,IAAA,CACvB;AAAA,EAEL,GAEMwC,IAAa,MAAM;AAEvB,IAAAD,EAAO;AAAA,MACL,QAAQ44B,EAAgB;AAAA,MACxB,UAAUA,EAAgB;AAAA,MAC1B,OAAOF;AAAA,IAAA,CACR,GACDn0C,EAAQ,EAAK;AAAA,EACf,GAEMw0C,IAAe,MAAM;AACzB,IAAAN,EAAmB,IAAI,GACvBE,EAAgB,IAAI,GACpBE,EAAmB,IAAI,GACvBt0C,EAAQ,EAAK;AAAA,EACf;AAGA,SAAI,CAACm0C,KAAgB,CAACE,IACb,OAIP,gBAAA17C;AAAA,IAACuI;AAAA,IAAA;AAAA,MACC,UAAQ;AAAA,MACR,MAAAnB;AAAA,MACA,QAAQ,MAAMC,EAAQ,EAAK;AAAA,MAC3B,MAAK;AAAA,MACL,UAAS;AAAA,MACT,YAAU;AAAA,MACV,OAAO,EAAE,UAAU,OAAO,QAAQ,SAAA;AAAA,MAClC,iBAAgB;AAAA,MAEhB,UAAA;AAAA,QAAA,gBAAApI,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,4BAACA,EAAM,OAAN,EAAY,UAAA,kCAAA,CAA+B,EAAA,CAC9C;AAAA,QACA,gBAAAvI;AAAA,UAACuI,EAAM;AAAA,UAAN;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,WAAW,QAAQ,WAAW,OAAA;AAAA,YAEvC,UAAA;AAAA,cAAA,gBAAAtJ,EAAC,OAAA,EACC,UAAA,gBAAAA,EAACi8C,IAAA,CAAA,CAAU,GACb;AAAA,cACA,gBAAAj8C;AAAA,gBAACm6C;AAAA,gBAAA;AAAA,kBACC,OAAOoC;AAAA,kBACP,eAAeE;AAAA,kBACf,kBAAkBE;AAAA,gBAAA;AAAA,cAAA;AAAA,YACpB;AAAA,UAAA;AAAA,QAAA;AAAA,QAEF,gBAAA57C,EAACuI,EAAM,QAAN,EAAa,WAAU,yBACtB,UAAA;AAAA,UAAA,gBAAAtJ,EAACiB,GAAA,EAAO,SAAQ,aAAY,SAAS27C,GAAc,UAAA,UAEnD;AAAA,UACA,gBAAA58C;AAAA,YAACiB;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,SAAS6iB;AAAA,cACT,UAAU,CAACu4B;AAAA,cACZ,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAD,GAAW,YAAY;AAAA,EACrB,SAASl8C,EAAU,OAAO;AAAA,EAC1B,QAAQA,EAAU,KAAK;AAAA,EACvB,WAAWA,EAAU,MAAM;AAAA,IACzB,MAAMA,EAAU,KAAK;AAAA,IACrB,SAASA,EAAU,KAAK;AAAA,EAAA,CACzB,EAAE;AACL;AC5GA,SAAS28C,GAAY,EAAE,SAAA74C,IAAU,CAAA,GAAI,aAAAiE,GAAa,QAAA+b,IAAS,MAAM;AAAC,KAAK;AACrE,QAAM,CAAC7b,GAAMC,CAAO,IAAI0H,EAAS,EAAK;AAGtC,MADI9L,GAAS,UACT,OAAO,KAAKA,EAAQ,mBAAmB,EAAE,WAAW,EAAG,QAAO;AAElE,QAAM8f,IAAa,CAACu4B,MAAoB;AACtC,UAAM1jC,IAAS0jC,EAAgB,UAAU,CAAA,GACnC3zC,IAAUxD,EAAUlB,CAAO;AAQjC,QALIq4C,EAAgB,UAClB3zC,EAAQ,sBAAsB2zC,EAAgB,QAI5C1jC,EAAO,WAAW,GAAG;AACvB,MAAAjQ,EAAQ,WAAW,CAAA,GACnBA,EAAQ,UAAU,IAClBsb,EAAO,IAAIjf,GAASW,GAAA,GAAiBgD,CAAO,CAAC;AAC7C;AAAA,IACF;AAGA,UAAMo0C,IAAgB,IAAI,IAAInkC,EAAO,IAAI,CAACtR,MAAUA,EAAM,EAAE,CAAC,GACvD01C,IAAsB,CAAA;AAE5B,WAAO,KAAKV,EAAgB,YAAY,CAAA,CAAE,EAAE,QAAQ,CAAC3hC,MAAY;AAC/D,MAAIoiC,EAAc,IAAIpiC,CAAO,MAC3BqiC,EAAoBriC,CAAO,IAAI2hC,EAAgB,SAAS3hC,CAAO;AAAA,IAEnE,CAAC,GAGDhS,EAAQ,WAAW;AAAA,MACjB,QAAAiQ;AAAA,MACA,UAAUokC;AAAA,IAAA,GAGZr0C,EAAQ,UAAU,IAClBsb,EAAO,IAAIjf,GAASW,GAAA,GAAiBgD,CAAO,CAAC;AAAA,EAC/C;AAEA,SACE,gBAAA3H,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,IAAA,EAAS,KAAI,eACZ,UAAA,gBAAA1O;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,SAAQ;AAAA,QACR,SAAS,MAAMmH,EAAQ,EAAI;AAAA,QAE1B,UAAA;AAAA,UAAAsG,EAAO;AAAA,UAAa;AAAA,UAAUA,EAAO;AAAA,UAAQ;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAElD;AAAA,IACA,gBAAA1O;AAAA,MAACo8C;AAAA,MAAA;AAAA,QACC,SAAAp4C;AAAA,QACA,aAAAiE;AAAA,QACA,WAAW,EAAE,MAAAE,GAAM,SAAAC,EAAA;AAAA,QACnB,QAAQ0b;AAAA,MAAA;AAAA,IAAA;AAAA,EACV,GACF;AAEJ;AAEA+4B,GAAY,YAAY;AAAA,EACtB,SAAS38C,EAAU;AAAA,EACnB,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,QAAQzE,EAAU;AACpB;AACA28C,GAAY,eAAe;AAAA,EACzB,SAAS,CAAA;AAAA,EACT,QAAQ,MAAM;AAAA,EAAC;AACjB;ACpFA,MAAMG,KAAa,CAACl4C,MAAU;AAC5B,QAAM,EAAE,KAAAm4C,GAAK,UAAAxoB,GAAU,MAAAxhB,GAAM,MAAAuiB,MAAS1wB;AACtC,SACE,gBAAA9E,EAACC,EAAK,OAAL,EACC,UAAA,gBAAAD;AAAA,IAACC,EAAK;AAAA,IAAL;AAAA,MACC,IAAG;AAAA,MACH,aAAY;AAAA,MACZ,UAAU,CAACiJ,MAAMurB,EAASvrB,GAAG+J,CAAI;AAAA,MACjC,cAAcuiB;AAAA,MACd,IAAI,GAAGviB,EAAK,KAAK,EAAE,KAAKuiB,CAAI;AAAA,MAE3B,UAAAynB,EAAI,IAAI,CAAC/zC,MACR,gBAAAlJ,EAAC,UAAA,EAAmB,OAAOkJ,EAAE,KAC1B,UAAAA,EAAE,IAAA,GADQA,EAAE,GAEf,CACD;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;AAEA8zC,GAAW,YAAY;AAAA,EACrB,KAAK98C,EAAU;AAAA,IACbA,EAAU,MAAM;AAAA,MACd,KAAKA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,MAAM,CAAC;AAAA,MAC7D,KAAKA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,MAAM,CAAC;AAAA,MAC7D,KAAKA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,MAAM,CAAC;AAAA,IAAA,CAC9D;AAAA,EAAA,EACD;AAAA,EACF,UAAUA,EAAU,KAAK;AAAA,EACzB,MAAMA,EAAU,OAAO;AAAA,EACvB,MAAMA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,MAAM,CAAC,EAAE;AAClE;AChCA,MAAMg9C,KAAe,CAACp4C,MAAU;AAC9B,QAAM,EAAE,YAAAq4C,GAAY,YAAAC,GAAY,MAAAnqC,EAAA,IAASnO,GACnCm4C,IAAME,EAAW,IAAI,CAAAj0C,OAAM,EAAE,KAAKA,EAAE,OAAO,KAAKA,EAAE,OAAO,KAAKA,EAAE,QAAQ,GACxEssB,IAAOviB,EAAK,KAAK;AACvB,2BAAQ+pC,IAAA,EAAW,KAAAC,GAAU,UAAUG,GAAY,MAAAnqC,GAAY,MAAAuiB,GAAY;AAC7E;AAEA0nB,GAAa,YAAY;AAAA,EACvB,YAAYh9C,EAAU,QAAQA,EAAU,MAAM,EAAE;AAAA,EAChD,YAAYA,EAAU,KAAK;AAAA,EAC3B,MAAMA,EAAU,OAAO;AACzB;ACXA,MAAMm9C,KAAU,CAACv4C,MAAU;AACzB,QAAM,EAAE,SAAAw4C,GAAS,MAAArqC,GAAM,UAAAsqC,EAAA,IAAaz4C;AACpC,SACE,gBAAA9E,EAAAqJ,GAAA,EACG,UAAAk0C,EAAS,IAAI,CAACr0C,MACb,gBAAAlJ;AAAA,IAACC,EAAK;AAAA,IAAL;AAAA,MAEC,QAAM;AAAA,MACN,SAASgT,EAAK,KAAK,MAAM,SAAS/J,EAAE,KAAK;AAAA,MACzC,UAAU,MACRo0C,EAAQp0C,EAAE,OAAO,CAAC+J,EAAK,KAAK,MAAM,SAAS/J,EAAE,KAAK,GAAG+J,CAAI;AAAA,MAE3D,MAAK;AAAA,MACL,OAAO/J,EAAE;AAAA,MACT,WAAU;AAAA,IAAA;AAAA,IARLA,EAAE;AAAA,EAAA,CAUV,GACH;AAEJ;AAEAm0C,GAAQ,YAAY;AAAA,EAClB,SAASn9C,EAAU,KAAK;AAAA,EACxB,MAAMA,EAAU,OAAO;AAAA,EACvB,UAAUA,EAAU,MAAM;AAC5B;ACxBA,MAAMs9C,KAAkB,CAAA14C,MAAS;AAC/B,QAAM,EAAE,YAAAq4C,GAAY,MAAAlqC,GAAM,YAAAmqC,GAAY,SAAAE,GAAS,eAAA11C,MAAkB9C;AACjE,SAAImO,EAAK,KAAK,SAASwG,EAAW,WAC5B7R,EAAc,SAAS,IAEvB,gBAAA5H;AAAA,IAACk9C;AAAA,IAAA;AAAA,MACC,YAAYt1C;AAAA,MACZ,YAAAw1C;AAAA,MACA,MAAAnqC;AAAA,IAAA;AAAA,EAAA,IAIC,OAELA,EAAK,KAAK,SAASwG,EAAW,mBAE9B,gBAAAzZ;AAAA,IAACk9C;AAAA,IAAA;AAAA,MACC,YAAAC;AAAA,MACA,YAAAC;AAAA,MACA,MAAAnqC;AAAA,IAAA;AAAA,EAAA,IAGFA,EAAK,KAAK,SAASwG,EAAW,kBACzB,gBAAAzZ,EAACq9C,IAAA,EAAQ,SAAAC,GAAkB,MAAArqC,GAAY,UAAU8a,IAAY,IAClE9a,EAAK,KAAK,SAASwG,EAAW,gBACzB,gBAAAzZ,EAACq9C,IAAA,EAAQ,SAAAC,GAAkB,MAAArqC,GAAY,UAAU+a,IAAY,IAC/D/a,EAAK,KAAK,SAAS;AAC5B,GCtBMwqC,KAAa,CAAC,EAAE,SAAAC,GAAS,MAAAzqC,EAAA,wBAC5BhT,EAAK,OAAL,EAAW,MAAK,MAAK,OAAO,EAAE,aAAa,SAAS,YAAY,WAC/D,UAAA,gBAAAc;AAAA,EAACd,EAAK;AAAA,EAAL;AAAA,IACC,IAAG;AAAA,IACH,aAAY;AAAA,IACZ,UAAU,CAACiJ,MAAMw0C,EAAQx0C,GAAG+J,CAAI;AAAA,IAChC,cAAcA,EAAK,KAAK;AAAA,IAExB,UAAA;AAAA,MAAA,gBAAAjT,EAAC,UAAA,EAAO,OAAM,SAAQ,UAAA,SAAK;AAAA,MAC3B,gBAAAA,EAAC,UAAA,EAAO,OAAM,UAAS,UAAA,UAAM;AAAA,MAC7B,gBAAAA,EAAC,UAAA,EAAO,OAAM,QAAO,UAAA,QAAI;AAAA,MACzB,gBAAAA,EAAC,UAAA,EAAO,OAAM,kBAAiB,UAAA,iBAAA,CAAc;AAAA,IAAA;AAAA,EAAA;AAC/C,GACF;AAGFy9C,GAAW,YAAY;AAAA,EACrB,SAASv9C,EAAU,KAAK;AAAA,EACxB,MAAMA,EAAU,OAAO;AACzB;AAEA,MAAqBy9C,WAAoB94C,GAAM,UAAU;AAAA,EACvD,YAAYC,GAAO;AACjB,UAAMA,CAAK,GACX,KAAK,QAAQ;AAAA,MACX,YAAYA,EAAM,YAAY,IAAI,CAACoE,OAAO;AAAA,QACxC,OAAOA,EAAE;AAAA,QACT,MAAMA,EAAE;AAAA,QACR,OAAOA,EAAE;AAAA,MAAA,EACT;AAAA,IAAA,GAEJ,KAAK,cAAc,KAAK,YAAY,KAAK,IAAI,GAC7C,KAAK,cAAc,KAAK,YAAY,KAAK,IAAI,GAC7C,KAAK,SAAS,KAAK,OAAO,KAAK,IAAI,GACnC,KAAK,SAAS,KAAK,OAAO,KAAK,IAAI,GACnC,KAAK,UAAU,KAAK,QAAQ,KAAK,IAAI,GACrC,KAAK,aAAa,KAAK,WAAW,KAAK,IAAI,GAC3C,KAAK,UAAU,KAAK,QAAQ,KAAK,IAAI,GACrC,KAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI,GAC3D,KAAK,aAAa;AAAA,MAChB;AAAA,QACE,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,UAAU;AAAA,QACV,UAAU;AAAA,QACV,OAAO;AAAA,MAAA;AAAA,MAET;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,UAAU;AAAA,QACV,UAAU;AAAA,QACV,OAAO;AAAA,QACP,cAAcu0C;AAAAA,QACd,oBAAoB,EAAE,SAAS,KAAK,QAAA;AAAA,MAAQ;AAAA,MAE9C;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,UAAU,CAACv0C,MACLA,EAAE,KAAK,SAASuQ,EAAW;AAAA,QAGjC,UAAU;AAAA,QACV,cAAc+jC;AAAA,QACd,oBAAoB;AAAA,UAClB,YAAY,KAAK,MAAM;AAAA,UACvB,YAAY,KAAK;AAAA,QAAA;AAAA,QAEnB,oBAAoB,KAAK;AAAA,MAAA;AAAA,MAE3B;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MAAA;AAAA,MAER;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,MAAM;AAAA,MAAA;AAAA,MAER;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,iBAAiBjrB;AAAA,QACjB,uBAAuB,EAAE,QAAQ,KAAK,OAAA;AAAA,QACtC,cAAcE;AAAA,QACd,oBAAoB,EAAE,QAAQ,KAAK,OAAA;AAAA,QACnC,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,OAAO;AAAA,QACP,mBAAmB;AAAA,QACnB,QAAQ;AAAA,MAAA;AAAA,IACV,GAEF,KAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,qBAAqB;AACnB,SAAK,YAAA;AAAA,EACP;AAAA;AAAA,EAGA,kBAAkB;AAChB,QAAI,KAAK,iBAAiB,OAAO,KAAK,cAAc,kBAAmB;AACrE,UAAI;AACF,oBAAK,mBAAmB,KAAK,cAAc,eAAA,GACpC;AAAA,MACT,SAAS3K,GAAO;AACd,gBAAQ,KAAK,gCAAgCA,CAAK;AAAA,MACpD;AAEF,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,qBAAqB;AACnB,QAAI,KAAK,iBAAiB,KAAK;AAC7B,UAAI;AACF,oBAAK,cAAc,iBAAiB,EAAE,OAAO,KAAK,kBAAkB,GAC7D;AAAA,MACT,SAASA,GAAO;AACd,gBAAQ,KAAK,mCAAmCA,CAAK;AAAA,MACvD;AAEF,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,GAAG;AACb,SAAK,UAAU,EAAE,KACjB,KAAK,gBAAgB,EAAE,WACvB,KAAK,YAAA;AAAA,EACP;AAAA,EAEA,mBAAmB/U,GAAQ;AACzB,UAAM,EAAE,UAAA6qC,GAAU,UAAA9mB,EAAA,IAAa/jB;AAC/B,IAAI6qC,MAAa9mB,MACjB,KAAK,gBAAA,GACL,KAAK,QAAA;AAAA,EACP;AAAA,EAEA,cAAc;AACZ,UAAM,EAAE,iBAAA+mB,MAAoB,KAAK;AACjC,IAAKA,KACA,KAAK,WACV,WAAW,MAAM;AACf,WAAK,QAAQ,iBAAA;AAAA,IACf,GAAG,EAAE;AAAA,EACP;AAAA,EAEA,SAAS;AACP,SAAK,gBAAA;AACL,UAAMC,IAAe,KAAK,QAAQ,gBAAA;AAClC,SAAK,QAAQ,iBAAiB,EAAE,QAAQA,GAAc,GACtD,KAAK,QAAA;AAAA,EACP;AAAA,EAEA,SAAS;AACP,SAAK,gBAAA;AACL,UAAMtlB,IAAS,IAAIpgB,GAAgB,EAAE,MAAMqB,EAAW,QAAQ,OAAO,IAAI,GACnEF,IAAM,KAAK,QAAQ,qBAAA;AACzB,SAAK,QAAQ,iBAAiB,EAAE,KAAK,CAACif,CAAM,GAAG,UAAUjf,GAAK,GAC9D,KAAK,QAAA;AAAA,EACP;AAAA,EAEA,QAAQ,GAAGtG,GAAM;AACf,UAAM,EAAE,MAAAjL,MAASiL;AACjB,QAAI,EAAE,OAAO,UAAUjL,EAAK;AAC1B;AAEF,SAAK,gBAAA,GACLA,EAAK,OAAO,EAAE,OAAO,OACrBA,EAAK,QAAQ;AACb,UAAM,EAAE,YAAAm1C,MAAe,KAAK;AAC5B,IAAIn1C,EAAK,SAASyR,EAAW,oBAC3BzR,EAAK,iBAAiBm1C,KAAc,CAAA,GAAI,CAAC,EAAE,OAC3Cn1C,EAAK,iBACH,KAAK,MAAM,YAAY,KAAK,CAAC,MAAM,EAAE,UAAUA,EAAK,aAAa,KAAK,CAAA,GACtE,SAAS,CAAA,GAAI,CAAC,EAAE,QAElB,OAAOA,EAAK,eACZ,OAAOA,EAAK;AAEd,UAAM,EAAE,QAAA+1C,GAAQ,UAAA35C,GAAU,OAAAgC,EAAA,IAAU,KAAK,OACnC0jB,IAAO,CAAA;AACb,SAAK,QAAQ,YAAY,CAAC0iB,MAAO;AAC/B,MAAA1iB,EAAK,KAAK0iB,EAAG,IAAI;AAAA,IACnB,CAAC,GACDpmC,EAAM,aAAa0jB,GACnB,KAAK,QAAQ,cAAc,WAAWA,CAAI,GAC1Ci0B,EAAO35C,GAAUgC,GAAO,MAAM;AAC5B,WAAK,mBAAA;AAAA,IACP,CAAC;AAAA,EACH;AAAA,EAEA,WAAW,GAAG6M,GAAM;AAClB,UAAM,EAAE,MAAAjL,MAASiL;AACjB,IAAI,EAAE,OAAO,UAAUjL,EAAK,kBAG5BA,EAAK,gBAAgB,EAAE,OAAO,OAC9BA,EAAK,iBACH,KAAK,MAAM,YAAY,KAAK,CAACwjB,MAAMA,EAAE,UAAUxjB,EAAK,aAAa,KAAK,CAAA,GACtE,SAAS,CAAA,GAAI,CAAC,EAAE,KAClB,KAAK,gBAAA,GACL,KAAK,QAAA;AAAA,EACP;AAAA,EAEA,UAAU;AACR,UAAM,EAAE,QAAA+1C,GAAQ,UAAA35C,GAAU,OAAAgC,EAAA,IAAU,KAAK,OACnC0jB,IAAO,CAAA;AACb,SAAK,QAAQ,YAAY,CAAC0iB,MAAO;AAC/B,MAAA1iB,EAAK,KAAK0iB,EAAG,IAAI;AAAA,IACnB,CAAC,GACDpmC,EAAM,aAAa0jB,GACnBi0B,EAAO35C,GAAUgC,GAAO,MAAM;AAC5B,MAAI0jB,EAAK,SAAS,KAChB,KAAK,mBAAA;AAAA,IAET,CAAC;AAAA,EACH;AAAA,EAEA,SAAS;AACP,UAAM,EAAE,OAAA1jB,MAAU,KAAK,OACjBglB,IAAMhlB,EAAM,cAAc,CAAA;AAChC,6BACG,OAAA,EACC,UAAA,gBAAApG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW2E,EAAU,WAAW,OAAO;AAAA,QACvC,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAA;AAAA,QAEhC,UAAA,gBAAA3E;AAAA,UAAC2W;AAAA,UAAA;AAAA,YACC,iBAAe;AAAA,YACf,YAAY,KAAK;AAAA,YACjB,cAAc;AAAA,cACZ,MAAM;AAAA,cACN,YAAY;AAAA,cACZ,sBAAsB;AAAA,YAAA;AAAA,YAExB,aAAa,KAAK;AAAA,YAClB,SAASyU;AAAA,YACT,iBAAe;AAAA,YACf,+BAA6B;AAAA,YAC7B,WAAU;AAAA,YACV,gBAAc;AAAA,YACd,cAAc,KAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MACrB;AAAA,IAAA,GAEJ;AAAA,EAEJ;AACF;AAEAuyB,GAAY,YAAY;AAAA,EACtB,UAAUz9C,EAAU,OAAO;AAAA,EAC3B,OAAOA,EAAU,OAAO;AAAA,EACxB,QAAQA,EAAU,KAAK;AAAA,EACvB,aAAaA,EAAU,QAAQA,EAAU,MAAM,EAAE;AAAA,EACjD,iBAAiBA,EAAU,KAAK;AAClC;AC7QA,MAAM89C,KAAc,CAACl5C,MAAU;AAC7B,QAAM,EAAE,WAAA8T,GAAW,UAAAqlC,GAAU,MAAAhrC,EAAA,IAASnO,GAChCm4C,IAAMrkC,EAAU,IAAI,CAAA1P,OAAM,EAAE,KAAKA,EAAE,KAAK,KAAKA,EAAE,KAAK,KAAKA,EAAE,MAAM,GACjEssB,IAAOviB,EAAK,KAAK;AACvB,2BAAQ+pC,IAAA,EAAW,KAAAC,GAAU,UAAUgB,GAAU,MAAAhrC,GAAY,MAAAuiB,GAAY;AAC3E;AAEAwoB,GAAY,YAAY;AAAA,EACtB,WAAW99C,EAAU,QAAQA,EAAU,MAAM,EAAE;AAAA,EAC/C,UAAUA,EAAU,KAAK;AAAA,EACzB,MAAMA,EAAU,OAAO;AACzB;ACTA,MAAMg+C,KAAc,CAACp5C,MAAU;AAC7B,QAAM,EAAE,WAAA8T,GAAW,UAAAulC,GAAU,OAAAC,GAAO,MAAAnrC,GAAM,WAAAorC,MAAcv5C,GAElDm4C,MADcrkC,EAAU,KAAK,CAAA1P,MAAKA,EAAE,QAAQ+J,EAAK,KAAK,KAAK,KAAK,CAAA,GAAI,UAAU,IAAI,OAAO,CAAA/J,OAAMk1C,KAAS,CAAC3kC,EAAW,MAAM,GAAG,SAASvQ,EAAE,IAAI,CAAC,EAC7H,IAAI,CAAAA,OAAM,EAAE,KAAKA,EAAE,OAAO,KAAKA,EAAE,OAAO,KAAKA,EAAE,QAAQ;AAE7E,EAAIm1C,KAAaA,MAAc,QACPzlC,EAAU,KAAK,CAAA1P,MAAKA,EAAE,QAAQ+J,EAAK,KAAK,KAAK,KAAK,CAAA,GAAI,UAAU,CAAA,GAAI,OAAO,OAAK/J,EAAE,SAASuQ,EAAW,OAAO,EACvH,QAAQ,CAAC6kC,MAAQ;AAC3B,MAAEA,EAAI,cAAc,CAAA,GAAI,OAAO,CAAAp1C,MAAKA,EAAE,SAASuQ,EAAW,MAAM,KAAK,CAAA,GAAI,QAAQ,CAACwnB,MAAO;AACvF,YAAMsd,IAAM,EAAE,KAAK,GAAGD,EAAI,KAAK,GAAGrd,EAAG,EAAE,IAAI,KAAK,GAAGqd,EAAI,KAAK,IAAI35C,EAAU,aAAa,IAAIs8B,EAAG,EAAE,IAAI,KAAK,GAAGqd,EAAI,KAAK,IAAIrd,EAAG,QAAQ,GAAA;AACpI,MAAAgc,EAAI,KAAKsB,CAAG;AAAA,IACd,CAAC;AAAA,EACH,CAAC;AAEH,QAAM/oB,IAAOviB,EAAK,KAAK;AACvB,2BAAQ+pC,IAAA,EAAW,KAAAC,GAAU,UAAUkB,GAAU,MAAAlrC,GAAY,MAAAuiB,GAAY;AAC3E;AAEA0oB,GAAY,YAAY;AAAA,EACtB,WAAWh+C,EAAU,QAAQA,EAAU,MAAM,EAAE;AAAA,EAC/C,OAAOA,EAAU,QAAQ,MAAM,EAAE;AAAA,EACjC,WAAWA,EAAU;AAAA,EACrB,UAAUA,EAAU,KAAK;AAAA,EACzB,MAAMA,EAAU,OAAO;AACzB;AAEAg+C,GAAY,eAAe,EAAE,WAAW,GAAA;ACtBxC,MAAqBM,WAAoB35C,GAAM,UAAU;AAAA,EACvD,YAAYC,GAAO;AACjB,UAAMA,CAAK,GACX,KAAK,cAAc,KAAK,YAAY,KAAK,IAAI,GAC7C,KAAK,cAAc,KAAK,YAAY,KAAK,IAAI,GAC7C,KAAK,SAAS,KAAK,OAAO,KAAK,IAAI,GACnC,KAAK,SAAS,KAAK,OAAO,KAAK,IAAI,GACnC,KAAK,WAAW,KAAK,SAAS,KAAK,IAAI,GACvC,KAAK,WAAW,KAAK,SAAS,KAAK,IAAI,GACvC,KAAK,UAAU,KAAK,QAAQ,KAAK,IAAI,GACrC,KAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI,GAC3D,KAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEA,mBAAmB25C,GAAW;AAC5B,UAAM,EAAE,OAAAr4C,GAAO,WAAAwS,EAAA,IAAc,KAAK,OAC5BwS,IAAMhlB,EAAM,mBAAmB,CAAA;AACrC,QAAIwS,MAAc6lC,EAAU,aAAa,KAAK,SAAS;AACrD,YAAMppC,IAAa,KAAK,QAAQ,cAAA;AAChC,MAAAA,EAAW,KAAK,CAAAiO,MAAKA,EAAE,UAAU,OAAO,EAAE,mBAAmB,YAC3D1K,GACFvD,EAAW,KAAK,CAAAiO,MAAKA,EAAE,UAAU,OAAO,EAAE,mBAAmB,YAC3D1K,GACF,KAAK,QAAQ,cAAc,cAAcvD,CAAU,GACnD,KAAK,QAAQ,cAAc,WAAW+V,CAAG;AAAA,IAC3C;AAAA,EAEF;AAAA;AAAA,EAGA,kBAAkB;AAChB,QAAI,KAAK,iBAAiB,OAAO,KAAK,cAAc,kBAAmB;AACrE,UAAI;AACF,oBAAK,mBAAmB,KAAK,cAAc,eAAA,GACpC;AAAA,MACT,SAAStD,GAAO;AACd,gBAAQ,KAAK,gCAAgCA,CAAK;AAAA,MACpD;AAEF,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,qBAAqB;AACnB,QAAI,KAAK,iBAAiB,KAAK;AAC7B,UAAI;AACF,oBAAK,cAAc,iBAAiB,EAAE,OAAO,KAAK,kBAAkB,GAC7D;AAAA,MACT,SAASA,GAAO;AACd,gBAAQ,KAAK,mCAAmCA,CAAK;AAAA,MACvD;AAEF,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,GAAG;AACb,UAAM,EAAE,WAAAlP,MAAc,KAAK;AAC3B,SAAK,UAAU,EAAE,KACjB,KAAK,gBAAgB,EAAE;AACvB,UAAMvD,IAAa;AAAA,MACjB;AAAA,QACE,SAAS;AAAA,QACT,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,UAAU;AAAA,QACV,UAAU;AAAA,QACV,OAAO;AAAA,MAAA;AAAA,MAET;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,UAAU;AAAA,QACV,UAAU;AAAA,QACV,OAAO;AAAA,QACP,cAAc2oC;AAAA,QACd,oBAAoB;AAAA,UAClB,WAAAplC;AAAA,UACA,UAAU,KAAK;AAAA,QAAA;AAAA,MACjB;AAAA,MAEF;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,UAAU;AAAA,QACV,UAAU;AAAA,QACV,cAAcslC;AAAA,QACd,oBAAoB;AAAA,UAClB,WAAAtlC;AAAA,UACA,UAAU,KAAK;AAAA,UACf,OAAO,CAACa,EAAW,MAAM;AAAA,UACzB,WAAW;AAAA,QAAA;AAAA,MACb;AAAA,MAEF;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,UAAU;AAAA,QACV,UAAU;AAAA,QACV,OAAO;AAAA,QACP,oBAAoB,KAAK;AAAA,MAAA;AAAA,MAE3B;AAAA,QACE,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,iBAAiB8Y;AAAA,QACjB,uBAAuB,EAAE,QAAQ,KAAK,OAAA;AAAA,QACtC,cAAcE;AAAA,QACd,oBAAoB,EAAE,QAAQ,KAAK,OAAA;AAAA,QACnC,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,OAAO;AAAA,QACP,mBAAmB;AAAA,QACnB,QAAQ;AAAA,MAAA;AAAA,IACV;AAEF,SAAK,QAAQ,cAAc,cAAcpd,CAAU,GACnD,KAAK,YAAA;AAAA,EACP;AAAA,EAEA,mBAAmBtC,GAAQ;AACzB,UAAM,EAAE,UAAA6qC,GAAU,UAAA9mB,EAAA,IAAa/jB;AAC/B,IAAI6qC,MAAa9mB,MACjB,KAAK,gBAAA,GACL,KAAK,QAAA;AAAA,EACP;AAAA,EAEA,SAAS;AACP,SAAK,gBAAA;AACL,UAAMgnB,IAAe,KAAK,QAAQ,gBAAA;AAClC,SAAK,QAAQ,iBAAiB,EAAE,QAAQA,GAAc,GACtD,KAAK,QAAA;AAAA,EACP;AAAA,EAEA,SAAS;AACP,SAAK,gBAAA;AACL,UAAM,EAAE,WAAAllC,MAAc,KAAK,OACrB8lC,IAAM9lC,EAAU;AAAA,MACpB,CAAA1P,OAAMA,EAAE,UAAU,CAAA,GAAI,OAAO,CAAA3E,MAAKA,EAAE,SAASkV,EAAW,MAAM,EAAE,SAAS;AAAA,IAAA,GAErEklC,IAAMD,EAAI,SAAS,KAAKA,EAAI,CAAC,EAAE,OAAQ,IACvCllC,IACJmlC,MAAO,KACH,OACE/lC,EAAU,KAAK,CAAA1P,MAAKA,EAAE,QAAQy1C,CAAE,KAAK,CAAA,GAAI,UAAU,CAAA,GAAI;AAAA,MACvD,CAAAz1C,MAAKA,EAAE,SAASuQ,EAAW;AAAA,IAAA,EAC3B,CAAC,EAAE,OACL+e,IAAS,IAAIpgB,GAAgB;AAAA,MACjC,OAAOumC;AAAA,MACP,OAAOnlC;AAAA,MACP,WAAW;AAAA,IAAA,CACZ,GACKD,IAAM,KAAK,QAAQ,qBAAA;AACzB,SAAK,QAAQ,iBAAiB,EAAE,KAAK,CAACif,CAAM,GAAG,UAAUjf,GAAK,GAC9D,KAAK,QAAA;AAAA,EACP;AAAA,EAEA,SAAS,GAAGtG,GAAM;AAChB,UAAM,EAAE,MAAAjL,MAASiL;AACjB,QAAI,EAAE,OAAO,UAAUjL,EAAK;AAC1B;AAEF,SAAK,gBAAA,GACLA,EAAK,QAAQ,EAAE,OAAO;AACtB,UAAM,EAAE,WAAA4Q,MAAc,KAAK,OACrB+lC,IAAK32C,EAAK,OACV42C,MACFhmC,EAAU,KAAK,CAAAtU,MAAKA,EAAE,QAAQq6C,CAAE,KAAK,CAAA,GAAI,UAAU,CAAA,GAAI;AAAA,MACvD,CAAAr6C,MAAKA,EAAE,SAASmV,EAAW;AAAA,IAAA,KACxB,CAAA,GACDD,IAAMolC,EAAI,SAAS,KAAKA,EAAI,CAAC,EAAE,SAAU;AAC/C,IAAA52C,EAAK,QAAQwR;AACb,UAAM,EAAE,QAAAukC,GAAQ,UAAA35C,GAAU,OAAAgC,EAAA,IAAU,KAAK,OACnC0jB,IAAO,CAAA;AACb,SAAK,QAAQ,YAAY,CAAA0iB,MAAM;AAC7B,MAAA1iB,EAAK,KAAK0iB,EAAG,IAAI;AAAA,IACnB,CAAC,GACDpmC,EAAM,kBAAkB0jB,GACxB,KAAK,QAAQ,cAAc,WAAWA,CAAI,GAC1Ci0B,EAAO35C,GAAUgC,GAAO,MAAM;AAC5B,WAAK,mBAAA;AAAA,IACP,CAAC;AAAA,EACH;AAAA,EAEA,SAAS,GAAG6M,GAAM;AAChB,UAAM,EAAE,MAAAjL,MAASiL;AACjB,IAAI,EAAE,OAAO,UAAUjL,EAAK,UAG5B,KAAK,gBAAA,GACLA,EAAK,QAAQ,EAAE,OAAO,OACtB,KAAK,QAAA;AAAA,EACP;AAAA,EAEA,UAAU;AACR,UAAM,EAAE,QAAA+1C,GAAQ,UAAA35C,GAAU,OAAAgC,EAAA,IAAU,KAAK,OACnC0jB,IAAO,CAAA;AACb,SAAK,QAAQ,YAAY,CAAA0iB,MAAM;AAC7B,MAAA1iB,EAAK,KAAK0iB,EAAG,IAAI;AAAA,IACnB,CAAC,GACDpmC,EAAM,kBAAkB0jB,GACxBi0B,EAAO35C,GAAUgC,GAAO,MAAM;AAC5B,MAAI0jB,EAAK,SAAS,KAChB,KAAK,mBAAA;AAAA,IAET,CAAC;AAAA,EACH;AAAA,EAEA,cAAc;AACZ,UAAM,EAAE,iBAAA+zB,MAAoB,KAAK;AACjC,IAAKA,KACA,KAAK,WACV,WAAW,MAAM;AACf,WAAK,QAAQ,iBAAA;AAAA,IACf,GAAG,EAAE;AAAA,EACP;AAAA,EAEA,SAAS;AACP,UAAM,EAAE,OAAAz3C,MAAU,KAAK,OACjBglB,IAAMhlB,EAAM,mBAAmB,CAAA;AACrC,6BACG,OAAA,EACC,UAAA,gBAAApG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAA;AAAA,QAChC,WAAW2E,EAAU,WAAW,OAAO;AAAA,QAEvC,UAAA,gBAAA3E;AAAA,UAAC2W;AAAA,UAAA;AAAA,YACC,iBAAe;AAAA,YACf,eAAe,EAAE,iBAAiB,GAAA;AAAA,YAClC,cAAc;AAAA,cACZ,MAAM;AAAA,cACN,YAAY;AAAA,cACZ,sBAAsB;AAAA,YAAA;AAAA,YAExB,aAAa,KAAK;AAAA,YAClB,SAASyU;AAAA,YACT,iBAAe;AAAA,YACf,+BAA6B;AAAA,YAC7B,WAAU;AAAA,YACV,gBAAc;AAAA,YACd,cAAc,KAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MACrB;AAAA,IAAA,GAEJ;AAAA,EAEJ;AACF;AAEAozB,GAAY,YAAY;AAAA,EACtB,UAAUt+C,EAAU,OAAO;AAAA,EAC3B,OAAOA,EAAU,OAAO;AAAA,EACxB,QAAQA,EAAU,KAAK;AAAA,EACvB,WAAWA,EAAU,QAAQA,EAAU,MAAM;AAAA,EAC7C,iBAAiBA,EAAU,KAAK;AAClC;AAEAs+C,GAAY,eAAe,EAAE,WAAW,GAAC;ACvQzC,MAAMf,KAAa,CAAC34C,MAAU;AAC5B,QAAM,EAAE,KAAAm4C,GAAK,SAAAS,GAAS,MAAAzqC,EAAA,IAASnO,GACzB0wB,IAAOviB,EAAK,KAAK;AACvB,2BAAQ+pC,IAAA,EAAW,KAAAC,GAAU,UAAUS,GAAS,MAAAzqC,GAAY,MAAAuiB,GAAY;AAC1E;AAEAioB,GAAW,YAAY;AAAA,EACrB,KAAKv9C,EAAU,QAAQA,EAAU,MAAM,EAAE;AAAA,EACzC,SAASA,EAAU,KAAK;AAAA,EACxB,MAAMA,EAAU,OAAO;AACzB;ACZO,MAAM2+C,KAAkB;AAAA,EAC7B,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,sBAAsB;AAAA,EACtB,gBAAgB;AAClB,GAEaC,KAAmB;AAAA,EAC9B,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,QAAQ;AACV,GCMMC,KAAU;AAAA,EACdtlC,EAAW;AAAA,EACXA,EAAW;AAAA,EACXA,EAAW;AAAA,EACXA,EAAW;AACb,GACMulC,KAAaj9C,GAAOg9C,GAAQ,OAAO,CAACtlC,EAAW,aAAa,CAAC,CAAC,GAC9DwlC,KAAY;AAAA,EAChBxlC,EAAW;AAAA,EACXA,EAAW;AAAA,EACXA,EAAW;AAAA,EACXA,EAAW;AACb,GAEMylC,KAAa,CAACp6C,MAAU;AAC5B,QAAM,EAAE,OAAAsB,GAAO,aAAA6B,GAAa,UAAA7D,GAAU,eAAAwD,GAAe,aAAAu3C,GAAa,QAAApB,MAChEj5C,GAEIgR,IAAUrV,GAAO,IAAI,GAErB,CAAC4U,GAAY+pC,CAAa,IAAItvC,EAAS,CAAA,CAAE,GACzC,CAACuvC,GAAcC,CAAe,IAAIxvC,EAAS,EAAK,GAChD,CAACyvC,GAAWC,CAAY,IAAI1vC,EAAS,EAAK,GAC1C,CAACkG,GAASC,CAAU,IAAInG,EAAS,CAAA,CAAE,GACnC,CAACsuC,CAAK,IAAItuC,EAAS,MAChBkvC,GAAW,IAAI,CAAC91C,OAAO,EAAE,KAAKA,GAAG,KAAKA,GAAG,KAAKyb,GAAczb,CAAC,IAAI,CACzE,GACK,CAACi0C,CAAU,IAAIrtC;AAAA,IACnBqvC,EAAY,IAAI,CAACj2C,OAAO;AAAA,MACtB,OAAOA,EAAE;AAAA,MACT,MAAMA,EAAE;AAAA,MACR,OAAOA,EAAE;AAAA,IAAA,EACT;AAAA,EAAA,GAGEiM,IAAgB5C,GAAQ,MAAMusC,IAAkB,CAAA,CAAE,GAElDW,IAAcrpC,GAAY,MAAM;AACpC,IAAAopC,EAAa,EAAI;AAAA,EACnB,GAAG,CAAA,CAAE,GAECE,IAAkBtpC,GAAY,MAAM;AACxC,UAAM0T,IAAO,CAAA;AACb,WAAIhU,EAAQ,SAAS,OACnBA,EAAQ,QAAQ,IAAI,YAAY,CAAC02B,MAAO;AACtC,MAAA1iB,EAAK,KAAK,EAAE,GAAG0iB,EAAG,MAAM;AAAA,IAC1B,CAAC,GAEI1iB;AAAA,EACT,GAAG,CAAA,CAAE,GAEC6a,IAASvuB;AAAA,IACb,CAAC/U,MAAU;AACT,YAAMs+C,IAAWz6C,EAAUkB,CAAK;AAChC,UAAI,CAAC/E,KAASA,EAAM,WAAW,GAAG;AAChC,QAAAs+C,EAAS,aAAa,CAAA,GACtB,OAAOA,EAAS,YAChB5B,EAAO35C,GAAUu7C,CAAQ;AACzB;AAAA,MACF;AAIA,UAFAA,EAAS,aAAat+C,GAElB,CAACs+C,EAAS,YAAY,QAAQ;AAChC,QAAA5B,EAAO35C,GAAUu7C,CAAQ;AACzB;AAAA,MACF;AAGA,YAAMC,IAAgB,IAAI,IAAIv+C,EAAM,IAAI,CAAC4/B,MAAOA,EAAG,EAAE,EAAE,OAAO,OAAO,CAAC;AAGtE,MAAA0e,EAAS,aAAaA,EAAS,WAAW,IAAI,CAACE,MAAO;AACpD,cAAMC,IAAY,CAAA;AAElB,eAAID,EAAG,KACLC,EAAU,KAAKD,EAAG,KAGlBC,EAAU,KAAK1nC,GAAgB,QAAA,GAEjC,OAAO,KAAKynC,CAAE,EAAE,QAAQ,CAAC54C,MAAQ;AAC/B,UAAIA,MAAQ,QACR24C,EAAc,IAAI34C,CAAG,MACvB64C,EAAU74C,CAAG,IAAI44C,EAAG54C,CAAG;AAAA,QAE3B,CAAC,GACM64C;AAAA,MACT,CAAC;AAGD,UAAIC,IAAQ,IAAI3nC,GAAA;AAChB,MAAA/W,EAAM,IAAI,CAAC6H,MAAM;AACf,YAAIA,EAAE,SAASuQ,EAAW;AACxB,iBAAO,OAAO,OAAOsmC,GAAO,EAAE,CAAC72C,EAAE,EAAE,GAAG,IAAI;AAC5C,YAAIA,EAAE,SAASuQ,EAAW,kBAAkB;AAC1C,gBAAMumC,IAAavwB,GAAevmB,EAAE,aAAa;AACjD,iBAAO,OAAO,OAAO62C,GAAO;AAAA,YAC1B,CAAC72C,EAAE,EAAE,GAAG,EAAE,cAAc82C,GAAY,OAAO,IAAI,OAAO,GAAA;AAAA,UAAG,CAC1D;AAAA,QACH;AACA,YAAI92C,EAAE,SAASuQ,EAAW,UAAU;AAClC,gBAAMwmC,IAAKr4C,IAAgBsB,EAAE,aAAa;AAC1C,iBAAO,OAAO,OAAO62C,GAAO;AAAA,YAC1B,CAAC72C,EAAE,EAAE,GAAG,EAAE,OAAO+2C,GAAI,UAAU,CAAC,GAAG,OAAO,GAAA;AAAA,UAAG,CAC9C;AAAA,QACH;AACA,eAAI/2C,EAAE,KAAK,WAAWuQ,EAAW,MAAM,IAC9B,OAAO,OAAOsmC,GAAO,EAAE,CAAC72C,EAAE,EAAE,GAAG,CAAA,GAAI,IAErC,OAAO,OAAO62C,GAAO;AAAA,UAC1B,CAAC72C,EAAE,EAAE,GAAG,EAAE,OAAO,IAAI,cAAcA,EAAE,aAAA;AAAA,QAAa,CACnD;AAAA,MACH,CAAC,GAED7H,EAAM,QAAQ,CAAC4/B,MAAO;AACpB,YAAI,GAACA,EAAG,MAAM,CAACA,EAAG,OAGlB;AAAA,qBAAWrX,KAAO+1B,EAAS;AACzB,YAAK/1B,EAAI,eAAeqX,EAAG,EAAE,MAC3BrX,EAAIqX,EAAG,EAAE,IAAI,EAAE,GAAG8e,EAAM9e,EAAG,EAAE,EAAA;AAKjC,UAAA0e,EAAS,WAAW,QAAQ,CAACE,MAAO;AAClC,gBAAM5e,EAAG,MAAM4e;AAGf,kBAAI5e,EAAG,KAAK,WAAWxnB,EAAW,MAAM;AACtC,gBAAKoW,GAASgwB,EAAG5e,EAAG,EAAE,CAAC,MACrB4e,EAAG5e,EAAG,EAAE,IAAI,CAAA,IAEd4e,EAAG5e,EAAG,EAAE,EAAE,QAAQ,CAAA,GAClB,OAAO4e,EAAG5e,EAAG,EAAE,EAAE;AAAA,uBAIVA,EAAG,SAASxnB,EAAW;AAC9B,gBAAAomC,EAAG5e,EAAG,EAAE,IAAI,IACZ,OAAO4e,EAAG5e,EAAG,EAAE,EAAE;AAAA,uBAIVA,EAAG,SAASxnB,EAAW,kBAAkB;AAChD,sBAAMumC,IAAavwB,GAAewR,EAAG,aAAa;AAClD,gBAAKpR,GAASgwB,EAAG5e,EAAG,EAAE,CAAC,MACrB4e,EAAG5e,EAAG,EAAE,IAAI,EAAE,OAAO,IAAI,cAAc,GAAA,IAErC4e,EAAG5e,EAAG,EAAE,EAAE,SAAS,SACrB4e,EAAG5e,EAAG,EAAE,EAAE,QAAQ,KAEpB4e,EAAG5e,EAAG,EAAE,EAAE,eAAe+e,GAAY,OAAO;AAAA,cAC9C,WAGS/e,EAAG,SAASxnB,EAAW,UAAU;AACxC,gBAAKoW,GAASgwB,EAAG5e,EAAG,EAAE,CAAC,MACrB4e,EAAG5e,EAAG,EAAE,IAAI,CAAA;AAEd,sBAAMgf,IAAKr4C,IAAgBq5B,EAAG,aAAa;AAC3C,gBAAA4e,EAAG5e,EAAG,EAAE,EAAE,QAAQgf,GAAI,UAAU,CAAC,GAAG,OAAO,IAC3C,OAAOJ,EAAG5e,EAAG,EAAE,EAAE;AAAA,cACnB;AAAA;AAAA,UACF,CAAC;AAAA;AAAA,MACH,CAAC,GACD8c,EAAO35C,GAAUu7C,CAAQ;AAAA,IAC3B;AAAA,IACA,CAACv5C,GAAOhC,GAAU25C,GAAQn2C,CAAa;AAAA,EAAA,GAGnC4qB,IAASpc,GAAY,MAAM;AAC/B,QAAI;AACF,YAAMoiB,IAAS,IAAIpgB,GAAgB;AAAA,QACjC,UAAU;AAAA,QACV,MAAMqB,EAAW;AAAA,QACjB,OAAO;AAAA,MAAA,CACR,GACKF,IAAMzD,EAAQ,QAAQ,IAAI,qBAAA,GAC1BsS,IAAMtS,EAAQ,QAAQ,IAAI,iBAAiB;AAAA,QAC/C,KAAK,CAAC0iB,CAAM;AAAA,QACZ,UAAUjf;AAAA,MAAA,CACX;AACD,UAAI6O,KAAOA,EAAI,KAAK;AAClB,cAAM0B,IAAO41B,EAAA;AACb,QAAA/a,EAAO7a,CAAI;AAAA,MACb;AAAA,IACF,SAAS5gB,GAAG;AACV,cAAQ,MAAM,qBAAqBA,CAAC;AAAA,IACtC;AAAA,EACF,GAAG,CAACw2C,GAAiB/a,CAAM,CAAC,GAEtBjS,IAAStc,GAAY,MAAM;AAC/B,QAAI;AACF,YAAM0nC,IAAehoC,EAAQ,QAAQ,IAAI,gBAAA,GACnCsS,IAAMtS,EAAQ,QAAQ,IAAI,iBAAiB;AAAA,QAC/C,QAAQgoC;AAAA,MAAA,CACT;AACD,UAAI11B,KAAOA,EAAI,QAAQ;AACrB,cAAM0B,IAAO41B,EAAA;AACb,QAAA/a,EAAO7a,CAAI;AAAA,MACb;AAAA,IACF,SAAS5gB,GAAG;AACV,cAAQ,MAAM,uBAAuBA,CAAC;AAAA,IACxC;AAAA,EACF,GAAG,CAACw2C,GAAiB/a,CAAM,CAAC,GAEtBub,IAAqB9pC;AAAA,IACzB,CAACrD,MAAW;AACV,YAAM,EAAE,UAAA6qC,GAAU,UAAA9mB,EAAA,IAAa/jB;AAC/B,UAAI6qC,MAAa9mB,EAAU;AAC3B,MAAA/jB,EAAO,KAAK,aAAaA,EAAO,OAAO,OAAO+jB,CAAQ;AACtD,YAAMhN,IAAO41B,EAAA;AACb,MAAA/a,EAAO7a,CAAI;AAAA,IACb;AAAA,IACA,CAAC41B,GAAiB/a,CAAM;AAAA,EAAA,GAGpB+Y,IAAUtnC;AAAA,IACd,CAAClN,GAAG+J,MAAS;AACX,YAAM,EAAE,MAAAjL,MAASiL;AACjB,UAAI/J,EAAE,OAAO,UAAUlB,EAAK;AAC1B;AAEF,MAAAA,EAAK,OAAOkB,EAAE,OAAO,OACrBlB,EAAK,QAAQ,IACTA,EAAK,SAASyR,EAAW,YAC3BzR,EAAK,gBAAgBJ,EAAc,CAAC,GAAG,OACvC,OAAOI,EAAK,gBACHA,EAAK,SAASyR,EAAW,oBAClCzR,EAAK,iBAAiBm1C,KAAc,CAAA,GAAI,CAAC,EAAE,OAC3Cn1C,EAAK,iBACHm3C,EAAY,KAAK,CAAC3zB,MAAMA,EAAE,UAAUxjB,EAAK,aAAa,KAAK,CAAA,GAC3D,SAAS,CAAA,GAAI,CAAC,EAAE,QAElB,OAAOA,EAAK,eACZ,OAAOA,EAAK;AAEd,YAAM8hB,IAAO41B,EAAA;AACb,MAAA/a,EAAO7a,CAAI;AAAA,IACb;AAAA,IACA,CAACliB,GAAeu1C,GAAYgC,GAAaO,GAAiB/a,CAAM;AAAA,EAAA,GAG5DyY,IAAahnC;AAAA,IACjB,CAAClN,GAAG+J,MAAS;AACX,YAAM,EAAE,MAAAjL,MAASiL;AACjB,UAAI/J,EAAE,OAAO,UAAUlB,EAAK;AAC1B;AAEF,MAAAA,EAAK,gBAAgBkB,EAAE,OAAO,OAC1B+J,EAAK,KAAK,SAASwG,EAAW,qBAChCzR,EAAK,iBACHm3C,EAAY,KAAK,CAAC3zB,MAAMA,EAAE,UAAUxjB,EAAK,aAAa,KAAK,CAAA,GAC3D,SAAS,CAAA,GAAI,CAAC,EAAE;AAEpB,YAAM8hB,IAAO41B,EAAA;AACb,MAAA/a,EAAO7a,CAAI;AAAA,IACb;AAAA,IACA,CAACq1B,GAAaO,GAAiB/a,CAAM;AAAA,EAAA,GAGjC2Y,IAAUlnC;AAAA,IACd,CAAC9T,GAAK69C,GAAKltC,MAAS;AAClB,YAAM,EAAE,MAAAjL,MAASiL,GACXmtC,IAAS,IAAI,OAAO,GAAG99C,CAAG,KAAK,IAAI;AACzC,MAAI69C,IACFn4C,EAAK,QAAQA,EAAK,MAAM,OAAO,GAAG1F,CAAG,GAAG,IAExC0F,EAAK,QAAQA,EAAK,OAAO,QAAQo4C,GAAQ,EAAE;AAE7C,YAAMt2B,IAAO41B,EAAA;AACb,MAAA/a,EAAO7a,CAAI;AAAA,IACb;AAAA,IACA,CAAC41B,GAAiB/a,CAAM;AAAA,EAAA,GAGpB0b,IAAkBjqC,GAAY,MAClB;AAAA,IACd;AAAA,MACE,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,UAAU;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,UAAU;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,oBAAA8pC;AAAA,IAAA;AAAA,IAEF;AAAA,MACE,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,UAAU;AAAA,MACV,UAAU;AAAA,MACV,OAAO;AAAA,MACP,cAAczC;AAAA,MACd,oBAAoB;AAAA,QAClB,KAAKW;AAAA,QACL,SAAAV;AAAA,MAAA;AAAA,IACF;AAAA,IAEF;AAAA,MACE,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,UAAU,CAACx0C,MACF,CAAC+1C,GAAU,SAAS/1C,EAAE,KAAK,IAAI;AAAA,MAExC,UAAU;AAAA,MACV,cAAcs0C;AAAA,MACd,oBAAoB;AAAA,QAClB,YAAAL;AAAA,QACA,YAAAC;AAAA,QACA,SAAAE;AAAA,QACA,eAAA11C;AAAA,MAAA;AAAA,MAEF,oBAAAs4C;AAAA,IAAA;AAAA,IAEF;AAAA,MACE,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,IAER;AAAA,MACE,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,OAAO;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,IAER;AAAA,MACE,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,iBAAiB3tB;AAAA,MACjB,uBAAuB,EAAE,QAAAC,EAAA;AAAA,MACzB,cAAcC;AAAA,MACd,oBAAoB,EAAE,QAAAC,EAAA;AAAA,MACtB,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,OAAO;AAAA,MACP,mBAAmB;AAAA,MACnB,QAAQ;AAAA,IAAA;AAAA,EACV,GAID,CAACyqB,GAAYC,GAAYE,GAAS11C,GAAew2C,GAAOV,CAAO,CAAC,GAE7D4C,IAAelqC,GAAY,MAAM;AACrC,QAAI;AACF,YAAM0T,IAAO41B,EAAA;AACb,MAAA/a,EAAO7a,CAAI;AAAA,IACb,SAAShC,GAAO;AACd,cAAQ,MAAM,4BAA4BA,CAAK;AAAA,IACjD;AAAA,EACF,GAAG,CAAC43B,GAAiB/a,CAAM,CAAC;AAE5B,SAAApuB,GAAU,MAAM;AAEd,QADI,CAACgpC,KACDF,EAAc;AAElB,UAAMkB,IAAczqC,EAAQ,QAAQ,IAAI,eAAA;AACxC,IAAAspC,EAAciB,GAAiB,GAE/B,WAAW,MAAM;AACf,MAAAvqC,EAAQ,QAAQ,IAAI,iBAAiB;AAAA,QACnC,OAAOyqC;AAAA,QACP,YAAY;AAAA,MAAA,CACb,GACDjB,EAAgB,EAAI;AAAA,IACtB,GAAG,CAAC;AAAA,EACN,GAAG,CAACC,GAAWF,GAAcgB,CAAe,CAAC,GAE7C9pC,GAAU,MAAM;AACd,IAAI8oC,KACFppC,EAAW7P,EAAM,cAAc,EAAE;AAAA,EAErC,GAAG,CAACi5C,GAAcj5C,EAAM,UAAU,CAAC,GAEnCmQ,GAAU,MAAM;AACd,QAAIT,EAAQ,SAAS,KAAK;AACxB,YAAM0qC,IAAcnrC,EAAW,KAAK,CAACue,MAAQA,EAAI,UAAU,OAAO;AAClE,UAAI,CAAC4sB,EAAa;AAElB,YAAMC,IAAiBD,EAAY,mBAAmB;AAKtD,UAAI,EAHF,CAACC,KACDA,EAAe,WAAW74C,EAAc,UACxC,KAAK,UAAU64C,CAAc,MAAM,KAAK,UAAU74C,CAAa,GAC5C;AACrB,MAAA44C,EAAY,mBAAmB,gBAAgB54C,GAC/CkO,EAAQ,QAAQ,IAAI,cAAc,cAAcT,CAAU;AAAA,IAC5D;AAAA,EACF,GAAG,CAACzN,GAAeyN,CAAU,CAAC,qBAG3B,OAAA,EACC,UAAA,gBAAArV;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAA;AAAA,MAChC,WAAW2E,EAAU,WAAW,OAAO;AAAA,MAEvC,UAAA,gBAAA3E;AAAA,QAAC2W;AAAA,QAAA;AAAA,UACC,YAAAtB;AAAA,UACA,eAAAF;AAAA,UACA,WAAU;AAAA,UACV,iBAAe;AAAA,UACf,aAAAsqC;AAAA,UACA,cAAAa;AAAA,UACA,KAAKxqC;AAAA,UACL,SAAAE;AAAA,UACA,gBAAc;AAAA,UACd,cAAc6oC;AAAA,UACd,iBAAe;AAAA,UACf,+BAA6B;AAAA,QAAA;AAAA,MAAA;AAAA,IAC/B;AAAA,EAAA,GAEJ;AAEJ;AAEAK,GAAW,YAAY;AAAA,EACrB,aAAah/C,EAAU,OAAO;AAAA,EAC9B,UAAUA,EAAU,OAAO;AAAA,EAC3B,OAAOA,EAAU,OAAO;AAAA,EACxB,QAAQA,EAAU,KAAK;AAAA,EACvB,aAAaA,EAAU,QAAQA,EAAU,MAAM,EAAE;AAAA,EACjD,eAAeA,EAAU,QAAQA,EAAU,MAAM,EAAE;AACrD;AAEA,MAAAwgD,KAAe77C,GAAM,KAAKq6C,EAAU,GC9b9BnK,KAAsB,CAAC,YAAY,QAAQ,QAAQ;AAMzD,SAAS4L,GAAsB;AAAA,EAC7B,WAAAxgB;AAAA,EACA,OAAA/5B;AAAA,EACA,OAAAS;AAAA,EACA,cAAAyU;AAAA,EACA,UAAAslC;AAAA,EACA,SAAAzJ;AAAA,EACA,kBAAA4E;AAAA,EACA,oBAAA8E;AAAA,EACA,eAAAj5C,IAAgB,CAAA;AAClB,GAAG;AACD,QAAM,CAACiZ,GAAY00B,CAAa,IAAIzlC,EAAS,CAAA,CAAE,GACzC,CAAC2jC,GAAe+B,CAAgB,IAAI1lC,EAAS,EAAE,GAC/C,CAAC2lC,GAAeC,CAAgB,IAAI5lC,EAAS,EAAE,GAC/C,CAAC6lC,GAAYC,CAAa,IAAI9lC,EAAS,EAAE,GACzC,CAACgxC,GAAgBC,CAAiB,IAAIjxC,EAAS,EAAE,GACjD,CAAC+lC,GAAiBC,CAAkB,IAAIhmC,EAAS,CAAA,CAAE,GACnD,CAACimC,GAAYC,CAAa,IAAIlmC,EAAS,CAAC,GACxC,CAAC3L,GAAiB68C,CAAkB,IAAIlxC,EAAS,CAAA,CAAE,GACnD,CAACmxC,GAAmBC,CAAoB,IAAIpxC,EAAS,CAAA,CAAE,GACvD,CAACqxC,GAAWC,CAAY,IAAItxC,EAAS,CAAC,GACtC,EAAE,SAAApO,IAAU,CAAA,GAAI,aAAAuG,EAAA,IAAgB3G,GAAA,GAChC,CAAC20C,GAAgBC,CAAiB,IAAIpmC,EAAS,EAAE;AAGvD,EAAAyG,GAAU,MAAM;AACd,QAAI,CAAC+E,GAAc;AACjB,MAAA0lC,EAAmB,CAAA,CAAE;AACrB;AAAA,IACF;AAEA,QAAIK;AACJ,QAAIR,KAAsBA,EAAmB,SAAS;AAEpD,MAAAQ,IAAW/lC,EAAa,OAAO,CAAChX,MAAMu8C,EAAmB,SAASv8C,EAAE,GAAG,CAAC;AAAA,SACnE;AAEL,YAAMg9C,IAAa,IAAI,IAAIvF,KAAoB,CAAA,CAAE;AACjD,MAAAsF,IAAW/lC,EAAa,OAAO,CAAChX,OAAM,CAACg9C,EAAW,IAAIh9C,GAAE,GAAG,CAAC;AAAA,IAC9D;AAEA,IAAA08C,EAAmBK,CAAQ;AAAA,EAC7B,GAAG,CAAC/lC,GAAcygC,GAAkB8E,CAAkB,CAAC,GAGvDtqC,GAAU,MAAM;AACd,QAAK4pB,MAED/5B,GAAO,eACTmvC,EAAcnvC,EAAM,WAAW,GAC/B4vC,EAAc5vC,EAAM,iBAAiB,CAAC,GACtC86C,EAAqB96C,EAAM,WAAW,GACtCg7C,EAAah7C,EAAM,iBAAiB,CAAC,MAErCmvC,EAAc,CAAA,CAAE,GAChBS,EAAc,CAAC,GACfkL,EAAqB,CAAA,CAAE,GACvBE,EAAa,CAAC,IAIZj9C,KAAmBA,EAAgB,SAAS,IAAG;AACjD,YAAMmyC,IAAanyC,EAAgB,CAAC;AACpC,MAAAqxC,EAAiBc,EAAW,GAAG,GAC/BH,EAAsBG,CAAU;AAAA,IAClC;AAAA,EACF,GAAG,CAACnW,GAAW/5B,GAAOjC,CAAe,CAAC;AAEtC,QAAMgyC,IAAwB,CAAC1C,MAAkB;AAC/C,QAAI,CAACA,KAAiB,CAACA,EAAc,QAAQ;AAC3C,MAAAqC,EAAmB,CAAA,CAAE;AACrB;AAAA,IACF;AAEA,QAAIM,IAAiB3C,EAAc,OAAO;AAAA,MAAO,CAAClvC,OAChDwwC,GAAoB,SAASxwC,GAAE,IAAI;AAAA,IAAA;AAKrC,IAAIkvC,EAAc,QAAQ5sC,EAAM,QAC9BuvC,IAAiBA,EAAe,OAAO,CAAC7xC,OAAMA,GAAE,UAAU6B,EAAM,KAAK,IAGvE0vC,EAAmBM,CAAc,GAE7BA,EAAe,SAAS,IAC1BV,EAAiBU,EAAe,CAAC,EAAE,KAAK,IAExCV,EAAiB,EAAE;AAAA,EAEvB,GAEMuD,IAAoB,CAAC/vC,MAAM;AAC/B,UAAM9E,IAAW8E,EAAE,OAAO;AAC1B,IAAAssC,EAAiBpxC,CAAQ;AACzB,UAAMyC,KAAQ1C,EAAgB,KAAK,CAACG,OAAMA,GAAE,QAAQF,CAAQ;AAC5D,IAAIyC,MACFsvC,EAAsBtvC,EAAK,GAE7B+uC,EAAc,EAAE;AAAA,EAClB,GAEMsD,IAAqB,MAAM;AAC/B,QAAI,CAACzF,KAAiB,CAACgC;AACrB;AAUF,UAAMgB,KANmBtyC,EAAgB;AAAA,MACvC,CAACG,OAAMA,GAAE,QAAQmvC;AAAA,IAAA,GAEwB,QAAQ;AAAA,MACjD,CAAClvC,OAAMA,GAAE,UAAUkxC;AAAA,IAAA,GAEgB,SAASh8B,EAAW;AAGzD,QAAIi9B,KAAiBf,EAAW,KAAA;AAChC,IAAIc,OACFC,KAAiBj0C,GAAOkzC,CAAU;AAGpC,UAAMa,KAAe;AAAA,MACnB,IAAI,GAAGzmC,GAAA,CAAQ;AAAA,MACf,OAAO0lC;AAAA,MACP,OAAOhC;AAAA,MACP,OAAOiD;AAAA,MACP,OAAOoK,EAAe,KAAA;AAAA;AAAA,IAAK,GAGvBnK,KAAoB,CAAC,GAAG91B,GAAY21B,EAAY;AACtD,IAAAjB,EAAcoB,EAAiB,GAC/Bf,EAAc,EAAE,GAChBmL,EAAkB,EAAE;AAAA,EACtB,GAEMQ,IAA2B,MAAM;AACrC,QAAI,CAACtL,EAAgB;AAErB,UAAMO,IAAe;AAAA,MACnB,IAAI,GAAGzmC,GAAA,CAAQ;AAAA,MACf,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAOkmC;AAAA,IAAA,GAGHU,IAAoB,CAAC,GAAG91B,GAAY21B,CAAY;AACtD,IAAAjB,EAAcoB,CAAiB;AAAA,EACjC,GAEMwC,IAAwB,CAACvC,MAAgB;AAC7C,UAAMD,IAAoB91B,EAAW,OAAO,CAACyC,OAAMA,GAAE,OAAOszB,CAAW;AACvE,IAAArB,EAAcoB,CAAiB;AAAA,EACjC,GAEMyC,IAAiB,CAACvC,MAAU;AAChC,IAAAb,EAAca,CAAK;AAAA,EACrB,GAEM/yB,IAAa,MAAM;AACvB,QAAI88B;AACF,UAAI//B,EAAW,WAAW,GAAG;AAE3B,cAAM2gC,IAAe,EAAE,GAAGp7C,EAAA;AAC1B,eAAOo7C,EAAa,aACpB,OAAOA,EAAa,eACpBZ,EAASY,CAAY;AAAA,MACvB;AACE,QAAAZ,EAAS;AAAA,UACP,GAAGx6C;AAAA,UACH,aAAaya;AAAA,UACb,eAAek1B;AAAA,QAAA,CAChB;AAGL,IAAAoB,EAAA;AAAA,EACF,GAEMyF,KAAe,MAAM;AAEzB,IAAArH,EAAc0L,CAAiB,GAC/BjL,EAAcmL,CAAS,GACvBhK,EAAA;AAAA,EACF;AAEA,SAAKhX,IAKH,gBAAAp/B;AAAA,IAACuI;AAAA,IAAA;AAAA,MACC,UAAQ;AAAA,MACR,UAAS;AAAA,MACT,iBAAgB;AAAA,MAChB,MAAM62B;AAAA,MACN,QAAQyc;AAAA,MAER,UAAA;AAAA,QAAA,gBAAA58C,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,UAAA,gBAAAvI,EAACuI,EAAM,OAAN,EAAY,UAAA;AAAA,UAAA;AAAA,UACkBlD,EAAM;AAAA,UAAM;AAAA,UAASS,EAAM;AAAA,UAAM;AAAA,QAAA,EAAA,CAChE,EAAA,CACF;AAAA,QACA,gBAAA7G,EAACsJ,EAAM,MAAN,EAAW,OAAO,EAAE,WAAW,QAAQ,UAAU,OAAA,GAChD,UAAA,gBAAAtJ,EAAC4mC,IAAA,EAAK,WAAU,YACd,UAAA,gBAAA7lC,EAAC6lC,GAAK,MAAL,EAAU,WAAU,OACnB,UAAA;AAAA,UAAA,gBAAA5mC;AAAA,YAAC82C;AAAA,YAAA;AAAA,cACC,YAAAf;AAAA,cACA,YAAYqD;AAAA,YAAA;AAAA,UAAA;AAAA,UAEbv4B,EAAW,SAAS,KACnB,gBAAA9f,EAAC,OAAA,EAAI,WAAU,QACb,UAAA;AAAA,YAAA,gBAAAf,EAAC,SAAA,EAAM,WAAU,2BAA0B,UAAA,wBAE3C;AAAA,YACC6gB,EAAW,IAAI,CAACnc,MAAS;AACxB,oBAAM,EAAE,YAAAuzC,GAAY,YAAAC,IAAY,YAAAC,GAAA,IAC9B1zC,GAAoBC,GAAMP,GAAiBzC,CAAO;AACpD,qBACE,gBAAAX;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAU;AAAA,kBAEV,UAAA;AAAA,oBAAA,gBAAAf,EAAC,OAAA,EAAI,WAAU,eACb,UAAA,gBAAAe,EAAC,SAAA,EACC,UAAA;AAAA,sBAAA,gBAAAf,EAAC,YAAQ,UAAAi4C,EAAA,CAAW;AAAA,sBAAS;AAAA,sBAAIC;AAAA,sBAAW;AAAA,sBACrCC;AAAA,sBAAW;AAAA,sBACjBzzC,EAAK,SACJ,gBAAA3D,EAAC,QAAA,EAAK,WAAU,cACb,UAAA;AAAA,wBAAA;AAAA,wBAAI;AAAA,wBACQ,gBAAAf,EAAC,MAAA,EAAI,UAAA0E,EAAK,MAAA,CAAM;AAAA,wBAAK;AAAA,sBAAA,EAAA,CACpC;AAAA,oBAAA,EAAA,CAEJ,EAAA,CACF;AAAA,oBACA,gBAAA1E;AAAA,sBAACiB;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,MAAK;AAAA,wBACL,SAAS,MAAMk4C,EAAsBz0C,EAAK,EAAE;AAAA,wBAC5C,OAAM;AAAA,wBAEL,UAAAgK,EAAO;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACV;AAAA,gBAAA;AAAA,gBAtBKhK,EAAK;AAAA,cAAA;AAAA,YAyBhB,CAAC;AAAA,UAAA,GACH;AAAA,UAGF,gBAAA3D,EAAC,OAAA,EAAI,WAAU,mBACb,UAAA;AAAA,YAAA,gBAAAf,EAAC,SAAA,EAAM,WAAU,2BAA0B,UAAA,sBAE3C;AAAA,YACA,gBAAAe,EAACd,EAAK,OAAL,EAAW,WAAU,QACpB,UAAA;AAAA,cAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,WAAU,SAAQ,UAAA,mCAA+B;AAAA,cAC7D,gBAAAD;AAAA,gBAACC,EAAK;AAAA,gBAAL;AAAA,kBACC,MAAK;AAAA,kBACL,OAAOwzC;AAAA,kBACP,UAAUwF;AAAA,kBAET,UAAA90C,KACCA,EAAgB,IAAI,CAAC0C,MACnB,gBAAA9F,EAAC,UAAA,EAAuB,OAAO8F,EAAM,KAClC,UAAA;AAAA,oBAAAA,EAAM,SAASA,EAAM;AAAA,oBAAI;AAAA,oBAAGA,EAAM;AAAA,oBAAI;AAAA,kBAAA,EAAA,GAD5BA,EAAM,GAEnB,CACD;AAAA,gBAAA;AAAA,cAAA;AAAA,YACL,GACF;AAAA,YAEA,gBAAA9F,EAAC,OAAA,EAAI,WAAU,8BACb,UAAA;AAAA,cAAA,gBAAAf,EAAC,SAAI,WAAU,YACb,UAAA,gBAAAe,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,gBAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,WAAU,SAAQ,UAAA,gBAAY;AAAA,gBAC1C,gBAAAD;AAAA,kBAACC,EAAK;AAAA,kBAAL;AAAA,oBACC,MAAK;AAAA,oBACL,OAAOw1C;AAAA,oBACP,UAAU,CAACvsC,MAAMwsC,EAAiBxsC,EAAE,OAAO,KAAK;AAAA,oBAChD,UAAU2sC,EAAgB,WAAW;AAAA,oBAEpC,UAAAA,EAAgB,IAAI,CAACzvC,wBACnB,UAAA,EAAyB,OAAOA,EAAM,OACpC,UAAA;AAAA,sBAAAA,EAAM,SAASA,EAAM;AAAA,sBAAM;AAAA,sBAAGA,EAAM;AAAA,sBAAM;AAAA,sBAASA,EAAM;AAAA,sBAAK;AAAA,oBAAA,EAAA,GADpDA,EAAM,KAEnB,CACD;AAAA,kBAAA;AAAA,gBAAA;AAAA,kCAEFnG,EAAK,MAAL,EAAU,OAAK,IAAC,UAAA,2CAAA,CAEjB;AAAA,cAAA,EAAA,CACF,EAAA,CACF;AAAA,gCAEC,OAAA,EAAI,WAAU,YACb,UAAA,gBAAAc,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,gBAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,WAAU,SAAQ,UAAA,eAAW;AAAA,iBACvC,MAAM;AAKN,wBAAM03C,IAHmBxzC,EAAgB;AAAA,oBACvC,CAACG,OAAMA,GAAE,QAAQmvC;AAAA,kBAAA,GAEwB,QAAQ;AAAA,oBACjD,CAAClvC,OAAMA,GAAE,UAAUkxC;AAAA,kBAAA,GAEfmC,KAAgBD,GAAkB,SAAS,UAC3CE,KACJF,GAAkB,SAASl+B,EAAW,YAClCq+B,KACJF,MAAiBD,GAAkB,gBAC/B/vC,EAAc+vC,EAAiB,aAAa,GACxC,WAAW,CAAA,IACf,CAAA;AAGN,yBAAIC,KAEA,gBAAA72C;AAAA,oBAACd,EAAK;AAAA,oBAAL;AAAA,sBACC,MAAK;AAAA,sBACL,OAAO01C;AAAA,sBACP,UAAU,CAACzsC,OAAM0sC,EAAc1sC,GAAE,OAAO,KAAK;AAAA,sBAE7C,UAAA;AAAA,wBAAA,gBAAAlJ,EAAC,UAAA,EAAO,OAAM,IAAG,UAAA,qBAAiB;AAAA,wBACjC83C,GAAmB,IAAI,CAACnxB,OACvB,gBAAA3mB,EAAC,UAAA,EAAwB,OAAO2mB,GAAO,KACpC,UAAAA,GAAO,MAAA,GADGA,GAAO,GAEpB,CACD;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA,IAKHkxB,KAEA,gBAAA92C;AAAA,oBAACd,EAAK;AAAA,oBAAL;AAAA,sBACC,MAAK;AAAA,sBACL,OAAO01C;AAAA,sBACP,UAAU,CAACzsC,OAAM0sC,EAAc1sC,GAAE,OAAO,KAAK;AAAA,sBAE7C,UAAA;AAAA,wBAAA,gBAAAlJ,EAAC,UAAA,EAAO,OAAM,SAAQ,UAAA,qBAAiB;AAAA,wBACvC,gBAAAA,EAAC,UAAA,EAAO,OAAM,QAAO,UAAA,iBAAA,CAAc;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA,IAMvC,gBAAAA;AAAA,oBAACC,EAAK;AAAA,oBAAL;AAAA,sBACC,MAAK;AAAA,sBACL,MAAK;AAAA,sBACL,aAAY;AAAA,sBACZ,OAAO01C;AAAA,sBACP,UAAU,CAACzsC,OAAM0sC,EAAc1sC,GAAE,OAAO,KAAK;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAGnD,GAAA;AAAA,kCACCjJ,EAAK,MAAL,EAAU,OAAK,IACZ,WAAA,MAAM;AAIN,wBAAM03C,IAHmBxzC,EAAgB;AAAA,oBACvC,CAACG,OAAMA,GAAE,QAAQmvC;AAAA,kBAAA,GAEwB,QAAQ;AAAA,oBACjD,CAAClvC,OAAMA,GAAE,UAAUkxC;AAAA,kBAAA;AAErB,yBAAIkC,GAAkB,SAAS,WACtB,mCAELA,GAAkB,SAASl+B,EAAW,aACjC,uCAEF;AAAA,gBACT,KAAG,CACL;AAAA,cAAA,EAAA,CACF,EAAA,CACF;AAAA,gCAEC,OAAA,EAAI,WAAU,YACb,UAAA,gBAAA1Y,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,gBAAA,gBAAAc,EAACd,EAAK,OAAL,EAAW,WAAU,SAAQ,UAAA;AAAA,kBAAA;AAAA,kBAE3B81C,MAAe,KACd,gBAAA/1C,EAAC,QAAA,EAAK,WAAU,cAAa,UAAA,oBAAA,CAAiB;AAAA,gBAAA,GAElD;AAAA,gBACA,gBAAAe,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA;AAAA,kBAAA,gBAAAf;AAAA,oBAACC,EAAK;AAAA,oBAAL;AAAA,sBACC,MAAK;AAAA,sBACL,MAAK;AAAA,sBACL,aAAY;AAAA,sBACZ,OAAO6gD;AAAA,sBACP,UAAU,CAAC53C,MAAM63C,EAAkB73C,EAAE,OAAO,KAAK;AAAA,sBACjD,UAAU6sC,MAAe;AAAA,sBACzB,OAAO,EAAE,MAAM,EAAA;AAAA,oBAAE;AAAA,kBAAA;AAAA,kBAEnB,gBAAA/1C;AAAA,oBAACiB;AAAA,oBAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,MAAK;AAAA,sBACL,SAASi4C;AAAA,sBACT,UACE,CAACzF,KACD,CAACgC,KACDI,EAAgB,WAAW;AAAA,sBAE7B,OAAO,EAAE,YAAY,EAAA;AAAA,sBACrB,OAAM;AAAA,sBAEL,UAAAnnC,EAAO;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACV,EAAA,CACF;AAAA,cAAA,EAAA,CACF,EAAA,CACF;AAAA,YAAA,GACF;AAAA,YAECzG,MAAgBtD,EAAU,cAAc,WACvC,gBAAA3E,EAAC,SAAI,WAAU,yBACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,aACb,UAAA,gBAAAe,EAACd,EAAK,OAAL,EAAW,WAAU,mBACpB,UAAA;AAAA,cAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,WAAU,SAAQ,UAAA,oBAAgB;AAAA,cAC9C,gBAAAc,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA;AAAA,gBAAA,gBAAAA;AAAA,kBAACd,EAAK;AAAA,kBAAL;AAAA,oBACC,MAAK;AAAA,oBACL,OAAOg2C;AAAA,oBACP,UAAU,CAAC/sC,MAAMgtC,EAAkBhtC,EAAE,OAAO,KAAK;AAAA,oBACjD,UAAUxH,EAAQ,WAAW;AAAA,oBAC7B,OAAO,EAAE,MAAM,EAAA;AAAA,oBAEf,UAAA;AAAA,sBAAA,gBAAA1B,EAAC,UAAA,EAAO,OAAM,IAAG,UAAA,sBAAkB;AAAA,sBAClC0B,EAAQ,IAAI,CAACwE,wBACX,UAAA,EAAwB,OAAOA,EAAM,MACnC,UAAA;AAAA,wBAAAA,EAAM,SAASA,EAAM;AAAA,wBAAK;AAAA,wBAAGA,EAAM;AAAA,wBAAK;AAAA,sBAAA,EAAA,GAD9BA,EAAM,IAEnB,CACD;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEH,gBAAAlG;AAAA,kBAACiB;AAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,SAASsgD;AAAA,oBACT,UAAU,CAACtL,KAAkBv0C,EAAQ,WAAW;AAAA,oBAChD,OAAO,EAAE,YAAY,EAAA;AAAA,oBACrB,OAAM;AAAA,oBAEL,UAAAgN,EAAO;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACV,GACF;AAAA,gCACCzO,EAAK,MAAL,EAAU,OAAK,IAAC,UAAA,6BAAA,CAA0B;AAAA,YAAA,EAAA,CAC7C,GACF,EAAA,CACF;AAAA,UAAA,EAAA,CAEJ;AAAA,QAAA,EAAA,CACF,GACF,GACF;AAAA,QACA,gBAAAc,EAACuI,EAAM,QAAN,EAAa,WAAU,yBACtB,UAAA;AAAA,UAAA,gBAAAtJ,EAACiB,GAAA,EAAO,SAAQ,aAAY,SAAS27C,IAAc,UAAA,UAEnD;AAAA,4BACC37C,GAAA,EAAO,SAAQ,WAAU,SAAS6iB,GAAY,UAAA,OAAA,CAE/C;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IA7QK;AAgRX;AAEA68B,GAAsB,YAAY;AAAA,EAChC,WAAWzgD,EAAU,KAAK;AAAA,EAC1B,OAAOA,EAAU,MAAM;AAAA,IACrB,OAAOA,EAAU,OAAO;AAAA,IACxB,OAAOA,EAAU,OAAO;AAAA,IACxB,aAAaA,EAAU;AAAA,MACrBA,EAAU,MAAM;AAAA,QACd,IAAIA,EAAU;AAAA,QACd,OAAOA,EAAU;AAAA,QACjB,OAAOA,EAAU;AAAA,QACjB,OAAOA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,IAAI,CAAC;AAAA,QAC7D,OAAOA,EAAU;AAAA,MAAA,CAClB;AAAA,IAAA;AAAA,IAEH,eAAeA,EAAU;AAAA,EAAA,CAC1B,EAAE;AAAA,EACH,OAAOA,EAAU,MAAM;AAAA,IACrB,KAAKA,EAAU,OAAO;AAAA,IACtB,OAAOA,EAAU;AAAA,EAAA,CAClB,EAAE;AAAA,EACH,cAAcA,EAAU;AAAA,IACtBA,EAAU,MAAM;AAAA,MACd,KAAKA,EAAU,OAAO;AAAA,MACtB,OAAOA,EAAU;AAAA,MACjB,QAAQA,EAAU;AAAA,IAAA,CACnB;AAAA,EAAA,EACD;AAAA,EACF,UAAUA,EAAU,KAAK;AAAA,EACzB,SAASA,EAAU,KAAK;AAAA,EACxB,kBAAkBA,EAAU,QAAQA,EAAU,MAAM;AAAA,EACpD,oBAAoBA,EAAU,QAAQA,EAAU,MAAM;AAAA,EACtD,eAAeA,EAAU;AAC3B;AAEAygD,GAAsB,eAAe;AAAA,EACnC,kBAAkB,CAAA;AAAA,EAClB,oBAAoB;AAAA,EACpB,eAAe,CAAA;AACjB;AC3fA,SAASc,GAAkB38C,GAAO;AAChC,QAAM;AAAA,IACJ,OAAAsB;AAAA,IACA,aAAAs7C;AAAA,IACA,OAAA76C;AAAA,IACA,cAAAyU;AAAA,IACA,IAAAzH;AAAA,IACA,kBAAAkoC;AAAA,IACA,oBAAA8E;AAAA,IACA,eAAAj5C;AAAA,IACA,UAAA8L;AAAA,EAAA,IACE5O,GACE,CAACqD,GAAMC,CAAO,IAAI0H,EAAS,EAAK,GAEhCmI,IAAU,MAAM;AACpB,IAAIvE,KACJtL,EAAQ,EAAI;AAAA,EACd,GAEM+uC,IAAU,MAAM;AACpB,IAAA/uC,EAAQ,EAAK;AAAA,EACf,GAEMQ,IAAe,CAAC44C,MAAiB;AACrC,IAAAE,EAAY76C,EAAM,KAAK26C,CAAY;AAAA,EACrC,GAEMG,IACJ,gBAAA3hD;AAAA,IAACiB;AAAA,IAAA;AAAA,MACC,SAASmF,GAAO,aAAa,SAAS,IAAa,YAAY;AAAA,MAC/D,WAAU;AAAA,MACV,SAAA6R;AAAA,MACA,UAAAvE;AAAA,MAEC,UAAAhF,EAAO;AAAA,IAAA;AAAA,EAAA,GAINqF,IACJ,gBAAAhT;AAAA,IAACiT,GAAS;AAAA,IAAT;AAAA,MACC,UAAS;AAAA,MACT,SAAAiE;AAAA,MACA,WAAW7R,GAAO,aAAa,SAAS,IAAI,sBAAsB;AAAA,MAClE,UAAAsN;AAAA,MAEC,UAAA;AAAA,QAAAhF,EAAO;AAAA,QAAQ;AAAA,QAAaa,GAAI;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIrC,SACE,gBAAAxO,EAAAsI,GAAA,EACG,UAAA;AAAA,IAAAwK,MAAO,SACNE,IAEA,gBAAA/T;AAAA,MAACyP;AAAA,MAAA;AAAA,QACC,KAAKiE,IAAW,4BAA4B;AAAA,QAE3C,UAAAiuC;AAAA,MAAA;AAAA,IAAA;AAAA,IAGL,gBAAA3hD;AAAA,MAAC2gD;AAAA,MAAA;AAAA,QACC,WAAWx4C;AAAA,QACX,OAAA/B;AAAA,QACA,OAAAS;AAAA,QACA,cAAAyU;AAAA,QACA,UAAU1S;AAAA,QACV,SAAAuuC;AAAA,QACA,kBAAA4E;AAAA,QACA,oBAAA8E;AAAA,QACA,eAAAj5C;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAEA65C,GAAkB,YAAY;AAAA,EAC5B,OAAOvhD,EAAU,OAAO;AAAA,EACxB,aAAaA,EAAU,KAAK;AAAA,EAC5B,OAAOA,EAAU,OAAO;AAAA,EACxB,cAAcA,EAAU,MAAM;AAAA,EAC9B,IAAIA,EAAU;AAAA,EACd,kBAAkBA,EAAU,QAAQA,EAAU,MAAM;AAAA,EACpD,oBAAoBA,EAAU,QAAQA,EAAU,MAAM;AAAA,EACtD,eAAeA,EAAU;AAAA,EACzB,UAAUA,EAAU;AACtB;AAEAuhD,GAAkB,eAAe;AAAA,EAC/B,IAAI;AAAA,EACJ,kBAAkB,CAAA;AAAA,EAClB,oBAAoB;AAAA,EACpB,eAAe,CAAA;AAAA,EACf,UAAU;AACZ;AC/FA,MAAMG,KAAY,CAAC,EAAE,MAAAC,QAAW;AAC9B,QAAM,EAAE,OAAOC,GAAW,OAAOC,GAAW,UAAUC,MAAiBH,GACjE;AAAA,IACJ,aAAAl1B,IAAc,CAAC,EAAE;AAAA,IACjB,YAAYs1B,IAAY;AAAA,IACxB,OAAOC,IAAgB;AAAA,EAAA,IACrBF,KAAgB,CAAA,GACdG,IACJn2B,GAASg2B,GAAcE,CAAa,KAAK;AAE3C,2BACGx+B,IAAA,EACC,UAAA;AAAA,IAAA,gBAAA3iB,EAAC4iB,IAAA,EAAI,IAAI,GACP,UAAA;AAAA,MAAA,gBAAA3jB,EAAC,MAAA,EACC,UAAA,gBAAAA,EAAC,KAAA,EAAG,UAAA8hD,EAAA,CAAU,GAChB;AAAA,wBACC7hD,GAAA,EACC,UAAA;AAAA,QAAA,gBAAAc,EAACd,EAAK,OAAL,EAAW,WAAU,cACpB,UAAA;AAAA,UAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,UAAA,aAAA,CAAU;AAAA,UACtB,gBAAAD,EAACC,EAAK,SAAL,EAAa,MAAK,QAAO,OAAO8hD,GAAW,UAAQ,IAAC,UAAQ,GAAA,CAAC;AAAA,QAAA,GAChE;AAAA,QACA,gBAAAhhD,EAACd,EAAK,OAAL,EAAW,WAAU,cACpB,UAAA;AAAA,UAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,UAAA,eAAA,CAAY;AAAA,UACxB,gBAAAD;AAAA,YAACC,EAAK;AAAA,YAAL;AAAA,cACC,MAAK;AAAA,cACL,OAAO6hD;AAAA,cACP,aAAY;AAAA,cACZ,UAAQ;AAAA,cACR,UAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,QACV,GACF;AAAA,QACA,gBAAA/gD,EAACd,EAAK,OAAL,EAAW,WAAU,YACpB,UAAA;AAAA,UAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,UAAA,+BAAA,CAA4B;AAAA,UACxC,gBAAAc,EAACd,EAAK,OAAL,EAAW,MAAK,SACf,UAAA;AAAA,YAAA,gBAAAD,EAACC,EAAK,MAAM,OAAX,EAAiB,MAAK,SAAQ,SAAO,IAAC,UAAQ,GAAA,CAAC;AAAA,YAChD,gBAAAc,EAACd,EAAK,MAAM,OAAX,EACC,UAAA;AAAA,cAAA,gBAAAD,EAAC,QAAA,EAAK,WAAU,WAAW,UAAA0O,EAAO,SAAQ;AAAA,cAC1C,gBAAA1O,EAAC,OAAE,UAAA,4BAAA,CAAyB;AAAA,cAC5B,gBAAAA,EAAC,SAAI,UAAA,sKAAA,CAIL;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IACA,gBAAAe,EAAC4iB,IAAA,EAAI,IAAI,GACP,UAAA;AAAA,MAAA,gBAAA3jB,EAAC,MAAA,EAAG,WAAU,yBAAyB,UAAAmiD,GAAK;AAAA,wBAC3CliD,GAAA,EACC,UAAA;AAAA,QAAA,gBAAAc,EAACd,EAAK,OAAL,EAAW,WAAU,cACpB,UAAA;AAAA,UAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,UAAA,UAAA,CAAO;AAAA,UACnB,gBAAAD,EAACC,EAAK,SAAL,EAAa,MAAK,QAAO,OAAOgiD,GAAW,UAAQ,IAAC,UAAQ,GAAA,CAAC;AAAA,QAAA,GAChE;AAAA,QACA,gBAAAlhD,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,UAAA,gBAAAD,EAACC,EAAK,OAAL,EAAW,UAAA,cAAA,CAAW;AAAA,UACvB,gBAAAD;AAAA,YAACC,EAAK;AAAA,YAAL;AAAA,cACC,IAAG;AAAA,cACH,OAAO0sB,EAAY,KAAK;AAAA,CAAI;AAAA,cAC5B,UAAQ;AAAA,cACR,UAAQ;AAAA,cACR,MAAM;AAAA,cACN,OAAO,EAAE,QAAQ,OAAA;AAAA,YAAO;AAAA,UAAA;AAAA,QAC1B,GACF;AAAA,QACA,gBAAA5rB,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,UAAA,gBAAAf,EAAC,QAAA,EAAK,WAAU,QAAQ,UAAA0O,EAAO,cAAa;AAAA,4BAC3C,QAAA,EACC,UAAA;AAAA,YAAA,gBAAA1O,EAAC,OAAE,UAAA,eAAA,CAAY;AAAA,YACf,gBAAAA,EAAC,KAAA,EAAE,WAAU,QAAO,UAAA,uIAIpB;AAAA,YACA,gBAAAA,EAAC,KAAA,EAAE,WAAU,QAAO,UAAA,mDAEpB;AAAA,YACA,gBAAAA,EAAC,MAAA,EACE,UAAA0kB,GAAW,IAAI,CAACte,MACf,gBAAApG,EAAC,MAAA,EAAsB,UAAAoG,EAAM,MAAA,GAApBA,EAAM,KAAoB,CACpC,EAAA,CACH;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AAEAw7C,GAAU,YAAY;AAAA,EACpB,MAAM1hD,EAAU,MAAM;AAAA,IACpB,OAAOA,EAAU;AAAA,IACjB,OAAOA,EAAU;AAAA,IACjB,UAAUA,EAAU,MAAM;AAAA,MACxB,aAAaA,EAAU,QAAQA,EAAU,MAAM;AAAA,MAC/C,YAAYA,EAAU;AAAA,MACtB,OAAOA,EAAU;AAAA,IAAA,CAClB;AAAA,EAAA,CACF,EAAE;AACL;ACvGA,MAAMkiD,KAAiB,CAAC,EAAE,MAAAC,GAAM,OAAA58C,GAAO,WAAAyC,GAAW,OAAAo6C,GAAO,UAAAziD,QAAe;AACtE,QAAM,EAAE,MAAAsI,MAASD;AACjB,SAAKC,IAGH,gBAAAnI,EAACsJ,KAAM,UAAQ,IAAC,MAAAnB,GAAY,QAAQm6C,GAAO,iBAAgB,gBACzD,UAAA,gBAAAvhD;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAS,CAACmI,MAAM;AACd,QAAAA,EAAE,gBAAA,GACFA,EAAE,eAAA;AAAA,MACJ;AAAA,MACA,WAAW,CAACA,MAAMA,EAAE,QAAQ,WAAWA,EAAE,gBAAA;AAAA,MACzC,MAAK;AAAA,MACL,UAAU;AAAA,MAEV,UAAA;AAAA,QAAA,gBAAAlJ,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,4BAACA,EAAM,OAAN,EAAa,UAAA7D,EAAA,CAAM,EAAA,CACtB;AAAA,QACA,gBAAAzF,EAACsJ,EAAM,MAAN,EAAY,UAAAzJ,EAAA,CAAS;AAAA,QACtB,gBAAAG,EAACsJ,EAAM,QAAN,EAAa,WAAU,yBAAyB,UAAA+4C,EAAK,IAAI,CAACv7C,MAAQA,CAAG,EAAA,CAAE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAE5E,IAnBgB;AAqBpB;AAEAs7C,GAAe,YAAY;AAAA,EACzB,MAAMliD,EAAU,QAAQA,EAAU,IAAI;AAAA,EACtC,OAAOA,EAAU,OAAO;AAAA,EACxB,WAAWA,EAAU,MAAM;AAAA,IACzB,MAAMA,EAAU,KAAK;AAAA,IACrB,SAASA,EAAU,KAAK;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,OAAOA,EAAU,KAAK;AAAA,EACtB,UAAUA,EAAU,KAAK;AAC3B;AAEAkiD,GAAe,eAAe,EAAE,MAAM,GAAC;ACrCvC,MAAMG,KAAU;AAEhB,MAAMC,GAAa;AAAA;AAAA,EAEjB,OAAOj6B,KAAQ,OAAOP,GAAUR,IAAS,OAAOzU,IAAS,SAAS;AAChE,UAAMyV,IAAe,GAAG+5B,EAAO,IAAIv6B,CAAQ,IACrCI,IAAMrV,IACR,MAAMgV,GAAI,YAAYhV,GAAQyV,CAAY,IAC1C,MAAMT,GAAI,QAAQS,GAAchB,CAAM;AAG1C,WAAO,IAAIziB,GAASkK,GAAOmZ,EAAI,IAAIA,EAAI,OAAO,EAAE,GAAG,EAAE,MAAMA,EAAI,MAAM;AAAA,EACvE;AAAA,EAEA,OAAO,iBAAiB,CAACrV,IAAS,CAAA,MAChCyvC,GAAaj6B,GAAM,mBAAmB,QAAQxV,CAAM;AAAA,EAEtD,OAAO,mBAAmB,CAAC0vC,MACzBD,GAAaj6B,GAAM,qBAAqBk6B,CAAY,IAAI,QAAQ;AAAA,EAElE,OAAO,gBAAgB,CAACA,MACtBD,GAAaj6B,GAAM,kBAAkBk6B,CAAY,EAAE;AAAA,EAErD,OAAO,qBAAqB,MAAMD,GAAaj6B,GAAM,sBAAsB;AAC7E;ACvBA,MAAMm6B,KAAsB,CAAC,EAAE,QAAA5qC,GAAQ,SAAAq/B,QACjCr/B,MAAW,OAAa,yBAGzBmoB,IAAA,EAAM,SAASnoB,EAAO,YAAY,YAAY,UAC7C,UAAA;AAAA,EAAA,gBAAA/W,EAAC,QAAA,EACC,UAAA;AAAA,IAAA,gBAAAf,EAAC,KAAA,EAAG,YAAO,MAAA,CAAM;AAAA,IAChB,KAAK8X,EAAO,GAAG;AAAA,EAAA,GAClB;AAAA,EACA,gBAAA9X;AAAA,IAACiB;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MACV,SAAS,CAACiI,MAAM;AACd,QAAAA,EAAE,gBAAA,GACFiuC,EAAA;AAAA,MACF;AAAA,MACA,SAAQ;AAAA,MAEP,UAAAzoC,EAAO;AAAA,IAAA;AAAA,EAAA;AACV,GACF;AAIJg0C,GAAoB,YAAY;AAAA,EAC9B,QAAQxiD,EAAU,MAAM;AAAA,IACtB,WAAWA,EAAU;AAAA,IACrB,OAAOA,EAAU;AAAA,IACjB,KAAKA,EAAU;AAAA,EAAA,CAChB;AAAA,EACD,SAASA,EAAU,KAAK;AAC1B;AAEAwiD,GAAoB,eAAe;AAAA,EACjC,QAAQ;AACV;AC1BA,MAAMC,KAA0B,CAACjnC,GAAQknC,MAAU;AACjD,QAAMj0B,IAAU,EAAE,gBAAgB,GAAC,GAC7BvoB,IAAQlB,EAAUwW,CAAM,GACxB1T,IAAO9C,EAAU09C,CAAK;AAE5B,MAAI,CAACnpC,EAAW,UAAUA,EAAW,cAAc,EAAE,SAASrT,EAAM,IAAI,GAAG;AACzE,UAAMy8C,IAAiBz8C,EAAM;AAE7B,IAAI4B,GAAM,qBAAqB,iBAAiB66C,CAAc,MAE5Dl0B,EAAQ,eAAek0B,CAAc,IACnC76C,EAAK,oBAAoB,eAAe66C,CAAc,GACxDl0B,EAAQ,eAAek0B,CAAc,EAAE,OAAOA;AAAA,EAElD;AAEA,SAAI,OAAO,KAAKl0B,EAAQ,kBAAkB,EAAE,EAAE,WAAW,IAChD,OAEFA;AACT,GAEMqgB,KAAe;AAAA,EACnB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AACV,GAEMD,KAAU,CAACI,GAAOG,MACdA,EAAO,SACR,UACI;AAAA,EACL,GAAGN;AAAAA,EACH,OAAOM,EAAO,QAAQ;AAAA,EACtB,OAAOA,EAAO,QAAQ;AAAA,EACtB,MAAMA,EAAO,QAAQ;AAAA,IAGhB,EAAE,GAAGH,GAAO,CAACG,EAAO,IAAI,GAAGA,EAAO,QAAA,GAKzCwT,KAAe,CAACh+C,MAAU;AAC9B,QAAM;AAAA,IACJ,OAAOi+C;AAAA,IACP,MAAMC;AAAA,IACN,OAAOC;AAAA,IACP,aAAAh7C;AAAA,EAAA,IACEnD,GAGE,CAACqqC,GAAOC,CAAQ,IAAIC,GAAWN,IAAS;AAAA,IAC5C,GAAGC;AAAAA,IACH,OAAO+T;AAAA,IACP,MAAMC;AAAA,IACN,OAAOC;AAAA,EAAA,CACR;AAGD,EAAA1sC,GAAU,MAAM;AACd,IAAA64B,EAAS,EAAE,MAAM,SAAS,SAAS2T,GAAc;AAAA,EACnD,GAAG,CAACA,CAAY,CAAC,GAEjBxsC,GAAU,MAAM;AACd,IAAA64B,EAAS,EAAE,MAAM,QAAQ,SAAS4T,GAAa;AAAA,EACjD,GAAG,CAACA,CAAW,CAAC,GAEhBzsC,GAAU,MAAM;AACd,IAAA64B,EAAS,EAAE,MAAM,SAAS,SAAS6T,GAAc;AAAA,EACnD,GAAG,CAACA,CAAY,CAAC;AAEjB,QAAMn/B,IAAa,YAAY;AAC7B,UAAMo/B,IAAQ;AAAA,MACZ,QAAQj7C;AAAA,MACR,WAAWknC,EAAM,KAAK;AAAA,MACtB,UAAUA,EAAM,MAAM;AAAA,IAAA,GAElBxgB,IAAUg0B,GAAwBxT,EAAM,OAAOA,EAAM,IAAI,GACzDgU,IAAY;AAAA,MAChB,GAAGhU,EAAM;AAAA,MACT,GAAGxgB;AAAA,MACH,SAASwgB,EAAM,MAAM,UAAU;AAAA,MAC/B,GAAG+T;AAAA,MACH,KAAK,EAAE,GAAGA,EAAA;AAAA,IAAM;AAGlB,IAAAC,EAAU,OAAOA,EAAU,OAC3BA,EAAU,aAAaA,EAAU,MACjC,OAAOA,EAAU,OACjB,OAAOA,EAAU;AACjB,UAAM/6B,IAAM,MAAMo6B,GAAa,eAAeW,CAAS;AACvD,IAAA/T,EAAS,EAAE,MAAM,UAAU,SAAShnB,EAAI,QAAQ;AAAA,EAClD,GAEM0X,IAAc,MAAM;AACxB,IAAAsP,EAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS,EAAE,OAAO2T,GAAc,MAAMC,GAAa,OAAOC,EAAA;AAAA,IAAa,CACxE;AAAA,EACH,GAGMG,IACJ,gBAAApjD;AAAA,IAACiB;AAAA,IAAA;AAAA,MAEC,SAAQ;AAAA,MACR,SAAS6iB;AAAA,MACT,UACE,CAACkI,GAASmjB,EAAM,MAAM,UAAUA,EAAM,MAAM,UAAU,KAAK,KAC3DzqB,GAAW,KAAK,CAACvL,MAASA,EAAK,SAASg2B,EAAM,MAAM,IAAI;AAAA,MAE3D,UAAA;AAAA,IAAA;AAAA,IAPK;AAAA,EAAA,GAYFkU,sBACHpiD,GAAA,EAAuB,SAAQ,aAAY,SAAS6+B,GAAa,qBAAtD,WAEZ;AAIF,SACE,gBAAA/+B,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,IAAA,EAAS,KAAI,WACZ,UAAA,gBAAAzP;AAAA,MAACiB;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,SAAS,MAAMmuC,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,QAEtD,UAAA1gC,EAAO;AAAA,MAAA;AAAA,IAAA,GAEZ;AAAA,IACA,gBAAA1O;AAAA,MAACoiD;AAAA,MAAA;AAAA,QACC,MAAM,CAACgB,GAAYC,CAAW;AAAA,QAC9B,OAAM;AAAA,QACN,WAAW;AAAA,UACT,MAAMlU,EAAM;AAAA,UACZ,SAAS,CAAC9tC,MAAU+tC,EAAS,EAAE,MAAM,QAAQ,SAAS/tC,EAAA,CAAO;AAAA,QAAA;AAAA,QAE/D,OAAOy+B;AAAA,QAEP,4BAAC,OAAA,EACC,UAAA;AAAA,UAAA,gBAAA9/B;AAAA,YAAC0iD;AAAA,YAAA;AAAA,cACC,QAAQvT,EAAM;AAAA,cACd,SAAS,MAAMC,EAAS,EAAE,MAAM,UAAU,SAAS,MAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UAE3D,gBAAApvC,EAAC4hD,IAAA,EAAU,MAAMzS,EAAM,MAAA,CAAO;AAAA,QAAA,EAAA,CAChC;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;ACrKA,SAASmU,GAAO,EAAE,UAAAzjD,GAAU,SAAA2R,GAAS,cAAA+xC,KAAgB;AACnD,QAAMC,IAAiBD,IAAetjD,EAAK,MAAM,QAAQA,EAAK,OAExDse,IACJ,gBAAAve,EAACwjD,GAAA,EAAe,WAAU,gBAAgB,UAAA3jD,GAAS;AAGrD,SAAI2R,KAAW,QAAQ3M,GAAM,SAAS,MAAM2M,CAAO,MAAM,IAChD+M,IAIP,gBAAAve;AAAA,IAACmQ;AAAA,IAAA;AAAA,MACC,SAAS,gBAAAnQ,EAACoQ,IAAA,EAAS,UAAAoB,EAAA,CAAQ;AAAA,MAC3B,WAAU;AAAA,MACV,OAAO,EAAE,MAAM,KAAK,MAAM,IAAA;AAAA,MAEzB,UAAA+M;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA+kC,GAAO,YAAY;AAAA,EACjB,UAAUpjD,EAAU,KAAK;AAAA,EACzB,SAASA,EAAU;AAAA,EACnB,cAAcA,EAAU;AAC1B;AAEAojD,GAAO,eAAe;AAAA,EACpB,SAAS;AAAA,EACT,cAAc;AAChB;AC1BA,MAAMG,KAAc,CAACC,GAAar4B,MAAU;AAE1C,QAAMs4B,IAAet4B,EAAM,UAAU,CAACka,MAASA,EAAK,QAAQme,CAAW;AAGvE,MAAIC,MAAiB,GAAI,QAAO;AAGhC,QAAMC,KAAaD,IAAe,KAAKt4B,EAAM;AAG7C,SAAOA,EAAMu4B,CAAS;AACxB,GAeMC,KAAW,CAACn0B,IAAK,OAAO;AAC5B,QAAM4uB,IAAM5uB,EAAG,MAAM,IAAI,CAACxmB,wBACvB,OAAA,EACE,UAAA;AAAA,IAAAwkB,GAAWxkB,EAAE,KAAK;AAAA,sBAClB,MAAA,CAAA,CAAG;AAAA,EAAA,EAAA,GAFIoP,GAAA,CAGV,CACD;AACD,SACE,gBAAAvX,EAAC4nB,IAAA,EAAQ,IAAG,qCACV,UAAA;AAAA,IAAA,gBAAA3oB,EAAC2oB,GAAQ,QAAR,EAAe,IAAG,MAAK,UAAA,mBAAe;AAAA,IACvC,gBAAA3oB,EAAC2oB,GAAQ,MAAR,EAAc,UAAA21B,EAAA,CAAI;AAAA,EAAA,GACrB;AAEJ,GAEMwF,KAAY,CAACh/C,MAAU;AAC3B,QAAM,EAAE,MAAA8nB,GAAM,cAAAm3B,EAAA,IAAiBj/C,GACzB,EAAE,eAAe4qB,GAAI,cAAcs0B,MAAgBp3B,GAEnD+C,IADMC,GAAA,EACI,OAAO,CAAC1mB,MAAMA,EAAE,UAAUwmB,CAAE,EAAE,CAAC;AAC/C,MAAI,CAACC,KAAO,OAAO,KAAKA,CAAG,EAAE,WAAW,EAAG,QAAO;AAElD,QAAMs0B,IAAct0B,GAAK,MAAM,CAAC,GAC1B4V,IAAOxZ,GAAQ4D,EAAI,OAAOq0B,KAAeC,GAAa,GAAG;AAC/D,MAAI,CAAC1e,KAAQ,OAAO,KAAKA,CAAI,EAAE,WAAW,EAAG,QAAO;AAEpD,QAAMttB,IAAU,MAAM;AACpB,UAAMisC,IAAWT,GAAYle,EAAK,KAAK5V,EAAI,KAAK;AAChD,IAAAo0B,EAAa,EAAE,MAAMG,EAAS,IAAA,CAAK;AAAA,EACrC;AAEA,SACE,gBAAAnjD,EAACd,EAAK,OAAL,EAAW,IAAI0jB,IACd,UAAA;AAAA,IAAA,gBAAA3jB,EAACsjD,MACC,UAAA,gBAAAviD,EAAAsI,GAAA,EACG,UAAA;AAAA,MAAAmlB,GAAc,gBAAgB,EAAE;AAAA,MAAM;AAAA,MACtCA,GAAc,gBAAgB,EAAE;AAAA,IAAA,EAAA,CACnC,EAAA,CACF;AAAA,IACA,gBAAAxuB,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA,gBAAAA;AAAA,MAACmQ;AAAA,MAAA;AAAA,QACC,WAAS;AAAA,QACT,WAAU;AAAA,QACV,MAAI;AAAA,QACJ,SAAS,CAAC,SAAS,OAAO;AAAA,QAC1B,SAAS0zC,GAASl0B,CAAG;AAAA,QAErB,UAAA,gBAAA3vB,EAACiB,GAAA,EAAO,SAAAgX,GAAkB,SAAQ,WAAU,MAAK,MAC9C,UAAAyV,GAAW6X,EAAK,KAAK,KAAK,GAAA,CAC7B;AAAA,MAAA;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GACF;AAEJ;AAEAue,GAAU,YAAY;AAAA,EACpB,MAAM5jD,EAAU,OAAO;AAAA,EACvB,cAAcA,EAAU,KAAK;AAC/B;ACzFA,MAAMikD,KAAS,CAACl4B,GAAWm4B,IAAS,WAAW;AAC7C,QAAMj4B,IAAQC,GAAQH,CAAS;AAC/B,MAAI,CAACE,EAAO,QAAO;AACnB,QAAM,EAAE,OAAA5N,MAAU0N,GACZpD,IAAMu7B,MAAW,SAAS,KAAK,sCAC/BtwC,IAAUswC,MAAW,SAAS11C,EAAO,mBAAmB6P;AAE9D,SACE,gBAAAve,EAACyP,IAAA,EAAS,KAAK,aAAa8O,CAAK,IAC/B,UAAA,gBAAAve;AAAA,IAACiB;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAMkrB;AAAA,MACN,QAAO;AAAA,MACP,SAAS,CAACjjB,MAAMA,EAAE,gBAAA;AAAA,MAClB,WAAW2f;AAAA,MAEV,UAAA/U;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ,GCtBMuwC,KAAkB,CAAAr8C,MAAQ;AAC9B,MAAIA,GAAM;AACR,UAAMskB,IAAOtkB,EAAK,aAAa,KAAK,EAAE,KAAK;AAC3C,WAAO;AAAA,MACL,OAAOA,EAAK;AAAA,MACZ,OACE,gBAAAjH,EAAAsI,GAAA,EACG,UAAA;AAAA,QAAArB,EAAK;AAAA,0BACL,QAAA,EACC,UAAA;AAAA,UAAA,gBAAAhI,EAAC,QAAA,EAAK,WAAU,uCACb,UAAAgI,EAAK,YACR;AAAA,UAAO;AAAA,UAEP,gBAAAhI,EAAC,QAAA,EAAK,WAAU,wCACb,YAAK,iBACR;AAAA,UACCssB,IACC,gBAAAvrB,EAAAsI,GAAA,EACE,UAAA;AAAA,YAAA,gBAAArJ,EAAC,MAAA,EAAG;AAAA,8BACH,QAAA,EAAK,OAAO,EAAE,UAAU,OAAA,GAAW,UAAAssB,EAAA,CAAK;AAAA,UAAA,EAAA,CAC3C,IACE;AAAA,QAAA,EAAA,CACN;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAGN;AACA,SAAOtkB;AACT,GAEMs8C,KAAmB,CAAAt8C,MAClBA,IAGEA,EAAK,IAAI,CAAAgjB,MACC,OAAO,OAAOq5B,GAAgBr5B,CAAC,GAAG,EAAE,MAAMA,GAAG,CAE7D,IALQ,CAAA,GAQLu5B,KAAiB,CAAAz/C,MAAS;AAC9B,QAAM,EAAE,YAAA0/C,GAAY,cAAAC,EAAA,IAAiB3/C,GAC/B,GAAG4/C,CAAO,IAAI50C,EAAS,IAAI,GAE3B60C,IAAY,OAAMC,MAAc;AACpC,QAAI;AACF,UAAI,CAACA,EAAW,KAAA,KAAUA,EAAW,SAAS;AAC5C,eAAO,CAAA;AAGT,YAAMj9B,IAAW,MAAM,MAAMk9B,GAASD,CAAU,CAAC;AACjD,UAAI,CAACj9B,EAAS;AACZ,cAAM,IAAI,MAAM,wBAAwB;AAE1C,YAAM6mB,IAAS,MAAM7mB,EAAS,KAAA;AAC9B,aAAO28B,GAAiB9V,GAAQ,UAAU,IAAI;AAAA,IAChD,SAAS1mB,GAAO;AACd,qBAAQ,MAAM,wBAAwBA,CAAK,GACpC,CAAA;AAAA,IACT;AAAA,EACF;AAEA,SAAAvR,GAAU,MAAM;AACd,IAAAouC,EAAU,EAAE,EAAE,KAAKD,CAAO;AAAA,EAC5B,GAAG,CAAA,CAAE,GAGH,gBAAA1kD;AAAA,IAAC8kD;AAAA,IAAA;AAAA,MACC,kBAAgB;AAAA,MAChB,aAAW;AAAA,MACX,OAAOL;AAAA,MACP,UAAS;AAAA,MACT,UAAS;AAAA,MACT,aAAa,CAACG,GAAYvoC,MAAa;AACrC,QAAAsoC,EAAUC,CAAU,EAAE,KAAK,CAAAj2B,MAAWtS,EAASsS,CAAO,CAAC;AAAA,MACzD;AAAA,MACA,UAAU,CAAAqR,MAAY;AACpB,QAAAwkB,EAAWxkB,CAAQ;AAAA,MACrB;AAAA,MACA,QAAQ;AAAA,QACN,WAAW,CAAA+kB,OACF;AAAA,UACL,GAAGA;AAAA,UACH,OAAO;AAAA,QAAA;AAAA,QAGX,SAAS,CAAArzC,OACA;AAAA,UACL,GAAGA;AAAA,UACH,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,UAAU;AAAA,UACV,QAAQ;AAAA,QAAA;AAAA,MAEZ;AAAA,IACF;AAAA,EAAA;AAGN,GCjGaszC,KAAsB,CAAAlgD,MAAS;AAC1C,QAAM,EAAE,WAAAoD,GAAW,gBAAA+8C,EAAA,IAAmBngD,GAChC,EAAE,MAAAqD,GAAM,SAAAC,EAAA,IAAYF;AAE1B,SACE,gBAAAnH,EAACuI,GAAA,EAAM,UAAQ,IAAC,UAAS,UAAS,MAAAnB,GAAY,QAAQ,MAAMC,EAAQ,EAAK,GACvE,UAAA;AAAA,IAAA,gBAAApI,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,4BAACA,EAAM,OAAN,EAAY,UAAA,cAAA,CAAW,EAAA,CAC1B;AAAA,IACA,gBAAAtJ,EAACsJ,EAAM,MAAN,EAAY,UAAA27C,EAAA,CAAe;AAAA,EAAA,GAC9B;AAEJ;AAEAD,GAAoB,YAAY;AAAA,EAC9B,gBAAgB9kD,EAAU,QAAQ;AAAA,EAClC,WAAWA,EAAU,OAAO;AAC9B;AAEO,MAAMglD,KAAuB,CAAApgD,MAAS;AAC3C,QAAM,EAAE,gBAAAmgD,GAAgB,aAAAE,EAAA,IAAgBrgD,GAClC,CAACqD,GAAMC,CAAO,IAAI0H,EAAS,EAAK;AAMtC,SACE,gBAAA/O,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ;AAAA,MAACmQ;AAAA,MAAA;AAAA,QACC,WAAS;AAAA,QACT,WAAU;AAAA,QACV,MAAI;AAAA,QACJ,SAAS,CAAC,SAAS,SAAS,OAAO;AAAA,QACnC,SAXJ,gBAAAnQ,EAAC2oB,IAAA,EAAQ,IAAG,qCACV,4BAAC,OAAA,EAAI,WAAU,OAAM,UAAA,+BAAA,CAA4B,GACnD;AAAA,QAWI,UAAA,gBAAA5nB;AAAA,UAACE;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,SAAS,MAAMmH,EAAQ,EAAI;AAAA,YAC3B,WAAU;AAAA,YAET,UAAA;AAAA,cAAA+8C,sBACE,QAAA,EACC,UAAA;AAAA,gBAAA,gBAAAnlD,EAAC,UAAK,OAAO,EAAE,OAAO,QAAA,GAAY,YAAO,eAAc;AAAA,gBAAO;AAAA,cAAA,EAAA,CAEhE,IACE;AAAA,cAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAEX;AAAA,IAAA;AAAA,IAEF,gBAAAA;AAAA,MAACglD;AAAA,MAAA;AAAA,QACC,gBAAAC;AAAA,QACA,WAAW,EAAE,MAAA98C,GAAM,SAAAC,EAAA;AAAA,MAAQ;AAAA,IAAA;AAAA,EAC7B,GACF;AAEJ,GClDMg9C,KAAe;AAAA,EACnB,EAAE,OAAO,GAAG,OAAO,IAAA;AAAA,EACnB,EAAE,OAAO,GAAG,OAAO,IAAA;AAAA,EACnB,EAAE,OAAO,GAAG,OAAO,IAAA;AAAA,EACnB,EAAE,OAAO,GAAG,OAAO,IAAA;AAAA,EACnB,EAAE,OAAO,GAAG,OAAO,IAAA;AAAA,EACnB,EAAE,OAAO,GAAG,OAAO,IAAA;AACrB,GAEaC,KAAc,MACzB,gBAAArlD,EAACC,EAAK,OAAL,EAAW,IAAI0jB,IACd,UAAA,gBAAA3jB,EAACsjD,IAAA,EAAO,UAAA,IAAA,CAAM,EAAA,CAChB,GAsBWgC,KAAwB,CAAC,EAAE,aAAA9jB,QACtC,CAAC/nB,EAAW,OAAO,EAAE,SAAS+nB,EAAY,IAAI,IAC5C,gBAAAzgC,EAACd,EAAK,OAAL,EAAW,IAAI0jB,IACd,UAAA;AAAA,EAAA,gBAAA3jB,EAACsjD,MACC,UAAA,gBAAAviD,EAAAsI,GAAA,EAAE,UAAA;AAAA,IAAA;AAAA,IAAEm4B,EAAY;AAAA,IAAK;AAAA,EAAA,EAAA,CAAC,EAAA,CACxB;AAAA,EACA,gBAAAxhC;AAAA,IAACC,EAAK;AAAA,IAAL;AAAA,MACC,MAAK;AAAA,MACL,MAAM,KAAKuhC,EAAY,KAAK;AAAA,MAC5B,cAAc,GAAGA,EAAY,IAAI,0BAA0BA,EAAY,KAAK;AAAA,MAC5E,UAAQ;AAAA,IAAA;AAAA,EAAA;AACV,EAAA,CACF,IACE,MAEO+jB,KAAkB,CAAC;AAAA,EAC9B,OAAA1+C;AAAA,EACA,aAAA26B;AAAA,EACA,OAAAp7B;AAAA,EACA,UAAAurC;AAAA,EACA,aAAA6T;AACF,MACE,gBAAAzkD,EAACd,EAAK,OAAL,EAAW,IAAI0jB,IACd,UAAA;AAAA,EAAA,gBAAA3jB,EAACsjD,MACC,UAAA,gBAAAviD,EAAAsI,GAAA,EACG,UAAA;AAAA,IAAAmlB,GAAcpoB,CAAK,EAAE;AAAA,IAAM;AAAA,IAC3BooB,GAAcpoB,CAAK,EAAE;AAAA,EAAA,EAAA,CACxB,EAAA,CACF;AAAA,EACA,gBAAArF,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,IAAA,gBAAAf;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,MAAK;AAAA,QACL,MAAM,KAAKmG,CAAK;AAAA,QAChB,cAAco7B,EAAYp7B,CAAK;AAAA,QAC/B,UAAUA,MAAU;AAAA,QACpB,UAAU,CAAC8R,MACTy5B;AAAA,UACEz5B;AAAA,UACAspB,EAAYp7B,CAAK;AAAA,UACjBo7B,EAAY;AAAA,UACZ36B,EAAM;AAAA,UACNT;AAAA,UACAqT,EAAW;AAAA,QAAA;AAAA,QAGf,WAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAEZ,gBAAAzZ;AAAA,MAACklD;AAAA,MAAA;AAAA,QACC,gBACE,gBAAAllD;AAAA,UAACukD;AAAA,UAAA;AAAA,YACC,YAAYiB;AAAA,YACZ,cAAchkB,GAAa;AAAA,UAAA;AAAA,QAAA;AAAA,QAG/B,aAAaA,GAAa,WAAW,yBAAyB;AAAA,MAAA;AAAA,IAAA;AAAA,EAChE,EAAA,CACF;AAAA,GACF,GAGWikB,KAAuB,CAAC;AAAA,EACnC,OAAA5+C;AAAA,EACA,aAAA26B;AAAA,EACA,OAAAp7B;AAAA,EACA,UAAAurC;AAAA,EACA,IAAA+T;AACF,MACE,CAACjsC,EAAW,OAAO,EAAE,SAAS+nB,EAAY,IAAI,IAAI,yBAC/CvhC,EAAK,OAAL,EAAW,IAAI0jB,IAAK,IAAA+hC,GACnB,UAAA;AAAA,EAAA,gBAAA1lD,EAACsjD,MACC,UAAA,gBAAAviD,EAAAsI,GAAA,EACG,UAAA;AAAA,IAAAmlB,GAAcpoB,CAAK,EAAE;AAAA,IAAM;AAAA,IAC3BooB,GAAcpoB,CAAK,EAAE;AAAA,EAAA,EAAA,CACxB,EAAA,CACF;AAAA,EACA,gBAAApG;AAAA,IAACC,EAAK;AAAA,IAAL;AAAA,MACC,MAAK;AAAA,MACL,MAAM,KAAKmG,CAAK;AAAA,MAChB,cAAco7B,EAAYp7B,CAAK;AAAA,MAC/B,UAAUA,MAAU;AAAA,MACpB,UAAU,CAAC8R,MACTy5B;AAAA,QACEz5B;AAAA,QACAspB,EAAYp7B,CAAK;AAAA,QACjBo7B,EAAY;AAAA,QACZ36B,EAAM;AAAA,QACNT;AAAA,QACAqT,EAAW;AAAA,MAAA;AAAA,IACb;AAAA,EAAA;AAEJ,GACF,GAGSksC,KAAc,CAAC;AAAA,EAC1B,OAAA9+C;AAAA,EACA,aAAA26B;AAAA,EACA,UAAAmQ;AAAA,EACA,OAAAvrC;AAAA,EACA,MAAAw/C;AAAA,EACA,UAAAlyC,IAAW;AAAA,EACX,SAAAmyC,IAAU;AAAA,EACV,IAAAH;AAAA,EACA,WAAAI,IAAY;AACd,MAAM;AACJ,QAAMvnC,IACJ,gBAAAxd,EAAAsI,GAAA,EACG,UAAA;AAAA,IAAAmlB,GAAcpoB,CAAK,EAAE;AAAA,IAAM;AAAA,IAC3BooB,GAAcpoB,CAAK,EAAE;AAAA,EAAA,GACxB;AAEF,2BACGnG,EAAK,OAAL,EAAW,IAAI0jB,IAAK,IAAA+hC,GAClB,UAAA;AAAA,IAAA,CAACI,KACA,gBAAA9lD,EAACsjD,IAAA,EACE,cAAU/kC,IAAQ,gBAAAve,EAAAqJ,GAAA,EAAE,eAAM,EAAA,CAC7B;AAAA,IAEF,gBAAAtI,EAACd,EAAK,OAAL,EAAW,MAAK,YAAW,IAAI,UAAU4G,EAAM,GAAG,MAAMT,CAAK,IAC5D,UAAA;AAAA,MAAA,gBAAApG;AAAA,QAACC,EAAK,MAAM;AAAA,QAAX;AAAA,UACC,WAAU;AAAA,UACV,MAAK;AAAA,UACL,SAAS,CAAC,CAACuhC,EAAYp7B,CAAK;AAAA,UAC5B,UAAAsN;AAAA,UACA,UAAU,CAACwE,MACTy5B;AAAA,YACEz5B;AAAA,YACAspB,EAAYp7B,CAAK,KAAK;AAAA,YACtBo7B,EAAY;AAAA,YACZ36B,EAAM;AAAA,YACNT;AAAA,YACA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,MAGHy/C,IAAU,OACT,gBAAA7lD,EAACC,EAAK,MAAM,OAAX,EAAiB,WAAU,QAC1B,UAAA,gBAAAD,EAAC,KAAA,EAAG,UAAAue,EAAA,CAAM,EAAA,CACZ;AAAA,IAAA,GAEJ;AAAA,IACCqnC,KAAQ,gBAAA5lD,EAACC,EAAK,MAAL,EAAU,WAAU,cAAc,UAAA2lD,EAAA,CAAK;AAAA,EAAA,GACnD;AAEJ,GAEaG,KAAiB,CAAC,EAAE,OAAAl/C,GAAO,aAAA26B,GAAa,OAAAp7B,GAAO,UAAAurC,EAAA,MAC1D,gBAAA5wC,EAACd,EAAK,OAAL,EAAW,IAAI0jB,IACd,UAAA;AAAA,EAAA,gBAAA3jB,EAACsjD,MACC,UAAA,gBAAAviD,EAAAsI,GAAA,EACG,UAAA;AAAA,IAAAmlB,GAAcpoB,CAAK,EAAE;AAAA,IAAM;AAAA,IAC3BooB,GAAcpoB,CAAK,EAAE;AAAA,EAAA,EAAA,CACxB,EAAA,CACF;AAAA,EACA,gBAAApG,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,OAAA,GACrB,UAAA,gBAAAA,EAAC,QAAA,EAAK,OAAO,EAAE,OAAO,UACpB,UAAA,gBAAAA;AAAA,IAAC81B;AAAA,IAAA;AAAA,MACC,QAAQrH;AAAA,MACR,MAAMroB;AAAA,MACN,OAAO;AAAA,MACP,SAASg/C;AAAA,MACT,OAAOA,GAAa;AAAA,QAClB,CAAC73B,MAAMA,EAAE,WAAWiU,EAAYp7B,CAAK,KAAKS,EAAM;AAAA,MAAA;AAAA,MAElD,UAAU,CAACqR,MACTy5B;AAAA,QACEz5B;AAAA,QACAspB,EAAYp7B,CAAK;AAAA,QACjBo7B,EAAY;AAAA,QACZ36B,EAAM;AAAA,QACN;AAAA,QACA;AAAA,MAAA;AAAA,MAGJ,eAAc;AAAA,MACd,kBAAkB,SAAS;AAAA,IAAA;AAAA,EAAA,GAE/B,EAAA,CACF;AAAA,GACF,GAGWm/C,KAAe,CAAC,EAAE,OAAAn/C,GAAO,aAAA26B,GAAa,UAAAmQ,GAAU,IAAA+T,EAAA,MAC3D,CAACjsC,EAAW,eAAe,EAAE,SAAS+nB,EAAY,IAAI,IAClDmkB,GAAY;AAAA,EACV,OAAA9+C;AAAA,EACA,aAAA26B;AAAA,EACA,UAAAmQ;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,IAAA+T;AACF,CAAC,IACD,MAEOO,KAAe,CAAC,EAAE,OAAAp/C,GAAO,aAAA26B,GAAa,UAAAmQ,QACjD;AAAA,EACEl4B,EAAW;AAAA,EACXA,EAAW;AAAA;AAEb,EAAE,SAAS+nB,EAAY,IAAI,IACvB,OACAmkB,GAAY;AAAA,EACV,OAAA9+C;AAAA,EACA,aAAA26B;AAAA,EACA,UAAAmQ;AAAA,EACA,OAAO;AAAA,EACP,UAAUl4B,EAAW,qBAAqB+nB,EAAY;AACxD,CAAC,GAEM0kB,KAAiB,CAAC,EAAE,OAAAr/C,GAAO,aAAA26B,GAAa,UAAAmQ,GAAU,IAAA+T,QAC7D,CAACjsC,EAAW,WAAWA,EAAW,MAAM,EAAE,SAAS+nB,EAAY,IAAI,IAC/DmkB,GAAY;AAAA,EACV,OAAA9+C;AAAA,EACA,aAAA26B;AAAA,EACA,UAAAmQ;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV,WAAW;AAAA,EACX,IAAA+T;AAAA;AAEF,CAAC,IACD,MAEOS,KAAiB,CAAC,EAAE,OAAAt/C,GAAO,aAAA26B,GAAa,UAAAmQ,EAAA,MACnD,CAACl4B,EAAW,MAAM,EAAE,SAAS+nB,EAAY,IAAI,IACzCmkB,GAAY;AAAA,EACV,OAAA9+C;AAAA,EACA,aAAA26B;AAAA,EACA,UAAAmQ;AAAA,EACA,OAAO;AAAA,EACP,MAAM;AAAA,EACN,WAAW;AAAA;AAEb,CAAC,IACD,MAEOyU,KAAkB,CAAC;AAAA,EAC9B,OAAAv/C;AAAA,EACA,aAAA26B;AAAA,EACA,UAAAmQ;AAAA,EACA,UAAA0U;AAAA,EACA,IAAAX;AACF,MACM,CAACjsC,EAAW,OAAO,EAAE,SAAS+nB,EAAY,IAAI,IAAU,yBAGzDvhC,EAAK,OAAL,EAAW,IAAI0jB,IAAK,IAAA+hC,GACnB,UAAA;AAAA,EAAA,gBAAA1lD,EAACsjD,MACC,UAAA,gBAAAviD,EAAAsI,GAAA,EACG,UAAA;AAAA,IAAAmlB,GAAc,MAAM,EAAE;AAAA,IAAM;AAAA,IAC5BA,GAAc,MAAM,EAAE;AAAA,IACvB,gBAAAztB,EAAC,QAAA,EAAK,WAAU,qCACb,UAAA;AAAA,MAAA2N,EAAO;AAAA,MAAsB;AAAA,IAAA,EAAA,CAEhC;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAAA,EACA,gBAAA1O,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,SAAA,GACzC,4BAAC,QAAA,EAAK,OAAO,EAAE,OAAO,UACpB,UAAA,gBAAAA;AAAA,IAAC81B;AAAA,IAAA;AAAA,MACC,QAAQrH;AAAA,MACR,MAAM+S,EAAY;AAAA,MAClB,OAAO;AAAA,MACP,SAAS6kB;AAAA,MACT,OAAOA,GAAU,KAAK,CAAC94B,MAAMA,EAAE,UAAUiU,EAAY,IAAI;AAAA,MACzD,UAAU,CAACtpB,MACTy5B;AAAA,QACEz5B;AAAA,QACAspB,EAAY;AAAA,QACZA,EAAY;AAAA,QACZ36B,EAAM;AAAA,QACN;AAAA,QACA;AAAA,MAAA;AAAA,MAGJ,eAAc;AAAA,MACd,kBAAkB,SAAS;AAAA,IAAA;AAAA,EAAA,GAE/B,EAAA,CACF;AAAA,GACF,GAISy/C,KAAoB,CAAC;AAAA,EAChC,OAAAz/C;AAAA,EACA,aAAA26B;AAAA,EACA,OAAAp7B;AAAA,EACA,UAAAurC;AAAA,EACA,IAAA+T;AACF,wBACGzlD,EAAK,OAAL,EAAW,IAAI0jB,IAAK,IAAA+hC,GACnB,UAAA;AAAA,EAAA,gBAAA1lD,EAACsjD,MACC,UAAA,gBAAAviD,EAAAsI,GAAA,EACG,UAAA;AAAA,IAAAmlB,GAAcpoB,CAAK,EAAE;AAAA,IAAM;AAAA,IAC3BooB,GAAcpoB,CAAK,EAAE;AAAA,EAAA,EAAA,CACxB,EAAA,CACF;AAAA,EACA,gBAAApG;AAAA,IAACC,EAAK;AAAA,IAAL;AAAA,MACC,MAAK;AAAA,MACL,MAAM,UAAU4G,EAAM,GAAG,MAAM26B,EAAY,KAAK;AAAA,MAChD,OAAOA,EAAY;AAAA,MACnB,UAAU,CAACtpB,MACTy5B;AAAA,QACEz5B;AAAA,QACAspB,EAAY;AAAA,QACZA,EAAY;AAAA,QACZ36B,EAAM;AAAA,QACNT;AAAA,QACAqT,EAAW;AAAA,MAAA;AAAA,MAGf,KAAK;AAAA,IAAA;AAAA,EAAA;AACP,GACF,GC7VI8sC,KAAc1hD,GAAM;AAAA,EACxB,CAAC,EAAE,MAAAmB,GAAM,OAAOszB,GAAK,UAAUC,GAAK,UAAAitB,IAAW,SAAY;AAEzD,UAAM,CAAC,EAAE,YAAA1nC,EAAA,GAAcoB,CAAI,IAAIE,GAAQ;AAAA,MACrC,MAAApa;AAAA,MACA,MAAM,EAAE,KAAAszB,GAAK,KAAAC,EAAA;AAAA,MACb,SAAS,CAACta,OAED;AAAA,QACL,YAFeA,EAAQ,WAAA;AAAA,MAEX;AAAA,IAEhB,CACD,GAEKnf,IAAY,GAAGgf,IAAa,oBAAoB,EAAE,IAElD2nC,IAAc;AAAA,MAClB,QAAQ3nC,IAAa,aAAa;AAAA,MAClC,QAAQ;AAAA,MACR,UAAU;AAAA;AAAA,IAAA;AAkBZ,WAAO0nC,IAbL,gBAAAxmD;AAAA,MAACiB;AAAA,MAAA;AAAA,QACC,KAAKif;AAAA,QACL,WAAU;AAAA,QACV,OAAOumC;AAAA,QACP,SAAQ;AAAA,QACR,SAAS,CAACv9C,MAAM;AACd,UAAAA,EAAE,gBAAA;AAAA,QACJ;AAAA,QAEA,UAAA,gBAAAlJ,EAAC,OAAA,EAAI,WAAU,gBAAgB,YAAO,wBAAA,CAAwB;AAAA,MAAA;AAAA,IAAA,IAOhE,gBAAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,cAAc,MAAM,QAAQ,IAAI,gBAAgBs5B,GAAK,KAAK;AAAA,QAC1D,cAAc,MAAM,QAAQ,IAAI,gBAAgBA,GAAK,KAAK;AAAA,QAC1D,KAAKpZ;AAAA,QAEL,WAAW,aAAapgB,CAAS;AAAA,QAGjC,OAAO2mD;AAAA,QAEP,UAAA,gBAAAzmD,EAAC,SAAI,WAAU,wBACb,4BAAC,QAAA,EAAM,UAAA0O,EAAO,yBAAwB,EAAA,CACxC;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEA63C,GAAY,YAAY;AAAA,EACtB,MAAMrmD,EAAU,OAAO;AAAA,EACvB,OAAOA,EAAU,OAAO;AAAA,EACxB,UAAUA,EAAU,OAAO;AAAA,EAC3B,UAAUA,EAAU;AACtB;AAEAqmD,GAAY,eAAe;AAAA,EACzB,UAAU;AACZ;AAEAA,GAAY,cAAc;AC/E1B,MAAAG,KAAe;AAAA,EAEb,aAAa;AACf,GCCMC,KAAgB,CAACC,GAAeC,GAAgBC,MAAmB;AACvE,QAAMtY,IAAS,CAAA;AACf,MAAIhW,IAAS,IAAIpgB,GAAA;AACjB,EAAAwuC,EAAc,IAAI,CAAA19C,MAAK,OAAO,OAAOsvB,GAAQ,EAAE,CAACtvB,EAAE,EAAE,GAAG,GAAA,CAAI,CAAC;AAC5D,QAAM69C,IAAkB,OAAO,KAAKvuB,CAAM,GACpCwuB,IAAoB,OAAO,KAAKF,EAAe,CAAC,CAAC,GACjDG,IAAeD,EAAkB,OAAO,CAAA99C,MAAK,CAAC69C,EAAgB,SAAS79C,CAAC,CAAC,GACzEg+C,IAAU,CAAA;AAChB,SAAAN,EAAc,IAAI,CAAAtjC,MACZA,EAAE,SAAS7J,EAAW,SAAe,OAAO,OAAOytC,GAAS,EAAE,CAAC5jC,EAAE,EAAE,GAAG,IAAI,IACvE,OAAO,OAAO4jC,GAAS,EAAE,CAAC5jC,EAAE,EAAE,GAAG,EAAE,OAAO,IAAI,cAAcA,EAAE,aAAA,GAAgB,CACtF,GACDwjC,EAAe,QAAQ,CAAA59C,MAAK;AAC1B,IAAAsvB,IAAS,IAAIpgB,GAAA,GACb,OAAO,OAAOogB,GAAQ0uB,GAASh+C,CAAC,GAChC+9C,EAAa,QAAQ,CAAA3jC,MAAK,OAAOkV,EAAOlV,CAAC,CAAC,GAC1C0jC,EAAkB,QAAQ,CAAAG,MAAU;AAClC,UAAI3uB,EAAO2uB,CAAM,MAAM,UAAaA,MAAW,KAAM;AACrD,YAAMC,IAAOR,EAAc,KAAK,CAAAriD,MAAKA,EAAE,OAAO4iD,CAAM,GAC9Clf,IAAO4e,EAAe,KAAK,CAAAtiD,MAAKA,EAAE,OAAO4iD,CAAM;AACrD,MAAIC,EAAK,SAAS3tC,EAAW,mBACvB,CAACA,EAAW,QAAQA,EAAW,kBAAkBA,EAAW,aAAa,EAAE,SAASwuB,EAAK,IAAI,MAC/FzP,EAAO2uB,CAAM,IAAI,EAAE,OAAO,OAAA,IAG1BC,EAAK,SAAS3tC,EAAW,WACvBwuB,EAAK,SAASxuB,EAAW,qBAC3B+e,EAAO2uB,CAAM,IAAI3uB,EAAO2uB,CAAM,EAAE,QAE9B,CAAC1tC,EAAW,iBAAiBA,EAAW,aAAa,EAAE,SAASwuB,EAAK,IAAI,MAC3EzP,EAAO2uB,CAAM,IAAI,MAGjBC,EAAK,SAAS3tC,EAAW,qBACvBwuB,EAAK,SAASxuB,EAAW,oBAAqB2tC,EAAK,kBAAkBnf,EAAK,kBAC5EzP,EAAO2uB,CAAM,EAAE,eAAeC,EAAK,eAEjC,CAAC3tC,EAAW,QAAQA,EAAW,iBAAiBA,EAAW,aAAa,EAAE,SAASwuB,EAAK,IAAI,MAC9FzP,EAAO2uB,CAAM,IAAI,EAAE,OAAO,IAAI,cAAcC,EAAK,aAAA,IAEnD5uB,EAAO2uB,CAAM,EAAE,QAAQ17B,GAAe27B,EAAK,eAAe5uB,EAAO2uB,CAAM,EAAE,cAAc3uB,EAAO2uB,CAAM,EAAE,KAAK;AAAA,IAE/G,CAAC,GACD3Y,EAAO,KAAKhW,CAAM;AAAA,EACpB,CAAC,GACMgW;AACT,GAEM6Y,KAAoB,CAACjlD,GAAKklD,MAAQ;AACtC,QAAMV,IAAgB1hD,EAAU9C,EAAI,cAAc,CAAA,CAAE,GAC9CykD,IAAiB3hD,EAAUoiD,EAAI,cAAc,CAAA,CAAE,GAC/CR,IAAiB5hD,EAAUoiD,EAAI,cAAc,CAAA,CAAE;AACrD,SAAIV,EAAc,SAAS,KACtBC,EAAe,SAAS,KAAKC,EAAe,SAAS,IACjD,CAAA,IAEFH,GAAcC,GAAeC,GAAgBC,CAAc;AACpE,GC/CaS,KAAe,CAACC,GAAGC,MACvBC,GAAU,CAAA,GAAIF,GAAGC,GAAG,CAACE,GAAUC,MAAa;AACjD,MAAIC,GAAQF,CAAQ,KAAKE,GAAQD,CAAQ;AAGvC,WADiB,CAAC,GAAGD,GAAU,GAAGC,CAAQ,EAC1B;AAAA,MACd,CAACjhC,GAAQ9R,GAAOizC,MACdjzC,MAAUizC,EAAK,UAAU,CAACv6B,MAAMA,EAAE,QAAQ5G,EAAO,GAAG;AAAA,IAAA;AAK5D,CAAC,GAIUohC,KAAU,CAAC/jD,GAASkC,MAAU;AACzC,MACE,CAAClC,KACD,OAAO,KAAKkC,KAAS,CAAA,CAAE,EAAE,SAAS,KAClC,CAAClC,EAAQ,cACT,CAACkC,EAAM;AAEP,WAAO,CAAC,QAAW,MAAS;AAE9B,QAAM8hD,IAAW9iD,EAAUgB,EAAM,kBAAkB;AACnD,EAAA8hD,EAAS,QAAQhkD,EAAQ,WAAW,OACpCgkD,EAAS,aAAa9hD,EAAM;AAC5B,QAAM+hD,IAAwBD,EAAS,kBAAkB,CAAA;AACzD,gBAAO,KAAKA,EAAS,MAAM,EAAE,QAAQ,CAAC/gD,MAAQ;AAC5C,UAAMihD,IAAWF,EAAS,OAAO/gD,CAAG,KAAK,CAAA;AACzC,IAAAihD,EAAS,KAAKlkD,EAAQ,WAAW,OAAOiD,CAAG,GAAG,MAAM,CAAA,GAChDjD,EAAQ,WAAW,OAAOiD,CAAG,GAAG,eAClCihD,EAAS,aAAalkD,EAAQ,WAAW,OAAOiD,CAAG,GAAG;AAExD,UAAMkhD,IACHnkD,EAAQ,WAAW,OAAOiD,CAAG,KAC5BjD,EAAQ,WAAW,OAAOiD,CAAG,EAAE,UACjC,CAAA;AACF,KAACihD,EAAS,UAAU,CAAA,GAAI,QAAQ,CAAC3jD,GAAGgV,MAAQ;AAC1C,YAAM6uC,IAAS96B,GAAU66B,GAAW,CAAC56B,MAAMA,EAAE,UAAUhpB,EAAE,KAAK,GACxD8jD,IAAeL,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE;AAGtD,UAAI6uC,MAAW,MAAMC,MAAiB5uC,EAAW,YAAY;AAC3D,cAAM6uC,IAAeN,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE;AACtD,QAAkC+uC,KAAiB,SACjDN,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,QAAQ;AAAA,MAE7C;AAEA,UAAI6uC,KAAU,GAAG;AACf,cAAMG,IAASvkD,EAAQ,WAAW,OAAOiD,CAAG,EAAE,OAAOmhD,CAAM,EAAE,OACvDI,IAAU,OAAOD;AACvB,YAAIF,MAAiB5uC,EAAW;AAC9B,cACEzV,EAAQ,WAAW,OAAOiD,CAAG,EAAE,OAAOmhD,CAAM,EAAE,SAASC;AAEvD,YAAAL,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,aAAa,CAAA;AAAA,eACzC;AACL,kBAAMkvC,IACJzkD,EAAQ,WAAW,OAAOiD,CAAG,EAAE,OAAOmhD,CAAM,EAAE,cAAc,CAAA;AAC9D,YAAAJ,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,aAAakvC;AAAA,UAChD;AAaF,YAVE;AAAA,UACEhvC,EAAW;AAAA,UACXA,EAAW;AAAA,UACXA,EAAW;AAAA,UACXA,EAAW;AAAA,QAAA,EACX,SAAS4uC,CAAY,MAEvBL,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,QAC/BivC,MAAY/uC,EAAW,eAAe8uC,KAAU,IAAI,aAAa,KAEjEF,MAAiB5uC,EAAW;AAE9B,cADAuuC,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,QAAQ,IAEvCvV,EAAQ,WAAW,OAAOiD,CAAG,EAAE,OAAOmhD,CAAM,EAAE,SAASC;AAEvD,YAAAL,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,aAAa,CAAA;AAAA,eACzC;AACL,kBAAMmvC,IACJV,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,eAC7BovC,KACHV,EAAsBS,CAAe,KAAK,CAAA,GAAI,WAAW,CAAA;AAC5D,gBAAIC,EAAW,SAAS;AACtB,cAAAX,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,aAAa,CAAA;AAAA,iBACzC;AACL,oBAAMqvC,IAAiB,IAAI,IAAID,EAAW,IAAI,CAACp7B,MAAMA,EAAE,GAAG,CAAC,GACrDk7B,IACJzkD,EAAQ,WAAW,OAAOiD,CAAG,EAAE,OAAOmhD,CAAM,EAAE,cAAc,CAAA;AAC9D,cAAAJ,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,aAAakvC,EAAM;AAAA,gBAAO,CAACxnB,MAC1D2nB,EAAe,IAAI3nB,EAAG,KAAK;AAAA,cAAA;AAAA,YAE/B;AAAA,UACF;AAEF,YAAIonB,MAAiB5uC,EAAW,WAAW;AACzC,gBAAMovC,IACJL,MAAY/uC,EAAW,eACvB+uC,MAAY/uC,EAAW,aACvB,MAAM8uC,CAAM;AACd,UAAAP,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,QAAQsvC,IACrC,IACA,SAASN,GAAQ,EAAE;AAAA,QACzB;AAuBA,YAtBIF,MAAiB5uC,EAAW,eACF8uC,KAAW,OACrCP,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,QAAQ,KAEzCyuC,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,QAAQ9W,GAAO8lD,CAAM,KAIvDF,MAAiB5uC,EAAW,kBAC3BzV,EAAQ,WAAW,OAAOiD,CAAG,EAAE,OAAOmhD,CAAM,EAAE,SAC5C3uC,EAAW,kBACd4uC,MAAiB5uC,EAAW,iBAC3BzV,EAAQ,WAAW,OAAOiD,CAAG,EAAE,OAAOmhD,CAAM,EAAE,SAC5C3uC,EAAW,iBACd4uC,MAAiB5uC,EAAW,mBAC3BzV,EAAQ,WAAW,OAAOiD,CAAG,EAAE,OAAOmhD,CAAM,EAAE,SAC5C3uC,EAAW,mBACf4uC,MAAiB5uC,EAAW,eAExB,OAAO8uC,IAAW,QACpBP,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,QAAQgvC,IAEzCF,MAAiB5uC,EAAW,kBAAkB;AAChD,gBAAM4R,IAAQC;AAAA,YACZ08B,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE;AAAA,UAAA,GAE7B4d,IAAK9L,EAAM;AAAA,YACf,CAACG,MACCA,EAAE,QACFxnB,EAAQ,WAAW,OAAOiD,CAAG,EAAE,OAAOmhD,CAAM,EAAE;AAAA,UAAA;AAElD,UAAAJ,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,eAC9B4d,KAAMA,EAAG,OAAQ9L,EAAM,CAAC,EAAE,KACzBk9B,MACFP,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,QAAQlX,GAAMkmD,CAAM;AAAA,QAEzD;AACA,YAAIF,MAAiB5uC,EAAW;AAC9B,cACEzV,EAAQ,WAAW,OAAOiD,CAAG,EAAE,OAAOmhD,CAAM,EAAE,SAASC;AAEvD,YAAAL,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,QAAQ;AAAA,eACpC;AACL,kBAAMuvC,IAAQd,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,cAAc,CAAA,GACvDkvC,IACJzkD,EAAQ,WAAW,OAAOiD,CAAG,EAAE,OAAOmhD,CAAM,EAAE,cAAc,CAAA,GACxDW,IAAS,CAAA;AACf,YAAID,EAAM,SAAS,IACjBd,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,QAAQ,SAEzCuvC,EAAM,QAAQ,CAACE,MAAS;AACtB,oBAAMC,IAASR,EAAM,KAAK,CAACnlC,MAAMA,EAAE,OAAO0lC,EAAK,EAAE,KAAK,CAAA;AActD,kBAbIA,EAAK,SAASvvC,EAAW,WAC3BsvC,EAAO,KAAKC,CAAI,GAEdA,EAAK,SAASvvC,EAAW,WACvBwvC,EAAO,SAASxvC,EAAW,UAC7BsvC,EAAO,KAAKC,CAAI,IAEhBD,EAAO,KAAK;AAAA,gBACV,GAAGC;AAAA,gBACH,QAAQC,EAAO,SAAS,IAAI,SAAA;AAAA,cAAS,CACtC,IAIH,CAACxvC,EAAW,UAAUA,EAAW,gBAAgB,EAAE;AAAA,gBACjDuvC,EAAK;AAAA,cAAA,GAEP;AACA,sBAAME,IACJ,OAAOD,EAAO,QAAU,OACxBA,EAAO,SAAS,QAChBA,EAAO,MAAM,WAAW,IACpB,KACA5mD,GAAM4mD,EAAO,KAAK;AACxB,gBAAID,EAAK,kBAAkBC,EAAO,gBAChCF,EAAO,KAAK;AAAA,kBACV,GAAGC;AAAA,kBACH,OAAOE;AAAA,kBACP,cAAcD,EAAO;AAAA,gBAAA,CACtB,IAEDF,EAAO,KAAK,EAAE,GAAGC,GAAM,OAAOE,GAAK;AAAA,cAEvC;AAAA,YACF,CAAC,GAEHlB,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,aAAawvC;AAAA,UAChD;AAEF,QAAIV,MAAiB5uC,EAAW,aAE5BzV,EAAQ,WAAW,OAAOiD,CAAG,EAAE,OAAOmhD,CAAM,EAAE,SAASC,IAEvDL,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,QAC/BvV,EAAQ,WAAW,OAAOiD,CAAG,EAAE,OAAOmhD,CAAM,EAAE,QAEhDJ,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,QAAQ,CAAA,IAGzC8uC,MAAiB5uC,EAAW,YAE5BzV,EAAQ,WAAW,OAAOiD,CAAG,EAAE,OAAOmhD,CAAM,EAAE,SAASC,IAEvDL,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,aAAa,CAAA,IAE9CyuC,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG,EAAE,aAAa8tC;AAAA,UAC5CW,EAAS,OAAO/gD,CAAG,EAAE,OAAOsS,CAAG;AAAA,UAC/BvV,EAAQ,WAAW,OAAOiD,CAAG,EAAE,OAAOmhD,CAAM;AAAA,QAAA;AAAA,MAIpD;AAAA,IACF,CAAC;AAAA,EACH,CAAC,GACM,CAACpkD,EAAQ,YAAYgkD,CAAQ;AACtC,GAGamB,KAAiB,CAACv3C,GAAQumB,MAAW;AAChD,MAAIixB,IAAYjxB,GACZkxB,IAAc;AAClB,MAAIz3C,KAAUA,EAAO,cAAcumB,KAAUA,EAAO,YAAY;AAE9D,UAAMmxB,IADW13C,EAAO,WACG,QAErB23C,IAAiB,OAAO,KAAKD,CAAS,EAAE;AAAA,MAAO,CAACriD,MACpDA,EAAI,WAAWtC,EAAU,YAAY;AAAA,IAAA;AAIvC,IAAI4kD,EAAe,SAAS,MAC1BF,IAAc,IACdD,IAAYlkD,EAAUizB,CAAM,GAC5BoxB,EAAe,QAAQ,CAACtiD,MAAQ;AAC9B,MAAAmiD,EAAU,WAAW,OAAOniD,CAAG,IAAIqiD,EAAUriD,CAAG;AAAA,IAClD,CAAC;AAAA,EAEL;AACA,SAAO,CAACoiD,GAAaD,CAAS;AAChC,GAyCaI,KAAmB,CAAC3iD,GAAOoB,MAAgB;AACtD,QAAMwhD,IAAW;AAAA,IACf,SAASjlC;AAAA,IACT,SAASC;AAAA,IACT,SAASF;AAAA,EAAA,GAELmlC,IAAkBD,EAASxhD,CAAW,KAAKwhD,EAAS;AAC1D,SAAO;AAAA,IACL,GAAG5iD;AAAA,IACH,QAAQA,EAAM,OAAO,IAAI,CAACT,MAAU;AAClC,UACE,CAACsjD,EAAgB,KAAK,CAACC,MAAcA,EAAU,UAAUvjD,EAAM,IAAI,GACnE;AACA,cAAM,EAAE,eAAewjD,GAAc,GAAGC,MAAczjD;AACtD,eAAO;AAAA,UACL,GAAGyjD;AAAA,UACH,MAAMpwC,EAAW;AAAA,UACjB,iBAAiB,CAAA;AAAA,UACjB,YAAY,CAAA;AAAA,QAAC;AAAA,MAEjB;AACA,aAAOrT;AAAA,IACT,CAAC;AAAA,EAAA;AAEL,GC7Ta0jD,KAAsC,CACjDzpD,GACA0pD,MACG;AACH,QAAMC,IAAiB,CAAA,GACjB7iD,IAAS9G,GAAS,qBAAqB,UAAU,CAAA;AAEvD,gBAAO,KAAK8G,CAAM,EAAE,QAAQ,CAAC/C,MAAa;AAIxC,KAHc+C,EAAO/C,CAAQ,GACP,UAAU,CAAA,GAEzB,QAAQ,CAACgC,MAAU;AAExB,MACEA,EAAM,SAASqT,EAAW,YAC1BrT,EAAM,kBAAkB2jD,MAGxB,OAAO3jD,EAAM,eACb4jD,EAAe,KAAK,CAAC5lD,GAAUgC,EAAM,KAAK,CAAC;AAAA,IAE/C,CAAC;AAAA,EACH,CAAC,GAEM4jD;AACT,GAKaC,KAAsC,CACjD5pD,GACA2pD,MACG;AACH,MAAI,CAACA,KAAkBA,EAAe,WAAW,EAAG;AAEpD,QAAM7iD,IAAS9G,GAAS,qBAAqB,UAAU,CAAA,GACjD+G,IAAW/G,GAAS,YAAY,CAAA,GAGhC6pD,IAAmB,IAAI;AAAA,IAC3BF,EAAe,IAAI,CAAC,CAAC5lD,GAAUC,CAAQ,MAAM,GAAGD,CAAQ,IAAIC,CAAQ,EAAE;AAAA,EAAA;AAIxE,SAAO,KAAK8C,CAAM,EAAE,QAAQ,CAAC/C,MAAa;AACxC,UAAMyC,IAAQM,EAAO/C,CAAQ;AAC7B,IAAIyC,EAAM,eAAe,MAAM,QAAQA,EAAM,WAAW,MACtDA,EAAM,cAAcA,EAAM,YAAY,OAAO,CAACnC,MAAS;AACrD,YAAMylD,IAAiB,GAAGzlD,EAAK,KAAK,IAAIA,EAAK,KAAK;AAClD,aAAO,CAACwlD,EAAiB,IAAIC,CAAc;AAAA,IAC7C,CAAC,GAGGtjD,EAAM,YAAY,WAAW,MAC/B,OAAOA,EAAM,aACb,OAAOA,EAAM,iBAKbA,EAAM,UAAU,MAAM,QAAQA,EAAM,MAAM,KAC5CA,EAAM,OAAO,QAAQ,CAACT,MAAU;AAC9B,MAAIA,EAAM,eAAe,MAAM,QAAQA,EAAM,WAAW,MACtDA,EAAM,cAAcA,EAAM,YAAY,OAAO,CAAC1B,MAAS;AACrD,cAAMylD,IAAiB,GAAGzlD,EAAK,KAAK,IAAIA,EAAK,KAAK;AAClD,eAAO,CAACwlD,EAAiB,IAAIC,CAAc;AAAA,MAC7C,CAAC,GAGG/jD,EAAM,YAAY,WAAW,MAC/B,OAAOA,EAAM,aACb,OAAOA,EAAM;AAAA,IAGnB,CAAC;AAAA,EAEL,CAAC;AAGD,QAAMgkD,IAAWhjD,GAAU,YAAY,CAAA;AACvC,SAAO,KAAKgjD,CAAQ,EAAE,QAAQ,CAACC,MAAgB;AAC7C,UAAMrkB,IAAcokB,EAASC,CAAW;AACxC,IAAIrkB,EAAY,QAAQ,MAAM,QAAQA,EAAY,IAAI,MACpDA,EAAY,OAAOA,EAAY,KAAK,OAAO,CAACthC,MAAS;AACnD,YAAMylD,IAAiB,GAAGzlD,EAAK,KAAK,IAAIA,EAAK,KAAK;AAClD,aAAO,CAACwlD,EAAiB,IAAIC,CAAc;AAAA,IAC7C,CAAC,GAGGnkB,EAAY,KAAK,WAAW,KAC9B,OAAOokB,EAASC,CAAW;AAAA,EAGjC,CAAC,GAGG,OAAO,KAAKD,CAAQ,EAAE,WAAW,KACnC,OAAOhjD,EAAS;AAEpB,GAMakjD,KAA2C,CACtDjqD,GACAkqD,GACAC,MACG;AACH,QAAMrjD,IAAS9G,GAAS,qBAAqB,UAAU,CAAA,GACjD+G,IAAW/G,GAAS,YAAY,CAAA,GAGhCoqD,IAA0B,CAAA;AAehC,MAdA,OAAO,KAAKtjD,CAAM,EAAE,QAAQ,CAAC/C,MAAa;AAIxC,KAHc+C,EAAO/C,CAAQ,GACP,UAAU,CAAA,GAEzB,QAAQ,CAACgC,MAAU;AACxB,MACEA,EAAM,SAASqT,EAAW,YAC1BrT,EAAM,kBAAkBmkD,KAExBE,EAAwB,KAAK,CAACrmD,GAAUgC,EAAM,KAAK,CAAC;AAAA,IAExD,CAAC;AAAA,EACH,CAAC,GAEGqkD,EAAwB,WAAW,EAAG;AAG1C,QAAMP,IAAmB,IAAI;AAAA,IAC3BO,EAAwB;AAAA,MACtB,CAAC,CAACrmD,GAAUC,CAAQ,MAAM,GAAGD,CAAQ,IAAIC,CAAQ;AAAA,IAAA;AAAA,EACnD;AAIF,SAAO,KAAK8C,CAAM,EAAE,QAAQ,CAAC/C,MAAa;AACxC,UAAMyC,IAAQM,EAAO/C,CAAQ;AAC7B,IAAIyC,EAAM,eAAe,MAAM,QAAQA,EAAM,WAAW,MACtDA,EAAM,cAAcA,EAAM,YAAY,OAAO,CAACnC,MAAS;AACrD,YAAMylD,IAAiB,GAAGzlD,EAAK,KAAK,IAAIA,EAAK,KAAK;AAElD,aAAO,EACLwlD,EAAiB,IAAIC,CAAc,KACnCzlD,EAAK,UAAU8lD;AAAA,IAEnB,CAAC,GAGG3jD,EAAM,YAAY,WAAW,MAC/B,OAAOA,EAAM,aACb,OAAOA,EAAM;AAAA,EAGnB,CAAC;AAGD,QAAMujD,IAAWhjD,GAAU,YAAY,CAAA;AACvC,SAAO,KAAKgjD,CAAQ,EAAE,QAAQ,CAACC,MAAgB;AAC7C,UAAMrkB,IAAcokB,EAASC,CAAW;AACxC,IAAIrkB,EAAY,QAAQ,MAAM,QAAQA,EAAY,IAAI,MACpDA,EAAY,OAAOA,EAAY,KAAK,OAAO,CAACthC,MAAS;AACnD,YAAMylD,IAAiB,GAAGzlD,EAAK,KAAK,IAAIA,EAAK,KAAK;AAElD,aAAO,EACLwlD,EAAiB,IAAIC,CAAc,KACnCzlD,EAAK,UAAU8lD;AAAA,IAEnB,CAAC,GAGGxkB,EAAY,KAAK,WAAW,KAC9B,OAAOokB,EAASC,CAAW;AAAA,EAGjC,CAAC,GAGG,OAAO,KAAKD,CAAQ,EAAE,WAAW,KACnC,OAAOhjD,EAAS;AAEpB,GAKasjD,KAAqC,CAChDrqD,GACAsqD,MACG;AACH,QAAMxjD,IAAS9G,GAAS,qBAAqB,UAAU,CAAA,GACjD+G,IAAW/G,GAAS,YAAY,CAAA;AAGtC,SAAO,KAAK8G,CAAM,EAAE,QAAQ,CAAC/C,MAAa;AACxC,UAAMyC,IAAQM,EAAO/C,CAAQ;AAC7B,IAAIyC,EAAM,eAAe,MAAM,QAAQA,EAAM,WAAW,MACtDA,EAAM,cAAcA,EAAM,YAAY;AAAA,MACpC,CAACnC,MAASA,EAAK,UAAUimD;AAAA,IAAA,GAIvB9jD,EAAM,YAAY,WAAW,MAC/B,OAAOA,EAAM,aACb,OAAOA,EAAM;AAAA,EAGnB,CAAC;AAGD,QAAMujD,IAAWhjD,GAAU,YAAY,CAAA;AACvC,SAAO,KAAKgjD,CAAQ,EAAE,QAAQ,CAACC,MAAgB;AAC7C,UAAMrkB,IAAcokB,EAASC,CAAW;AACxC,IAAIrkB,EAAY,QAAQ,MAAM,QAAQA,EAAY,IAAI,MACpDA,EAAY,OAAOA,EAAY,KAAK;AAAA,MAClC,CAACthC,MAASA,EAAK,UAAUimD;AAAA,IAAA,GAIvB3kB,EAAY,KAAK,WAAW,KAC9B,OAAOokB,EAASC,CAAW;AAAA,EAGjC,CAAC,GAGG,OAAO,KAAKD,CAAQ,EAAE,WAAW,KACnC,OAAOhjD,EAAS;AAEpB,GAKawjD,KAAwB,CAACvqD,GAASsqD,MAAoB;AACjE,QAAMvjD,IAAW/G,GAAS,YAAY,CAAA,GAChCsY,IAASvR,GAAU,UAAU,CAAA,GAC7BgjD,IAAWhjD,GAAU,YAAY,CAAA,GAGjCyjD,IAAgB,CAAA;AAEtB,EAAAlyC,EAAO,QAAQ,CAACtR,MAAU;AACxB,QAAIA,EAAM,UAAU,MAAM,QAAQA,EAAM,MAAM,GAAG;AAC/C,YAAMwN,IAAQxN,EAAM,OAAO,QAAQsjD,CAAe;AAClD,MAAI91C,MAAU,MACZxN,EAAM,OAAO,OAAOwN,GAAO,CAAC,GAI1BxN,EAAM,OAAO,WAAW,KAC1BwjD,EAAc,KAAKxjD,EAAM,EAAE;AAAA,IAE/B;AAAA,EACF,CAAC,GAGDD,EAAS,SAASuR,EAAO;AAAA,IACvB,CAACtR,MAAUA,EAAM,UAAUA,EAAM,OAAO,SAAS;AAAA,EAAA,GAInDwjD,EAAc,QAAQ,CAACnwC,MAAY;AACjC,IAAI0vC,EAAS1vC,CAAO,KAClB,OAAO0vC,EAAS1vC,CAAO;AAAA,EAE3B,CAAC,GAGGtT,EAAS,OAAO,WAAW,MAC7B,OAAOA,EAAS,QAChB,OAAOA,EAAS;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GCrRM0jD,KAAM,IAAIC,GAAI;AAAA,EAClB,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,SAAS;AAAA,EACT,QAAQ;AACV,CAAC;AAGDD,GAAI,UAAUE,EAAS;AACvBF,GAAI,UAAUG,EAAY;AAC1BH,GAAI,UAAUI,EAAmB;AACjCJ,GAAI,UAAUK,EAAe;AAC7BL,GAAI,UAAUM,EAAgB;AAC9BN,GAAI,UAAUO,EAAc;AAG5B,MAAMC,KAAmBR,GAAI,QAAQS,EAAc,GAMtCC,KAAqB,CAAChiC,MAAe;AAChD,MAAI,CAACA,KAAc,OAAOA,KAAe;AACvC,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,CAAC,EAAE,SAAS,qCAAqC;AAAA,IAAA;AAI7D,QAAMiiC,IAAQH,GAAiB9hC,CAAU;AAEzC,SAAO;AAAA,IACL,OAAAiiC;AAAA,IACA,QAAQA,IAAQ,KAAMH,GAAiB,UAAU,CAAA;AAAA,EAAC;AAEtD,GCPaI,KAAc,CAAC1mD,GAASC,GAAU0mD,IAAc,CAAA,MAAO;AAClE,QAAMhkC,IAAW,IAAI5iB,GAASC,GAASC,CAAQ;AAC/C,SAAA0iB,EAAS,aAAagkC,GACfhkC;AACT,GAKMikC,KAAsB,CAAC5mD,GAASC,GAAU0W,MAAc;AAC5D,QAAMgM,IAAW,IAAI5iB,GAASC,GAASC,CAAQ;AAC/C,SAAA0iB,EAAS,WAAWhM,GACbgM;AACT,GAKakkC,KAAoB,CAAC7e,GAAQ/nC,MAAa;AACrD,QAAM,CAAC5E,GAASwG,CAAK,IAAI,CAAC5B,GAAU+nC,CAAM,GACpCxkC,IAAS5B,GAAmBC,CAAK;AACvC,MAAI,CAAC2B,EAAO,UAAW,QAAOojD,GAAoBpjD,GAAQnI,GAASwG,EAAM,GAAG;AAC5E,MACExG,KACAA,EAAQ,uBACRA,EAAQ,oBAAoB,OAAO,GAAGwG,EAAM,GAAG,EAAE;AAEjD,WAAO+kD;AAAA,MACLrmD;AAAA,QACE;AAAA,QACA,UAAUsB,EAAM,GAAG;AAAA,MAAA;AAAA,MAErBxG;AAAA,MACAwG,EAAM;AAAA,IAAA;AAMV,GAAIA,EAAM,aAAa,UAAaA,EAAM,aAAa,UACrDA,EAAM,WAAW,KAGnBA,EAAM,aAAa,IACnBxG,EAAQ,oBAAoB,OAAO,GAAGwG,EAAM,GAAG,EAAE,IAAIA;AAGrD,QAAM8S,IAAYlB;AAAA,IAChBpY,EAAQ,oBAAoB;AAAA,IAC5BA,EAAQ,YAAY,CAAA;AAAA,EAAC;AAEvB,SAAAA,EAAQ,oBAAoB,SAASsZ,EAAU,QAC3CA,EAAU,YAAY,OAAO,KAAKA,EAAU,QAAQ,EAAE,SAAS,MACjEtZ,EAAQ,WAAWsZ,EAAU,WAGxBiyC;AAAA,IACLlmD;AAAA,MACE;AAAA,QACE;AAAA,QACA;AAAA,MAAA,EACA,KAAK,GAAG;AAAA,MACV,UAAUmB,EAAM,GAAG;AAAA,IAAA;AAAA,IAErBxG;AAAA,IACAwG,EAAM;AAAA,EAAA;AAEV,GAEailD,KAAyB,CAAC9e,GAAQ/nC,GAAU8mD,MAAiB;AACxE,QAAM,CAAC1rD,GAAS2rD,GAAW/jD,CAAW,IAAI,CAAChD,GAAU+nC,GAAQ+e,CAAY,GACnEvjD,IAAS5B,GAAmBolD,CAAS;AAC3C,MAAI,CAACxjD,EAAO;AACV,WAAOojD,GAAoBpjD,GAAQnI,GAAS2rD,EAAU,GAAG;AAC3D,QAAMnlD,IAAQ2iD,GAAiBwC,GAAW/jD,CAAW,GAE/CL,IAAgBf,EAAM,kBAAkB,CAAA;AAC9C,SAAOA,EAAM;AAEb,QAAMzC,IAAWyC,EAAM;AACvB,SAAIxG,GAAS,qBAAqB,OAAO+D,CAAQ,IACxCwnD;AAAA,IACLrmD;AAAA,MACE;AAAA,MACA,UAAUsB,EAAM,GAAG;AAAA,IAAA;AAAA,IAErBxG;AAAA,IACAwG,EAAM;AAAA,EAAA,KAIVA,EAAM,WAAW,GACjBA,EAAM,aAAa,IACnBxG,EAAQ,oBAAoB,OAAO,GAAGwG,EAAM,GAAG,EAAE,IAAIA,GAEhDxG,EAAQ,qBAAqB,iBAIhCA,EAAQ,oBAAoB,iBAAiBknD;AAAA,IAC3C3/C;AAAA,IACAvH,EAAQ,oBAAoB;AAAA,EAAA,IAL9BA,EAAQ,oBAAoB,iBAAiBuH,GAU7C,OAAO,KAAKvH,EAAQ,qBAAqB,kBAAkB,CAAA,CAAE,EAAE,WAAW,KAE1E,OAAOA,EAAQ,oBAAoB,gBAE9BurD;AAAA,IACLlmD;AAAA,MACE;AAAA,QACE;AAAA,QACA;AAAA,MAAA,EACA,KAAK,GAAG;AAAA,MACV,UAAUmB,EAAM,GAAG;AAAA,IAAA;AAAA,IAErBxG;AAAA,IACAwG,EAAM;AAAA,EAAA;AAEV,GAKaolD,KAAoB,CAAChnD,GAAU0W,GAAW3U,MAAa;AAClE,QAAM,CAAC3G,GAAS+D,GAAUsE,CAAO,IAAI,CAACzD,GAAU0W,GAAW3U,CAAQ;AAEnE,MAAIwB,IAAS5B,GAAmB8B,GAAS,KAAK;AAC9C,MAAI,CAACF,EAAO;AACV,WAAO,IAAIzD,GAASyD,GAAQnI,CAAO;AAGrC,MADAmI,IAASzB,GAAoB1G,GAASqI,CAAO,GACzC,CAACF,EAAO,kBAAkB,IAAIzD,GAASyD,GAAQnI,CAAO;AAE1D,MAAIwG,IAAQxG,GAAS,qBAAqB,OAAO+D,CAAQ;AACzD,QAAMoB,IAAM;AAAA,IACV;AAAA,IACA;AAAA,EAAA;AAGF,SAAAqB,IAAQ,EAAE,GAAGA,GAAO,GAAG6B,EAAA,GAInB7B,EAAM,OACRrB,EAAI;AAAA,IACF;AAAA,EAAA,IAEDqB,EAAM,UAAU,CAAA,GAAI,IAAI,CAACtC,MAAM;AAC9B,UAAM2nD,IAAO3nD;AACb,WAAI2nD,EAAK,eAAeA,EAAK,YAAY,SAAS,MAChDA,EAAK,cAAc3nD,EAAE,YAAY,OAAO,CAACgpB,MAAMA,EAAE,UAAU1mB,EAAM,GAAG,GAChEqlD,EAAK,YAAY,SAAS,YAAUA,EAAK,cAExCA;AAAA,EACT,CAAC,IAIHrlD,EAAM,WACJA,EAAM,aAAa,UAAaA,EAAM,aAAa,OAC/C,SAASA,EAAM,UAAU,EAAE,IAC3B,GAENxG,EAAQ,oBAAoB,OAAO,GAAGwG,EAAM,GAAG,EAAE,IAAIA,GAC9C,IAAI9B,GAASW,GAAcF,EAAI,KAAK,GAAG,CAAC,GAAGnF,CAAO;AAC3D,GAKasI,KAAe,CAACwjD,GAAQC,GAAQC,GAASpnD,MAAa;AACjE,QAAM5E,IAAU4E;AAChB,MAAI2C,IAAgB,CAAA;AAEpB,MAAIukD,MAAW1yC,EAAW,YAAY;AACpC,WAAOpZ,EAAQ,oBAAoB,eAAe+rD,CAAM,GACxDxkD,IAAgB,OAAO,KAAKvH,EAAQ,oBAAoB,cAAc,EAAE;AAAA,MACtE,CAAC4G,OAAS,EAAE,OAAOA,GAAK,MAAMA,GAAK,OAAOA,EAAA;AAAA,IAAI;AAIhD,UAAM+iD,IAAiBF,GAAoCzpD,GAAS+rD,CAAM;AAG1E,IAAAnC,GAAoC5pD,GAAS2pD,CAAc;AAAA,EAC7D;AACA,MAAImC,MAAW1yC,EAAW,YAAY;AACpC,UAAM,EAAE,SAAAkV,EAAA,IAAYtuB,EAAQ,oBAAoB,eAAegsD,CAAO;AACtE,QAAI19B,KAAWA,EAAQ,SAAS,GAAG;AACjC,YAAMpV,IAAMoV,EAAQ,UAAU,CAACpB,MAAMA,EAAE,QAAQ6+B,CAAM;AACrD,MAAI7yC,MAAQ,MACVoV,EAAQ,OAAOpV,GAAK,CAAC;AAAA,IAEzB;AAGA,IAAA+wC,GAAyCjqD,GAASgsD,GAASD,CAAM;AAAA,EACnE;AACA,MAAID,MAAW1yC,EAAW,WAAW;AACnC,UAAMjR,IAAS/B,GAAsBpG,GAAS+rD,CAAM;AACpD,QAAI,CAAC5jD,EAAO,WAAW;AACrB,YAAMmf,IAAW,IAAI5iB,GAASyD,GAAQnI,CAAO;AAC7CsnB,aAAAA,EAAS,gBAAgB,CAAA,GAClBA;AAAAA,IACT;AACA,WAAOtnB,EAAQ,oBAAoB,OAAO+rD,CAAM,GAGhD1B,GAAmCrqD,GAAS+rD,CAAM,GAGlDxB,GAAsBvqD,GAAS+rD,CAAM;AAAA,EACvC;AACA,MAAID,MAAW1yC,EAAW,WAAW;AACnC,UAAM5S,IAAQxG,EAAQ,oBAAoB,OAAOgsD,CAAO,GAClD,EAAE,QAAAnuC,MAAWrX,GACb0S,IAAM2E,EAAO,UAAU,CAACqP,MAAMA,EAAE,UAAU6+B,CAAM;AACtD,IAAI7yC,MAAQ,MACV2E,EAAO,OAAO3E,GAAK,CAAC,GAIlB1S,EAAM,gBAAgB,MAAM,QAAQA,EAAM,YAAY,MACxDA,EAAM,eAAeg9B;AAAA,MACnBh9B,EAAM;AAAA,MACNulD;AAAA,IAAA,IAKJnC,GAAoC5pD,GAAS,CAAC,CAACgsD,GAASD,CAAM,CAAC,CAAC;AAAA,EAClE;AACA,QAAMzkC,IAAW,IAAI5iB,GAASW,GAAA,GAAiBrF,CAAO;AACtD,SAAAsnB,EAAS,gBAAgB/f,GAClB+f;AACT,GAEa2kC,KAAiB,CAACrnD,GAAU0W,GAAWD,MAAW;AAC7D,QAAM,CAACrb,GAAS+D,GAAUgC,CAAK,IAAI,CAACnB,GAAU0W,GAAWD,CAAM,GACzD7U,IAAQxG,GAAS,qBAAqB,OAAO+D,CAAQ;AAC3D,MAAI,EAAE,QAAA8Z,MAAWrX,KAAS,CAAA;AAC1B,EAAAqX,IAASA,KAAU,CAAA;AACnB,MAAI3E,IAAM2E,EAAO,UAAU,CAACqP,MAAMA,EAAE,UAAUnnB,CAAK;AACnD,SAAImT,MAAQ,MAAM2E,EAAO,SAAS,MAAG3E,IAAM2E,EAAO,SAAS,IAC3DA,EAAO,OAAO3E,IAAM,GAAG,GAAG,IAAIkU,IAAc,GAC5CptB,EAAQ,oBAAoB,OAAO+D,CAAQ,EAAE,SAAS8Z,GAC/C,IAAInZ,GAASY,GAAA,GAAkBtF,CAAO;AAC/C,GAGaksD,KAAkB,CAACtnD,GAAUuC,GAAOglD,MAAa;AAC5D,QAAM,CAACnsD,GAAS8E,GAAMwpB,CAAO,IAAI,CAAC1pB,GAAUuC,GAAOglD,CAAQ,GACrDhkD,IAASjB,GAAmBlH,GAAS8E,CAAI;AAC/C,MAAIqD,EAAO,WAAW;AACpB,IAAAnI,EAAQ,oBAAoB,iBAAiBsuB;AAC7C,UAAM/mB,IAAgB,OAAO,KAAK+mB,CAAO,EAAE,IAAI,CAAC1nB,OAAS;AAAA,MACvD,OAAOA;AAAA,MACP,MAAMA;AAAA,MACN,OAAOA;AAAA,IAAA,EACP;AACF,WAAOykD,GAAYljD,GAAQnI,GAAS,EAAE,eAAAuH,GAAe;AAAA,EACvD;AACA,SAAO8jD,GAAYljD,GAAQnI,GAAS,EAAE,eAAesuB,GAAS;AAChE,GAGa89B,KAAkB,CAACxnD,GAAUoW,GAAMqxC,GAAYC,MAAmB;AAC7E,QAAM,CAACtsD,GAAS4G,GAAKU,GAAWC,CAAa,IAAI;AAAA,IAC/C3C;AAAA,IACAoW;AAAA,IACAqxC;AAAA,IACAC;AAAA,EAAA,GAEInkD,IAASd,GAAkBC,GAAWC,CAAa;AACzD,SAAIY,EAAO,cACTnI,EAAQ,oBAAoB,eAAe4G,CAAG,EAAE,UAAUW,IAErD8jD,GAAYljD,GAAQnI,CAAO;AACpC,GAEausD,KAAoB,CAAC3nD,GAAUynD,GAAYG,GAAYC,MAAW;AAC7E,QAAM,CAACzsD,GAASsH,GAAWolD,GAAWzrB,CAAK,IAAI;AAAA,IAC7Cr8B;AAAA,IACAynD;AAAA,IACAG;AAAA,IACAC;AAAA,EAAA,GAEIn+B,IACJtuB,GAAS,qBAAqB,eAAe0sD,CAAS,GAAG,WAAW,CAAA,GAChExzC,IAAM+T,GAAUqB,GAAS,CAACpB,MAAMA,EAAE,QAAQ5lB,CAAS,GACnD+vB,IAAK,CAAA;AACX,SAAAA,EAAG,MAAM/vB,GACT+vB,EAAG,QAAQ4J,GACX3S,EAAQ,OAAOpV,GAAK,GAAGme,CAAE,GAClB,IAAI3yB,GAASW,GAAA,GAAiBrF,CAAO;AAC9C,GAEa2sD,KAAyB,CACpC/nD,GACAgoD,GACAC,GACAxxC,GACAC,GACAwxC,GACAC,MACG;AACH,QAAM,CAAC/sD,GAAS6X,GAAOi2B,GAAM/nC,GAAOhC,GAAUipD,GAAYrnD,CAAI,IAAI;AAAA,IAChEf;AAAA,IACAgoD;AAAA,IACAC;AAAA,IACAxxC;AAAA,IACAC;AAAA,IACAwxC;AAAA,IACAC;AAAA,EAAA;AAEF,MAAI/rD,IAAQ;AACZ,EACE;AAAA,IACEoY,EAAW;AAAA,IACXA,EAAW;AAAA,IACXA,EAAW;AAAA,EAAA,EACX,SAASzT,CAAI,IAEd,EAAE,OAAA3E,MAAU6W,IACJlS,GAAM,WAAWyT,EAAW,MAAM,IAC3CpY,IAAQ6W,IAEP,EAAE,OAAA7W,MAAU6W,EAAM;AAErB,QAAMrR,IAAQxG,GAAS,qBAAqB,OAAO+D,CAAQ;AAC3D,MAAI,OAAOyC,IAAU,OAAeA,KAAS;AAC3C,WAAO,EAAE,QAAQtB,GAAY,oBAAoB,GAAG,SAAAlF,EAAA;AAEtD,QAAM,EAAE,QAAA6d,MAAWrX;AACnB,MAAIqX,KAAU,QAAQA,EAAO,WAAW;AACtC,WAAO,EAAE,QAAQ3Y,GAAY,qBAAqB,GAAG,SAAAlF,EAAA;AAEvD,QAAMykB,IAAW5G,EAAO,KAAK,CAAChV,MAAMA,EAAE,UAAU9C,CAAK;AACrD,MAAI,CAAC0e,KAAY,OAAO,KAAKA,KAAY,CAAA,CAAE,EAAE,WAAW;AACtD,WAAO,EAAE,QAAQvf,GAAY,oBAAoB,GAAG,SAAAlF,EAAA;AAEtD,UAAQgtD,GAAA;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,MAAAvoC,EAAS,GAAGuoC,CAAU,EAAE,IAAI,CAAClf;AAC7B;AAAA,IACF,KAAK,YAAY;AACf,MAAArpB,EAAS,GAAGuoC,CAAU,EAAE,IAAI,CAAClf,GACzBnoC,MAASyT,EAAW,UAAUqL,EAAS,GAAGuoC,CAAU,EAAE,MAAM,MAC1DxmD,GAAO,cAAc,SAAS,MAChCA,EAAM,eAAeg9B;AAAA,QACnBh9B,EAAM;AAAA,QACNT;AAAA,MAAA;AAIN;AAAA,IACF;AAAA,IACA,KAAK;AACH,MAAI/E,IAAOyjB,EAAS,GAAGuoC,CAAU,EAAE,IAAIhsD,IAClC,OAAOyjB,EAAS,GAAGuoC,CAAU,EAAE;AACpC;AAAA,IACF,KAAK;AAEH,UADAvoC,EAAS,GAAGuoC,CAAU,EAAE,IAAIhsD,GACxB2E,MAASyT,EAAW,kBAAkB;AACxC,cAAM6zC,IAAY5zC,GAAOrY,CAAK;AAC9B,QAAAyjB,EAAS,GAAGuoC,CAAU,EAAE,IAAIC;AAC5B,cAAMrJ,IAAc34B,GAASgiC,CAAS,EAAE,CAAC,GAAG;AAC5C,QAAAxoC,EAAS,eAAem/B;AAAA,MAC1B;AACA;AAAA,IACF,KAAK,QAAQ;AAIX,UAFAn/B,EAAS,GAAGuoC,CAAU,EAAE,IAAIhsD,GAExBA,MAAUoY,EAAW,kBAAkB;AACzC,cAAM6zC,IAAY5zC,GAAO,EAAE;AAC3B,QAAAoL,EAAS,gBAAgBwoC,GACzBxoC,EAAS,eAAewG,GAASgiC,CAAS,EAAE,CAAC,GAAG;AAAA,MAClD;AACE,QAAAxoC,EAAS,gBAAgB,QACzBA,EAAS,eAAe,QACxBA,EAAS,aAAa;AAGxB,MAAIje,GAAO,cAAc,SAAS,MAChCA,EAAM,eAAeg9B;AAAA,QACnBh9B,EAAM;AAAA,QACNT;AAAA,MAAA,IAGJ6jD,GAAoC5pD,GAAS,CAAC,CAAC+D,GAAUgC,CAAK,CAAC,CAAC;AAChE;AAAA,IACF;AAAA,IACA,KAAK;AACH,MAAI/E,MAAOyjB,EAAS,GAAGuoC,CAAU,EAAE,IAAIhsD;AACvC;AAAA,IACF;AACE,MAAAyjB,EAAS,GAAGuoC,CAAU,EAAE,IAAIhsD;AAC5B;AAAA,EAAA;AAEJ,QAAMkY,IAAM+T,GAAUpP,GAAQ,CAACqP,MAAMA,EAAE,UAAUnnB,CAAK;AACtD,SAAA8X,EAAO,OAAO3E,GAAK,GAAGuL,CAAQ,GAC9BzkB,EAAQ,oBAAoB,OAAO+D,CAAQ,EAAE,SAAS8Z,GAC/C,IAAInZ,GAASW,GAAA,GAAiBrF,CAAO;AAC9C,GAKaktD,KAA0B,CAACN,GAAQlB,MAAiB;AAE/D,QAAMyB,IADSP,EAAO,OACJ;AAClB,MAAIzjC,IAAa,CAAA;AAEjB,MAAI;AAEF,WADAA,IAAa,KAAK,MAAMgkC,CAAE,GACrBhkC,EAAW,MAAM,SAAS,GAAGuiC,CAAY,OAAO,IAclCP,GAAmBhiC,CAAU,EAChC,QAOT,IAAIzkB,GAASW,GAAA,GAAiB8jB,CAAU,IAHtC,IAAIzkB,GAASkK,GAAO,SAASG,GAAQ,MAAM,CAAC,GAAGoa,CAAU,IAlBzD,IAAIzkB;AAAA,MACTkK;AAAA,QACE;AAAA,QACA;AAAA,UACE;AAAA,UACA,SAASua,EAAW,KAAK,SAASuiC,CAAY;AAAA,QAAA,EAC9C,KAAK,GAAG;AAAA,MAAA;AAAA,MAEZviC;AAAA,IAAA;AAAA,EAcN,QAAc;AAEZ,WAAO,IAAIzkB,GAASkK,GAAO,SAASG,GAAQ,MAAM,CAAC,GAAGoa,CAAU;AAAA,EAClE;AACF,GAKaikC,KAAuB,CAACR,GAAQlB,MAAiB;AAC5D,QAAM2B,IAAe,GAAG3B,CAAY,SAE9ByB,IADSP,EAAO,OACJ;AAClB,MAAIjlD,IAAO,CAAA;AAEX,MAAI;AACF,IAAAA,IAAO,KAAK,MAAMwlD,CAAE;AACpB,UAAMtnD,IAAQ8B,GAAM,qBAAqB;AACzC,QACE,CAAC9B,KACD,OAAOA,KAAU,YACjBA,EAAM,WAAW,KACjB,CAACA,EAAM,SAASwnD,CAAY;AAE5B,aAAO,IAAI3oD;AAAA,QACTQ;AAAA,UACE;AAAA,YACE;AAAA,YACA,kCAAkCwmD,CAAY;AAAA,YAC9C,SAAS7lD,CAAK,SAASwnD,CAAY;AAAA,UAAA,EACnC,KAAK,GAAG;AAAA,QAAA;AAAA,QAEZ1lD;AAAA,MAAA;AAIJ,UAAMpF,IAAS;AAAA,MACb,OAAOoF,GAAM,OAAO,KAAA;AAAA,MACpB,MAAMA,GAAM,MAAM,KAAA;AAAA,MAClB,MAAMA,GAAM,MAAM,KAAA;AAAA,MAClB,cAAcA,GAAM,cAAc,KAAA;AAAA,MAClC,WAAWA,GAAM,WAAW,KAAA;AAAA,MAC5B,eAAeA,GAAM,eAAe;AAAA,IAAA,GAGhCQ,IACJ7D,EAAU,cAAc,YAAY+oD,IAChClnD,GAA0B5D,CAAM,IAChC2D,GAA0B3D,CAAM;AAEtC,WAAO,IAAImC,GAASyD,GAAQR,CAAI;AAAA,EAClC,SAAS2lD,GAAK;AACZ,WAAO,IAAI5oD,GAASQ,GAAY,iBAAiBooD,CAAG,EAAE,GAAG3lD,CAAI;AAAA,EAC/D;AACF,GClhBM4lD,KAAK,EAAE,QAAQ,UAAU,MAAM,OAAA,GAK/BC,KAAuB,IAAI;AAAA,EAC/B,OAAO,QAAQp0C,CAAU,EACtB,OAAO,CAAC,CAACzT,CAAI,MAAMA,EAAK,WAAW,MAAM,CAAC,EAC1C,IAAI,CAAC,CAAA,EAAG3E,CAAK,MAAMA,CAAK;AAC7B,GAEMysD,KAAkB;AAAA,EACtB,CAACr0C,EAAW,UAAU,GAAG;AAAA,IACvB,OAAO;AAAA,IACP,SAAS;AAAA,EAAA;AAAA,EAEX,CAACA,EAAW,UAAU,GAAG;AAAA,IACvB,OAAO;AAAA,IACP,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAAA,EAEb,CAACA,EAAW,SAAS,GAAG;AAAA,IACtB,OAAO;AAAA,IACP,SAAS;AAAA,EAAA;AAAA,EAEX,CAACA,EAAW,SAAS,GAAG;AAAA,IACtB,OAAO;AAAA,IACP,SAAS;AAAA,IACT,WAAW;AAAA,EAAA;AAEf;AAEA,SAASs0C,GAAaC,GAAS5B,GAAQC,GAAS;AAC9C,QAAM4B,IAASH,GAAgBE,CAAO;AACtC,MAAI,CAACC;AACH,WAAO,eAAeD,CAAO;AAG/B,MAAIt8C,IACF,YAAYu8C,EAAO,KAAK;AAO1B,SAJIx0C,EAAW,cAAcu0C,MAC3Bt8C,IAAOA,EAAK,QAAQ,wBAAwB,EAAE,IAG5Cu8C,EAAO,UACF,GAAGv8C,CAAI,IAAIu8C,EAAO,MAAM,QAAQ,SAAS,EAAE,CAAC,KAAK7B,CAAM,UAAU6B,EAAO,SAAS,KAAK5B,CAAO,QAG/F,GAAG36C,CAAI,KAAK06C,CAAM;AAC3B;AAEA,SAAS8B,GAAc,EAAE,SAAAlqD,GAAS,SAAAgqD,GAAS,QAAA5B,GAAQ,SAAAC,GAAS,WAAA8B,KAAa;AACvE,QAAM3f,IAAS7lC,GAAaqlD,GAAS5B,GAAQC,GAASroD,CAAO;AAC7D,EAAAmqD,EAAU3f,CAAM;AAClB;AAEA,SAAS4f,GAAetpD,GAAO;AAC7B,QAAM,EAAE,SAAAd,GAAS,SAAAgqD,GAAS,QAAA5B,GAAQ,SAAAC,GAAS,WAAA8B,GAAW,IAAAt6C,MAAO/O;AAE7D,MAAI,CAAC+oD,GAAqB,IAAIG,CAAO;AACnC,WAAO;AAGT,QAAMxoD,IAAMuoD,GAAaC,GAAS5B,GAAQC,CAAO,GAE3CvjC,IAAW;AAAA,IACf,SAAA9kB;AAAA,IACA,SAAAgqD;AAAA,IACA,QAAA5B;AAAA,IACA,SAAAC;AAAA,IACA,WAAA8B;AAAA,EAAA;AAGF,SAAIt6C,MAAO+5C,GAAG,OAEV,gBAAA7sD;AAAA,IAACiT,GAAS;AAAA,IAAT;AAAA,MACC,UAAS;AAAA,MACT,SAAS,MAAMk6C,GAAcplC,CAAQ;AAAA,MACrC,WAAU;AAAA,MAET,UAAA;AAAA,QAAApa,EAAO;AAAA,QAAW;AAAA,QAAalJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAMpC,gBAAAxF,EAAC4oB,IAAA,EAAc,KAAApjB,GAAU,SAAS0oD,IAAe,UAAAplC,GAAoB;AAEzE;AAEAslC,GAAe,YAAY;AAAA,EACzB,SAASluD,EAAU,OAAO;AAAA,EAC1B,SAASA,EAAU,OAAO;AAAA,EAC1B,QAAQA,EAAU;AAAA,EAClB,SAASA,EAAU;AAAA,EACnB,WAAWA,EAAU,KAAK;AAAA,EAC1B,IAAIA,EAAU,MAAM,CAAC0tD,GAAG,QAAQA,GAAG,IAAI,CAAC;AAC1C;AAEAQ,GAAe,eAAe;AAAA,EAC5B,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,IAAIR,GAAG;AACT;AC7GA,MAAMS,KAAgB,CAAC,EAAE,UAAAxuD,GAAU,SAAAyuD,QAAc;AAC/C,QAAM,GAAGlmD,CAAO,IAAI0H,EAAS,EAAK,GAC5B,GAAGy+C,CAAS,IAAIz+C,EAAS,EAAK,GAE9B0+C,IAAkB,CAACC,GAAOv2C,MAAU;AACxC,IAAAA,EAAM,gBAAA,GACNq2C,EAAU,EAAK,GACfnmD,EAAQ,EAAK,GACTqmD,EAAM,MAAM,WACdA,EAAM,MAAM,QAAQv2C,CAAK;AAAA,EAE7B;AAEA,SACE,gBAAAlY,EAAAqJ,GAAA,EACE,UAAA,gBAAArJ;AAAA,IAAC0uD;AAAA,IAAA;AAAA,MACC,SAASJ,IAAU,YAAY;AAAA,MAC/B,OAAO5/C,EAAO;AAAA,MACd,IAAInF;AAAA,MACJ,WAAU;AAAA,MACV,IAAG;AAAA,MACH,SAAS,CAACL,MAAMA,EAAE,gBAAA;AAAA,MAClB,UAAU,CAACylD,MAAaJ,EAAUI,CAAQ;AAAA,MAEzC,aAAM,SAAS;AAAA,QACd9uD;AAAA,QACA,CAAC4uD,MACCA,EAAM,SAASz6C,GAAS,UACpBnP,GAAM,aAAa4pD,GAAO;AAAA,UACxB,SAAS,CAACv2C,MAAUs2C,EAAgBC,GAAOv2C,CAAK;AAAA,QAAA,CACjD,IACDu2C;AAAA,MAAA;AAAA,IACR;AAAA,EAAA,GAEJ;AAEJ;AAEAJ,GAAc,YAAY;AAAA,EACxB,UAAUnuD,EAAU,KAAK;AAAA,EACzB,SAASA,EAAU,KAAK;AAC1B;ACWA,MAAM0uD,WAAqBv8B,GAAU;AAAA,EACnC,YAAYvtB,GAAO;AACjB,UAAMA,CAAK,GACX,KAAK,QAAQ,EAAE,kBAAkBA,EAAM,cAAc,cAAc,GAAC,GACpE,KAAK,eAAe,KAAK,aAAa,KAAK,IAAI,GAE/C,KAAK,aAAa,KAAK,WAAW,KAAK,IAAI,GAC3C,KAAK,kBAAkB,KAAK,gBAAgB,KAAK,IAAI,GACrD,KAAK,mBAAmB,KAAK,iBAAiB,KAAK,IAAI,GACvD,KAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI,GACnD,KAAK,eAAe,KAAK,aAAa,KAAK,IAAI,GAC/C,KAAK,cAAc,KAAK,YAAY,KAAK,IAAI,GAC7C,KAAK,aAAa,KAAK,WAAW,KAAK,IAAI,GAC3C,KAAK,oBAAoB,KAAK,kBAAkB,KAAK,IAAI;AAAA,EAC3D;AAAA,EAEA,mBAAmB25C,GAAW;AAC5B,UAAM,EAAE,cAAAoQ,MAAiB,KAAK;AAC9B,IAAIpQ,EAAU,iBAAiBoQ,KAC7B,KAAK,SAAS,EAAE,kBAAkBA,EAAA,CAAc;AAAA,EAEpD;AAAA,EAEA,aAAa,CAACC,MAAY;AACxB,UAAM,EAAE,QAAAC,MAAW,KAAK,OAClB,EAAE,QAAAn9C,GAAQ,QAAAumB,GAAQ,KAAAoB,EAAA,IAAQu1B;AAChC,IAAAC,EAAO,WAAWx1B,EAAI,KAAKpB,GAAQvmB,EAAO,GAAG;AAAA,EAC/C;AAAA;AAAA,EAGA,aAAa,GAAGu8B,GAAM6gB,GAAIC,GAAIC,GAAIC,GAAI;AACpC,QACE;AAAA,MACE11C,EAAW;AAAA,MACXA,EAAW;AAAA,MACXA,EAAW;AAAA,IAAA,EACX,SAAS01C,CAAE,KACb,MAAM;AAEN;AAEF,UAAM,EAAE,UAAA16B,MAAa,KAAK,OACpB26B,IAAM;AACZ,IAAIF,MAAO,cACTE,EAAI,OAAO,QAAQ5sD,GAAY,EAAE,OAAO,KAAK,KAAK,IAEpDiyB,EAAS26B,GAAKjhB,GAAM6gB,GAAIC,GAAIC,GAAIC,CAAE;AAAA,EACpC;AAAA,EAEA,WAAWL,GAAS;AAClB,UAAM,EAAE,QAAAC,MAAW,KAAK,OAClB,EAAE,GAAAzqD,GAAG,GAAAC,GAAG,MAAA8qD,EAAA,IAASP;AACvB,IAAAC,EAAO,QAAQzqD,GAAGC,GAAG8qD,CAAI;AAAA,EAC3B;AAAA,EAEA,gBAAgBP,GAAS;AACvB,UAAM,EAAE,OAAOttB,GAAa,OAAA36B,EAAA,IAAU,KAAK;AAC3C,SAAK;AAAA,MACH,EAAE,OAAOioD,GAAS,KAAA;AAAA,MAClBttB,EAAY;AAAA,MACZA,EAAY;AAAA,MACZ36B,EAAM;AAAA,MACN;AAAA;AAAA,MACA4S,EAAW;AAAA;AAAA,IAAA;AAAA,EAEf;AAAA,EAEA,iBAAiBq1C,GAAS;AACxB,UAAM,EAAE,OAAOttB,GAAa,OAAA36B,EAAA,IAAU,KAAK;AAC3C,SAAK;AAAA,MACH,EAAE,OAAOioD,GAAS,KAAA;AAAA,MAClBttB,EAAY;AAAA,MACZA,EAAY;AAAA,MACZ36B,EAAM;AAAA,MACN;AAAA;AAAA,MACA4S,EAAW;AAAA,IAAA;AAAA,EAEf;AAAA,EAEA,eAAeq1C,GAAS;AACtB,UAAM,EAAE,YAAAQ,MAAe,KAAK;AAC5B,IAAAA,EAAWR,CAAO;AAAA,EACpB;AAAA,EAEA,aAAaA,GAAS;AACpB,SAAK,aAAaA,CAAO;AAAA,EAC3B;AAAA;AAAA,EAGA,oBAAoB,CAAC1qD,MAAa;AAChC,SAAK,SAAS,CAAC6jC,OAAU;AAAA,MACvB,cAAc;AAAA,QACZ,GAAGA,EAAK;AAAA,QACR,CAAC7jC,CAAQ,GAAG,CAAC6jC,EAAK,aAAa7jC,CAAQ;AAAA,MAAA;AAAA,IACzC,EACA;AAAA,EACJ;AAAA,EAEA,YAAYA,GAAUgC,GAAOmpD,GAAI;AAC/B,UAAM,EAAE,uBAAAC,MAA0B,KAAK;AACvC,IAAAA,EAAsBprD,GAAUgC,GAAOmpD,CAAE;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAAejtD,GAAK;AAClB,UAAM,EAAE,aAAAmtD,MAAgB,KAAK,OACvBC,IAAKD,EAAY,KAAK,CAACvmD,MAAMA,EAAE,UAAU5G,CAAG;AAClD,QAAIotD,MAAO,OAAW,QAAO;AAC7B,UAAMpR,IAAMoR,EAAG,MAAM,IAAI,CAACxmD,wBACvB,OAAA,EACE,UAAA;AAAA,MAAAwkB,GAAWxkB,EAAE,KAAK;AAAA,wBAClB,MAAA,CAAA,CAAG;AAAA,IAAA,EAAA,GAFIoP,GAAA,CAGV,CACD,GACKq3C,IACJ,gBAAA5uD,EAAC4nB,IAAA,EAAQ,IAAG,qCACV,UAAA;AAAA,MAAA,gBAAA3oB,EAAC2oB,GAAQ,QAAR,EAAe,IAAG,MAAK,UAAA,mBAAe;AAAA,MACvC,gBAAA3oB,EAAC2oB,GAAQ,MAAR,EAAc,UAAA21B,EAAA,CAAI;AAAA,IAAA,GACrB;AAEF,WACE,gBAAAt+C;AAAA,MAACmQ;AAAA,MAAA;AAAA,QACC,WAAS;AAAA,QACT,WAAU;AAAA,QACV,MAAI;AAAA,QACJ,SAAS,CAAC,SAAS,SAAS,OAAO;AAAA,QACnC,SAASw/C;AAAA,QAET,4BAAC1uD,GAAA,EAAO,SAAQ,WAAU,MAAK,MAC5B,YAAO,aAAA,CACV;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AAAA,EAEA,kBAAkB;AAChB,UAAM;AAAA,MACJ,aAAAwuD;AAAA,MACA,OAAOjuB;AAAA,MACP,OAAA36B;AAAA,MACA,UAAAzC;AAAA,MACA,aAAA6D;AAAA,MACA,WAAA2Q;AAAA,MACA,gBAAgBg3C;AAAA,MAChB,UAAA9iB;AAAA,MACA,SAAA9oC;AAAA,MACA,UAAA6rD;AAAA,MACA,cAAAC;AAAA,IAAA,IACE,KAAK,OACH,EAAE,kBAAAC,GAAkB,cAAAC,EAAA,IAAiB,KAAK,OAC1C7yC,IAAa4yC,MAAqBC,EAAa5rD,CAAQ,KAAK,KAG5DuU,KADW3U,GAAS,YAAY,CAAA,GACd,UAAU,CAAA,GAG5B+3C,IAAmBpjC,EAAO,QAAQ,CAACtR,MAAUA,EAAM,UAAU,EAAE,GAI/Dw5C,IAHoBloC,EAAO;AAAA,MAAK,CAACtR,OACpCA,EAAM,UAAU,CAAA,GAAI,SAASjD,CAAQ;AAAA,IAAA,GAEM,UAAU,MAElD+4C,IAAasS,EAAY,IAAI,CAACQ,OAC3B;AAAA,MACL,OAAOA,EAAG;AAAA,MACV,MAAMA,EAAG;AAAA,MACT,OAAOA,EAAG;AAAA,IAAA,EAEb;AACD,QAAI5J,IAAW9hC;AACf,IAAItc,MAAgB,YAClBo+C,IAAW7hC,KACFvc,MAAgB,cACzBo+C,IAAW5hC,KAEb4hC,EAAS,KAAK,CAACrrC,GAAGC,MAAMD,EAAE,MAAM,cAAcC,EAAE,KAAK,CAAC;AACtD,UAAM1W,IAAIi9B,GAGJ0uB,IAAqB,OAAO,KAAKN,KAAc,CAAA,CAAE,EAAE,IAAI,CAAC3oD,OAAS;AAAA,MACrE,OAAOA;AAAA,MACP,MAAMA;AAAA,MACN,OAAOA;AAAA,IAAA,EACP,GAEIkpD,IAAoB;AAAA,MACxB12C,EAAW;AAAA,MACXA,EAAW;AAAA,IAAA,EACX,SAASlV,EAAE,IAAI,IACb2rD,IACA/S,GACEiT,IACJD,GAAmB,KAAK,CAAC5iC,MAAMA,EAAE,UAAUhpB,EAAE,aAAa,KAAK,MAC3DqD,IAAgB;AAAA,MACpB6R,EAAW;AAAA,MACXA,EAAW;AAAA,MACXA,EAAW;AAAA,IAAA,EACX,SAASlV,EAAE,IAAI,IACf,gBAAAxD,EAAAsI,GAAA,EACE,UAAA;AAAA,MAAA,gBAAAtI,EAACd,EAAK,OAAL,EAAW,IAAI0jB,IACb,UAAA;AAAA,QAAA,CAAClK,EAAW,UAAUA,EAAW,cAAc,EAAE,SAASlV,EAAE,IAAI,IAC/D,gBAAAvE,EAACsjD,IAAA,EACC,UAAA,gBAAAviD,EAAAsI,GAAA,EACG,UAAA;AAAA,UAAAmlB,GAAc,SAAS,EAAE;AAAA,UAAM;AAAA,UAC/BA,GAAc,SAAS,EAAE;AAAA,QAAA,EAAA,CAC5B,EAAA,CACF,IAEA,gBAAAxuB,EAACsjD,IAAA,EACC,iCAAG,UAAA90B,GAAc,IAAI,EAAE,MAAA,CAAM,EAAA,CAC/B;AAAA,QAEF,gBAAAxuB,EAAC,OAAA,EAAI,OAAO,EAAE,SAAS,OAAA,GACrB,UAAA,gBAAAA,EAAC,QAAA,EAAK,OAAO,EAAE,OAAO,UACpB,UAAA,gBAAAA;AAAA,UAAC81B;AAAA,UAAA;AAAA,YACC,QAAQrH;AAAA,YACR,MAAMlqB,EAAE;AAAA,YACR,OAAO;AAAA,YACP,SAAS4rD;AAAA,YACT,OAAOC;AAAA,YACP,UAAU,CAACl4C,MACT,KAAK;AAAA,cACHA;AAAA,cACA3T,EAAE;AAAA,cACFA,EAAE;AAAA,cACFH;AAAA,cACA;AAAA,cACAG,EAAE;AAAA,YAAA;AAAA,YAGN,eAAc;AAAA,YACd,kBAAkB,SAAS;AAAA,UAAA;AAAA,QAAA,GAE/B,EAAA,CACF;AAAA,MAAA,GACF;AAAA,MACC,CAACkV,EAAW,UAAUA,EAAW,cAAc,EAAE;AAAA,QAChDlV,EAAE;AAAA,MAAA,IACA,OACF,gBAAAvE,EAACC,EAAK,OAAL,EAAW,IAAI0jB,IAAK,IAAI,GACvB,4BAACmgC,IAAA,EAAU,MAAMv/C,GAAG,cAAc,KAAK,kBAAkB,EAAA,CAC3D;AAAA,IAAA,EAAA,CAEJ,IACE,MAEE8rD,IAAe,CAAC52C,EAAW,aAAa,EAAE,SAASlV,EAAE,IAAI,IAC7D,gBAAAvE,EAAC0jB,IAAA,EAAI,WAAU,QACb,UAAA,gBAAA1jB,EAACC,EAAK,OAAL,EAAW,IAAI0jB,IACd,UAAA,gBAAA3jB;AAAA,MAAC29C;AAAA,MAAA;AAAA,QACC,UAAAv5C;AAAA,QACA,OAAOG;AAAA,QACP,QAAQ,KAAK;AAAA,QACb,aAAakrD;AAAA,QACb,iBAAiBtyC;AAAA,MAAA;AAAA,IAAA,EACnB,CACF,GACF,IACE,MAEEmzC,IAAe,CAAC72C,EAAW,OAAO,EAAE,SAASlV,EAAE,IAAI,IACvD,gBAAAvE,EAAC0jB,IAAA,EAAI,WAAU,QACb,UAAA,gBAAA3iB,EAACd,EAAK,OAAL,EAAW,IAAI0jB,IACd,UAAA;AAAA,MAAA,gBAAA3jB;AAAA,QAACk/C;AAAAA,QAAA;AAAA,UACC,aAAAj3C;AAAA,UACA,UAAA7D;AAAA,UACA,OAAOG;AAAA,UACP,QAAQ,KAAK;AAAA,UACb,aAAakrD;AAAA,UACb,eAAeS;AAAA,UACf,iBAAiB/yC;AAAA,QAAA;AAAA,MAAA;AAAA,wBAElBnc,IAAA,EACC,UAAA;AAAA,QAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAgB,UAAA,iBAAA,CAAc;AAAA,QAC/B,gBAAAD;AAAA,UAACd,EAAK;AAAA,UAAL;AAAA,YACC,MAAM,aAAa4G,EAAM,GAAG,MAAM26B,EAAY,KAAK;AAAA,YACnD,IAAG;AAAA,YACH,cAAcj9B,EAAE,QAAQ;AAAA,YACxB,UAAU,CAAC2T,MACT,KAAK;AAAA,cACHA;AAAA,cACA3T,EAAE;AAAA,cACFA,EAAE;AAAA,cACFH;AAAA,cACA;AAAA,cACAG,EAAE;AAAA,YAAA;AAAA,YAIN,UAAA;AAAA,cAAA,gBAAAvE,EAAC,UAAA,EAAO,OAAO,GAAG,UAAA,KAAC;AAAA,cACnB,gBAAAA,EAAC,UAAA,EAAO,OAAO,GAAG,UAAA,IAAA,CAAC;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACrB,EAAA,CACF;AAAA,IAAA,EAAA,CACF,GACF,IACE,MAEEuwD,IAAc,CAAC92C,EAAW,cAAc,EAAE,SAASlV,EAAE,IAAI,IAC7D,gBAAAvE,EAAC0jB,IAAA,EAAI,WAAU,QACb,UAAA,gBAAA1jB,EAACC,EAAK,OAAL,EAAW,IAAI0jB,IACd,UAAA,gBAAA3jB;AAAA,MAACw+C;AAAA,MAAA;AAAA,QACC,UAAAp6C;AAAA,QACA,OAAOG;AAAA,QACP,QAAQ,KAAK;AAAA,QACb,WAAAqU;AAAA,QACA,iBAAiBuE;AAAA,MAAA;AAAA,IAAA,EACnB,CACF,GACF,IACE,MAEEqzC,IACJ,gBAAAzvD,EAAC,QAAA,EAAK,WAAU,eACd,UAAA;AAAA,MAAA,gBAAAA,EAAC,QAAA,EAAK,WAAU,WACb,UAAA;AAAA,QAAA+rC;AAAA,QAAU;AAAA,QACV,CAACrzB,EAAW,OAAO,EAAE,SAASlV,EAAE,IAAI,IAAI,kBAAkBA,EAAE;AAAA,MAAA,GAC/D;AAAA,MACA,gBAAAvE,EAAC6kB,IAAA,EAAW,UAAUtgB,GAAG,MAAK,SAAQ;AAAA,MACrC4/C,GAAO3iB,EAAY,UAAU,OAAO;AAAA,MACrC,gBAAAxhC,EAAC6kB,IAAA,EAAW,UAAUtgB,GAAG,MAAK,QAAO;AAAA,MACrC,gBAAAvE,EAAC6kB,IAAA,EAAW,UAAUtgB,GAAG,MAAK,OAAA,CAAO;AAAA,IAAA,GACvC,GAGIksD,sBACH,OAAA,EAAI,SAAS,CAACvnD,MAAMA,EAAE,mBACpB,UAAA;AAAA,MAAAjB,MAAgBtD,EAAU,cAAc,WACvC,gBAAA3E,EAACuJ,IAAA,EAAY,WAAU,QACrB,UAAA,gBAAAvJ;AAAA,QAAC8iD;AAAA,QAAA;AAAA,UACC,OAAOthB;AAAA,UACP,MAAMx9B;AAAA,UACN,OAAA6C;AAAA,UACA,aAAAoB;AAAA,QAAA;AAAA,MAAA,GAEJ;AAAA,wBAEDsB,IAAA,EACC,UAAA;AAAA,QAAA,gBAAAvJ;AAAA,UAACmT;AAAA,UAAA;AAAA,YACC,KAAI;AAAA,YACJ,SAAS,KAAK;AAAA,YACd,SAAS,EAAE,GAAG/O,GAAU,GAAGG,EAAE,OAAO,MAAM,GAAA;AAAA,YAC1C,IAAG;AAAA,YACH,OAAM;AAAA,YACN,UAAUuoC,MAAa;AAAA,UAAA;AAAA,QAAA;AAAA,QAEzB,gBAAA9sC;AAAA,UAACmT;AAAA,UAAA;AAAA,YACC,KAAI;AAAA,YACJ,SAAS,KAAK;AAAA,YACd,SAAS,EAAE,GAAG/O,GAAU,GAAGG,EAAE,OAAO,MAAM,GAAA;AAAA,YAC1C,IAAG;AAAA,YACH,OAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QAER,gBAAAvE;AAAA,UAACyhD;AAAA,UAAA;AAAA,YACC,OAAOl9C;AAAA,YACP,aAAa,KAAK;AAAA,YAClB,OAAAsC;AAAA,YACA,cAAc+R;AAAA,YACd,kBAAAmjC;AAAA,YACA,oBAAA8E;AAAA,YACA,eAAe+O,KAAc,CAAA;AAAA,YAC7B,IAAG;AAAA,YAEH,UAAU;AAAA,UAAA;AAAA,QAAA;AAAA,QAEZ,gBAAA7uD,EAACstD,IAAA,EAAc,SAAS,IACtB,UAAA;AAAA,UAAA,gBAAAruD;AAAA,YAACmT;AAAA,YAAA;AAAA,cACC,KAAI;AAAA,cACJ,SAAS,KAAK;AAAA,cACd,SAAS,EAAE,UAAA/O,GAAU,OAAOG,EAAE,MAAA;AAAA,cAC9B,IAAG;AAAA,cACH,OAAM;AAAA,cACN,IAAG;AAAA,YAAA;AAAA,UAAA;AAAA,UAEL,gBAAAvE,EAACgU,GAAS,SAAT,EAAiB;AAAA,UAClB,gBAAAhU;AAAA,YAACouD;AAAA,YAAA;AAAA,cACC,SAAS30C,EAAW;AAAA,cACpB,QAAQlV,EAAE;AAAA,cACV,SAASH;AAAA,cACT,SAAAJ;AAAA,cACA,WAAW6rD;AAAA,cACX,IAAG;AAAA,YAAA;AAAA,UAAA;AAAA,QACL,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GACF;AAIA,IAEW,GAAAnJ,GAAK,cAAe7/C,EAAM,OACnBtC,EAAE,OACDsC,EAAM,KAHT,GAAA6/C,GAAK,cAAeniD,EAAE,QAASsC,EAAM;AAQvD,UAAM6pD,IACJ,gBAAA3vD,EAAAsI,GAAA,EACG,UAAA;AAAA,MAAAmnD;AAAA,MACAC;AAAA,IAAA,GACH;AAGF,WACE,gBAAAzwD,EAAC,OAAA,EAEC,UAAA,gBAAAA,EAAC4mC,IAAA,EAAK,WAAU,8BACd,UAAA,gBAAA5mC,EAAC4mC,GAAK,MAAL,EAAU,WAAU,OACnB,UAAA,gBAAA5mC;AAAA,MAAC0c;AAAA,MAAA;AAAA,QAEC,UAAU,GAAGnY,EAAE,KAAK,IAAIH,CAAQ;AAAA,QAChC,cAAc,KAAK;AAAA,QACnB,YAAYssD;AAAA,QAEZ,4BAACzwD,GAAA,EACC,UAAA;AAAA,UAAA,gBAAAc,EAAC2iB,IAAA,EAAI,WAAU,QACZ,UAAA;AAAA,YAAA6hC,GAAgB;AAAA,cACf,OAAA1+C;AAAA,cACA,aAAA26B;AAAA,cACA,OAAO;AAAA,cACP,UAAU,KAAK;AAAA,cACf,aAAa,KAAK;AAAA,YAAA,CACnB;AAAA,YACAikB,GAAqB;AAAA,cACpB,OAAA5+C;AAAA,cACA,aAAA26B;AAAA,cACA,OAAO;AAAA,cACP,UAAU,KAAK;AAAA,YAAA,CAChB;AAAA,YACA8jB,GAAsB,EAAE,aAAA9jB,EAAA,CAAa;AAAA,UAAA,GACxC;AAAA,UACA,gBAAAzgC,EAAC2iB,IAAA,EAAI,WAAU,QACZ,UAAA;AAAA,YAAA+hC,GAAqB;AAAA,cACpB,OAAA5+C;AAAA,cACA,aAAA26B;AAAA,cACA,OAAO;AAAA,cACP,UAAU,KAAK;AAAA,cACf,IAAI;AAAA,YAAA,CACL;AAAA,YACAukB,GAAe;AAAA,cACd,OAAAl/C;AAAA,cACA,aAAA26B;AAAA,cACA,OAAO;AAAA,cACP,UAAU,KAAK;AAAA,YAAA,CAChB;AAAA,YACAykB,GAAa;AAAA,cACZ,OAAAp/C;AAAA,cACA,aAAA26B;AAAA,cACA,UAAU,KAAK;AAAA,YAAA,CAChB;AAAA,UAAA,GACH;AAAA,UACA,gBAAAxhC,EAAC0jB,IAAA,EAAI,WAAU,QACZ,UAAA0iC,GAAgB;AAAA,YACf,OAAAv/C;AAAA,YACA,aAAA26B;AAAA,YACA,UAAU,KAAK;AAAA,YACf,UAAA6kB;AAAA,YACA,KAAI;AAAA,cACF5sC,EAAW;AAAA,cACXA,EAAW;AAAA,cACXA,EAAW;AAAA,YAAA,EACX,SAASlV,EAAE,IAAI,GACb;AAAA,UACA,CACL,GACH;AAAA,UACC;AAAA,YACCkV,EAAW;AAAA,YACXA,EAAW;AAAA,YACXA,EAAW;AAAA,UAAA,EACX,SAASlV,EAAE,IAAI,KACf,gBAAAvE,EAAC0jB,IAAA,EAAI,WAAU,QAAQ,UAAA9b,EAAA,CAAc;AAAA,UAEtC,CAAC6R,EAAW,eAAe,EAAE,SAASlV,EAAE,IAAI,IAC3C,gBAAAxD,EAAC2iB,IAAA,EAAI,WAAU,QACZ,UAAA;AAAA,YAAA+hC,GAAqB;AAAA,cACpB,OAAA5+C;AAAA,cACA,aAAA26B;AAAA,cACA,OAAO;AAAA,cACP,UAAU,KAAK;AAAA,cACf,IAAI;AAAA,YAAA,CACL;AAAA,YACA8kB,GAAkB;AAAA,cACjB,OAAAz/C;AAAA,cACA,aAAA26B;AAAA,cACA,OAAO;AAAA,cACP,UAAU,KAAK;AAAA,cACf,IAAI;AAAA,YAAA,CACL;AAAA,YACAwkB,GAAa;AAAA,cACZ,OAAAn/C;AAAA,cACA,aAAA26B;AAAA,cACA,UAAU,KAAK;AAAA,cACf,IAAI;AAAA,YAAA,CACL;AAAA,UAAA,EAAA,CACH,IACE;AAAA,UACH6uB;AAAA,UAEAC;AAAA,UACAC;AAAA,UACA,CAAC92C,EAAW,WAAWA,EAAW,MAAM,EAAE,SAASlV,EAAE,IAAI,KAC1D,gBAAAxD,EAAAsI,GAAA,EACE,UAAA;AAAA,YAAA,gBAAArJ,EAAC0jB,IAAA,EAAI,WAAU,QACZ,UAAA+hC,GAAqB;AAAA,cACpB,OAAA5+C;AAAA,cACA,aAAA26B;AAAA,cACA,OAAO;AAAA,cACP,UAAU,KAAK;AAAA,cACf,IAAI;AAAA,YAAA,CACL,GACH;AAAA,YACA,gBAAAzgC,EAAC2iB,IAAA,EAAI,WAAU,QACZ,UAAA;AAAA,cAAAyiC,GAAe;AAAA,gBACd,OAAAt/C;AAAA,gBACA,aAAA26B;AAAA,gBACA,UAAU,KAAK;AAAA,cAAA,CAChB;AAAA,cACA,CAAC,SAAS,EAAE,SAASv5B,CAAW,IAC7Bi+C,GAAe;AAAA,gBACb,OAAAr/C;AAAA,gBACA,aAAA26B;AAAA,gBACA,UAAU,KAAK;AAAA,gBACf,IAAI;AAAA,cAAA,CACL,IACD6jB,GAAA;AAAA,YAAY,EAAA,CAClB;AAAA,UAAA,EAAA,CACA;AAAA,QAAA,EAAA,CAEJ;AAAA,MAAA;AAAA,MAxHK,iBAAiB9gD,EAAE,KAAK,IAAIH,CAAQ;AAAA,IAAA,EAyH3C,CACF,GACF,GACF;AAAA,EAEJ;AAAA,EAEA,SAAS;AACP,WACE,gBAAApE,EAAC2jB,MAAI,IAAI,IAAI,WAAU,QACpB,UAAA,KAAK,kBAAgB,CACxB;AAAA,EAEJ;AACF;AAEAirC,GAAa,YAAY;AAAA,EACvB,aAAa1uD,EAAU;AAAA;AAAA,EACvB,OAAOA,EAAU,OAAO;AAAA,EACxB,UAAUA,EAAU,OAAO;AAAA,EAC3B,gBAAgBA,EAAU;AAAA,EAC1B,UAAUA,EAAU,OAAO;AAAA,EAC3B,OAAOA,EAAU,OAAO;AAAA,EACxB,QAAQA,EAAU,MAAM;AAAA,IACtB,SAASA,EAAU,KAAK;AAAA,IACxB,YAAYA,EAAU,KAAK;AAAA,EAAA,CAC5B,EAAE;AAAA,EACH,UAAUA,EAAU,KAAK;AAAA,EACzB,UAAUA,EAAU,KAAK;AAAA,EACzB,aAAaA,EAAU;AAAA,EACvB,uBAAuBA,EAAU,KAAK;AAAA,EACtC,YAAYA,EAAU,KAAK;AAAA,EAC3B,cAAcA,EAAU;AAAA,EACxB,cAAcA,EAAU;AAC1B;AAEA0uD,GAAa,eAAe;AAAA,EAC1B,aAAa;AAAA,EACb,aAAa,CAAA;AAAA,EACb,cAAc,CAAA;AAAA,EACd,cAAc;AAAA,EACd,gBAAgB,CAAA;AAClB;AChnBA,MAAM+B,KAAoB,CAAC3rD,GAASC,GAAU0mD,IAAc,CAAA,MAAO;AACjE,QAAMhkC,IAAW,IAAI5iB,GAASC,GAASC,CAAQ;AAC/C,SAAA0iB,EAAS,aAAagkC,GACfhkC;AACT,GAyCaipC,KAAuB,CAClC3rD,GACA0W,GACAD,GACAm1C,IAAM,MAAM;AAAC,MACV;AACH,QAAM,CAACxwD,GAAS+D,GAAUgC,CAAS,IAAI,CAACnB,GAAU0W,GAAWD,GAAQm1C,CAAG,GAClEhqD,IAAQxG,GAAS,qBAAqB,OAAO+D,CAAQ,GACrD,EAAE,QAAA8Z,MAAWrX;AACnB,MAAIA,KAAS,MAAM;AACjB,UAAMie,KAAY5G,KAAU,CAAA,GAAI,KAAK,CAAAqP,MAAKA,EAAE,UAAUnnB,EAAM,KAAK;AACjE,QAAI0e,KAAY,OAAO,KAAKA,KAAY,EAAE,EAAE,SAAS,GAAG;AACtD,YAAMvL,KAAO2E,KAAU,CAAA,GAAI,UAAU,CAAAqP,MAAKA,EAAE,UAAUnnB,EAAM,KAAK;AACjE,MAAA8X,EAAO,OAAO3E,GAAK,GAAGnT,CAAK,GAC3B/F,EAAQ,oBAAoB,OAAO+D,CAAQ,EAAE,SAAS8Z;AAAA,IACxD;AAAA,EACF;AACA,SAAOyyC,GAAkBjrD,GAAA,GAAiBrF,GAAS;AAAA,IACjD,UAAU+F;AAAA,IACV,UAAAhC;AAAA,EAAA,CACD;AACH,GCpEM0sD,KAAgB,CAACC,MACCA,EAAQ,IAAI,CAACxsD,GAAGgV,OAC7B,EAAE,GAAGhV,GAAG,UAAUgV,IAAM,EAAA,EAChC,GAIUy3C,KAAsB,CAAC/rD,GAAU+nC,GAAQikB,MAAc;AAClE,QAAM,CAAC5wD,GAASwG,GAAOm5B,CAAQ,IAAI,CAAC/6B,GAAU+nC,GAAQikB,CAAS,GAEzD/yC,IAASrX,EAAM,UAAU,CAAA,GAYzBqqD,IAAY3zB,GAAOrf,GAAQ,CAACqP,MAAMA,EAAE,UAAUyS,EAAS,IAAI;AACjE,MAAIkxB,KAAaA,EAAU,SAAS;AAClC,WAAO,IAAInsD;AAAA,MACTc;AAAA,QACE;AAAA,QACA,UAAUm6B,EAAS,IAAI,KAAKA,EAAS,KAAK;AAAA,MAAA;AAAA,MAE5C3/B;AAAA,IAAA;AAIJ,QAAMuH,IAAgBo4B,EAAS,YAAY,kBAAkB,CAAA,GAEvD2f,IAAW;AAAA,IACf,QAAQ;AAAA,IACR,YAAY3f,EAAS;AAAA,IACrB,MAAMA,EAAS;AAAA,IACf,UAAUA,EAAS;AAAA,IACnB,OAAOA,EAAS;AAAA,IAChB,UAAU;AAAA,IACV,OAAOA,EAAS;AAAA,IAChB,SAAS;AAAA,EAAA;AAEX,SAAIA,EAAS,SAAM2f,EAAS,OAAO3f,EAAS,OACxCA,EAAS,WAAQ2f,EAAS,SAAS3f,EAAS,SAC5CA,EAAS,cAAW2f,EAAS,YAAY3f,EAAS,YAClDA,EAAS,aAAU2f,EAAS,WAAW3f,EAAS,WAChDA,EAAS,aAAU2f,EAAS,WAAW3f,EAAS,WAChDA,EAAS,YAAY,kBACvB2f,EAAS,gBAAgB3f,EAAS,YAAY,gBAChD9hB,EAAO,KAAKyhC,CAAQ,GACpBt/C,EAAQ,oBAAoB,OAAOwG,EAAM,GAAG,EAAE,SAASqX,GAElD7d,EAAQ,qBAAqB,iBAIhCA,EAAQ,oBAAoB,iBAAiBknD;AAAA,IAC3C3/C;AAAA,IACAvH,EAAQ,oBAAoB;AAAA,EAAA,IAL9BA,EAAQ,oBAAoB,iBAAiBuH,GAU7C,OAAO,KAAKvH,EAAQ,qBAAqB,kBAAkB,CAAA,CAAE,EAAE,WAAW,KAE1E,OAAOA,EAAQ,oBAAoB,gBAE9B,IAAI0E;AAAA,IACTc;AAAA,MACE;AAAA,MACA;AAAA,IAAA;AAAA,IAEFxF;AAAA,EAAA;AAEJ,GASa8wD,KAAoB,CAACC,GAAcnsD,GAAU+nC,MAAW;AACnE,QAAM,CAACqkB,GAAahxD,GAASwG,CAAK,IAAI,CAACuqD,GAAcnsD,GAAU+nC,CAAM,GAC/DxkC,IAASnC,GAAkBgrD,CAAoB;AACrD,MAAI,CAAC7oD,EAAO;AACV,WAAO,IAAIzD,GAASyD,GAAQnI,CAAO;AAErC,QAAM6d,IAASrX,EAAM,UAAU,CAAA,GACzBqqD,IAAY3zB,GAAOrf,GAAQ,CAACqP,MAAMA,EAAE,UAAU8jC,CAAW;AAC/D,MAAIH,KAAaA,EAAU,SAAS;AAClC,WAAO,IAAInsD;AAAA,MACTc;AAAA,QACE;AAAA,QACA,UAAUwrD,CAAW;AAAA,MAAA;AAAA,MAEvBhxD;AAAA,IAAA;AAGJ,QAAMs/C,IAAW;AAAA,IACf,MAAMlmC,EAAW;AAAA,IACjB,OAAO43C;AAAA,IACP,UAAU;AAAA,IACV,OAAOA;AAAA,IACP,SAAS;AAAA,EAAA;AAEX,SAAAnzC,EAAO,KAAKyhC,CAAQ,GACpBt/C,EAAQ,oBAAoB,OAAOwG,EAAM,GAAG,EAAE,SAASqX,GAChD,IAAInZ;AAAA,IACTc,GAAe,IAAM,UAAUwrD,CAAW,gCAAgC;AAAA,IAC1EhxD;AAAA,EAAA;AAEJ,GAEaixD,KAAkB,CAACrsD,GAAU0W,GAAWD,GAAQ61C,MAAU;AACrE,QAAM,CAAClxD,GAAS+D,GAAUgC,GAAOipD,CAAI,IAAI,CAACpqD,GAAU0W,GAAWD,GAAQ61C,CAAK,GACtE1qD,IAAQxG,GAAS,qBAAqB,OAAO+D,CAAQ,GACrD,EAAE,QAAA8Z,MAAWrX,GACb0S,IAAM+T,GAAUpP,GAAQ,CAACqP,MAAMA,EAAE,UAAUnnB,CAAK;AACtD,MAAImT,KAAO,KAAK81C,GAAM;AACpB,UAAMmC,IAAStzC,EAAO3E,CAAG;AACzB,IAAAi4C,EAAO,YAAY;AACnB,UAAMC,IAASvzC,EAAO3E,IAAM,CAAC;AAC7B,IAAAk4C,EAAO,YAAY,GACnBvzC,EAAO3E,CAAG,IAAIk4C,GACdvzC,EAAO3E,IAAM,CAAC,IAAIi4C;AAAA,EACpB,WAAWj4C,IAAM2E,EAAO,SAAS,KAAK,CAACmxC,GAAM;AAC3C,UAAMmC,IAAStzC,EAAO3E,CAAG;AACzB,IAAAi4C,EAAO,YAAY;AACnB,UAAME,IAASxzC,EAAO3E,IAAM,CAAC;AAC7B,IAAAm4C,EAAO,YAAY,GACnBxzC,EAAO3E,CAAG,IAAIm4C,GACdxzC,EAAO3E,IAAM,CAAC,IAAIi4C;AAAA,EACpB;AACA,SAAAnxD,EAAQ,oBAAoB,OAAO+D,CAAQ,EAAE,SAAS8Z,GAC/C,IAAInZ,GAASW,GAAA,GAAiBrF,CAAO;AAC9C,GAEasxD,KAAuB,CAAC1sD,GAAU0W,GAAWw2B,GAAS/2B,MAAY;AAC7E,QAAM,CAAC/a,GAAS+D,GAAU+zB,GAAQvmB,CAAM,IAAI;AAAA,IAC1C3M;AAAA,IACA0W;AAAA,IACAw2B;AAAA,IACA/2B;AAAA,EAAA,GAEIvU,IAAQxG,GAAS,qBAAqB,OAAO+D,CAAQ;AAC3D,MAAIyC,GAAO;AACT,UAAM,EAAE,QAAAqX,MAAWrX,GACb+qD,IAAYtkC,GAAUpP,GAAQ,CAACqP,MAAMA,EAAE,UAAU3b,EAAO,KAAK,GAC7DigD,IAAYvkC,GAAUpP,GAAQ,CAACqP,MAAMA,EAAE,UAAU4K,EAAO,KAAK;AACnE,QAAIy5B,IAAY,KAAKC,IAAY;AAC/B,aAAO,IAAI9sD,GAASW,GAAA,GAAiBrF,CAAO;AAE9C,UAAMyxD,IAAiB5zC,EAAO,OAAO0zC,GAAW,CAAC,EAAE,CAAC;AACpD,WAAA1zC,EAAO,OAAO2zC,GAAW,GAAGC,CAAc,GAC1CzxD,EAAQ,oBAAoB,OAAO+D,CAAQ,EAAE,SAAS0sD,GAAc5yC,CAAM,GACnE,IAAInZ,GAASW,GAAA,GAAiBrF,CAAO;AAAA,EAC9C;AACA,SAAO,IAAI0E,GAASW,GAAA,GAAiBrF,CAAO;AAC9C,GCzJM0xD,KAAa,CAACjtD,MAAU;AAC5B,QAAM,EAAE,SAAAd,GAAS,aAAAiE,GAAa,UAAAif,GAAU,OAAArgB,GAAO,cAAAipD,GAAc,cAAAjB,MAC3D/pD,GAEIwqD,IAAa,CAAC0C,MAAO;AACzB,UAAM,EAAE,UAAUr2C,GAAW,OAAOD,MAAWs2C,GACzCxjB,IAAS8d,GAAetoD,GAAS2X,GAAWD,CAAM;AACxD,IAAAwL,EAASsnB,CAAM;AAAA,EACjB,GAEMyjB,IAAc,CAACt2C,GAAWD,GAAQ61C,MAAU;AAChD,UAAM/iB,IAAS8iB,GAAgBttD,GAAS2X,GAAWD,GAAQ61C,CAAK;AAChE,IAAArqC,EAASsnB,CAAM;AAAA,EACjB,GAMM0jB,IAAgB,CAAC1jB,MAAW;AAChC,IAAAtnB,EAASsnB,CAAM;AAAA,EACjB,GAEM2jB,IAAqB,CACzBlF,GACAC,GACAxxC,GACAC,GACAwxC,GACAC,MACG;AACH,UAAM5e,IAASwe;AAAA,MACbhpD;AAAA,MACAipD;AAAA,MACAC;AAAA,MACAxxC;AAAA,MACAC;AAAA,MACAwxC;AAAA,MACAC;AAAA,IAAA;AAEF,IAAAlmC,EAASsnB,CAAM;AAAA,EACjB,GAEMghB,IAAwB,CAAC7zC,GAAWD,GAAQm1C,MAAQ;AACxD,UAAMriB,IAASoiB,GAAqB5sD,GAAS2X,GAAWD,GAAQm1C,CAAG;AACnE,IAAA3pC,EAASsnB,CAAM;AAAA,EACjB,GAEM4jB,IAAiB,CAACz2C,GAAWw2B,GAAS/2B,MAAY;AACtD,UAAMozB,IAASmjB,GAAqB3tD,GAAS2X,GAAWw2B,GAAS/2B,CAAO;AACxE,IAAA8L,EAASsnB,CAAM;AAAA,EACjB,GAGM1zB,IAAeD;AAAA,IACnB7W,EAAQ,oBAAoB,UAAU,CAAA;AAAA,IACtCA,EAAQ,UAAU,UAAU,CAAA;AAAA,EAAC,GAGzBsX,IAAe,CAAA;AACrB,EAAAR,EAAa,QAAQ,CAAC3B,MAAS;AAC7B,IAAIA,EAAK,SAAS,UAChBA,EAAK,OAAO,QAAQ,CAAC8wB,MAAc;AACjC,MAAA3uB,EAAa,KAAK2uB,EAAU,IAAI;AAAA,IAClC,CAAC,IAED3uB,EAAa,KAAKnC,EAAK,IAAI;AAAA,EAE/B,CAAC;AAGD,QAAMvR,IAAgB5D,EAAQ,qBAAqB,kBAAkB,CAAA,GAE/Dka,KAAUrX,GAAO,UAAU,CAAA,GAAI,IAAI,CAACtC,GAAGgV,MAC3C,gBAAAvZ;AAAA,IAAC4uD;AAAA,IAAA;AAAA,MACC,SAAA5qD;AAAA,MACA,aAAAiE;AAAA,MAEA,OAAApB;AAAA,MACA,UAAUA,EAAM;AAAA,MAChB,UAAU0S,IAAM;AAAA,MAChB,OAAOhV;AAAA,MACP,gBAAgBqD;AAAA,MAChB,QAAQ,EAAE,SAASqqD,GAAa,YAAYG,EAAA;AAAA,MAC5C,UAAUF;AAAA,MACV,UAAUC;AAAA,MACV,aAAaviC,GAAA;AAAA,MACb,uBAAA4/B;AAAA,MACA,YAAAF;AAAA,MACA,WAAWh0C;AAAA,MACX,cAAAw0C;AAAA,MACA,cAAAjB;AAAA,IAAA;AAAA,IAdK,UAAU5mD,CAAW,IAAIpB,EAAM,GAAG,IAAItC,EAAE,KAAK,IAAIgV,CAAG;AAAA,EAAA,CAgB5D;AAED,gCAAU,UAAA2E,EAAA,CAAO;AACnB;AAEA6zC,GAAW,YAAY;AAAA,EACrB,SAAS7xD,EAAU,OAAO;AAAA,EAC1B,aAAaA,EAAU,OAAO;AAAA,EAC9B,UAAUA,EAAU,KAAK;AAAA,EACzB,OAAOA,EAAU,OAAO;AAAA,EACxB,cAAcA,EAAU;AAAA,EACxB,cAAcA,EAAU;AAC1B;AAEA6xD,GAAW,eAAe,EAAE,cAAc,CAAA,GAAI,cAAc,GAAA;ACvH5D,MAAMM,KAAc,CAAC,EAAE,UAAAnrC,GAAU,OAAArgB,GAAO,UAAAhH,QAAe;AACrD,QAAM,CAACwxD,GAAaiB,CAAc,IAAIxiD,EAAS,EAAE,GAE3CyiD,IAAkB,CAACP,MAAO;AAC9B,IAAAM,EAAeN,EAAG,OAAO,KAAK;AAAA,EAChC;AAEA,SACE,gBAAAhyD;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAa,CAACkJ,MAAMA,EAAE,gBAAA;AAAA,MACtB,SAAS,CAACA,MAAMA,EAAE,gBAAA;AAAA,MAClB,WAAW,CAACA,MAAMA,EAAE,gBAAA;AAAA,MACpB,MAAK;AAAA,MACL,UAAU;AAAA,MAEV,4BAAClI,IAAA,EACC,UAAA;AAAA,QAAA,gBAAAhB;AAAA,UAACC,EAAK;AAAA,UAAL;AAAA,YACC,MAAK;AAAA,YACL,MAAK;AAAA,YACL,aAAY;AAAA,YACZ,MAAK;AAAA,YACL,UAAU,CAACiJ,MAAMqpD,EAAgBrpD,CAAC;AAAA,YAClC,SAAS,CAACA,MAAM;AACd,cAAAA,EAAE,gBAAA,GACFA,EAAE,eAAA;AAAA,YACJ;AAAA,YACA,OAAO,EAAE,UAAU,SAAS,WAAW,OAAA;AAAA,UAAO;AAAA,QAAA;AAAA,QAEhD,gBAAAlJ;AAAA,UAACmT;AAAA,UAAA;AAAA,YACC,KAAI;AAAA,YACJ,SAAS+T;AAAA,YACT,SAAS,EAAE,OAAArgB,GAAO,aAAAwqD,EAAA;AAAA,YAClB,IAAG;AAAA,YACH,OAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QAEPxxD;AAAA,MAAA,EAAA,CACH;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAwyD,GAAY,YAAY;AAAA,EACtB,UAAUnyD,EAAU,KAAK;AAAA,EACzB,OAAOA,EAAU,OAAO;AAAA,EACxB,UAAUA,EAAU;AACtB;AAEAmyD,GAAY,eAAe,EAAE,UAAU,KAAA;AC/CvC,MAAMG,KAAY,CAAC,EAAE,MAAA3Q,GAAM,OAAAh7C,GAAO,UAAA4tB,QAAe;AAC/C,QAAM,EAAE,OAAOqtB,GAAW,KAAK2Q,MAAY5Q,GACrC,EAAE,aAAAl1B,GAAa,OAAApO,GAAO,KAAAtX,EAAA,IAAQJ;AACpC,2BACG6c,IAAA,EACC,UAAA;AAAA,IAAA,gBAAA3iB,EAAC4iB,IAAA,EAAI,IAAI,GACP,UAAA;AAAA,MAAA,gBAAA3jB,EAAC,QAAG,UAAA,kBAAA,CAAe;AAAA,wBAClBC,GAAA,EACC,UAAA;AAAA,QAAA,gBAAAc,EAACnB,IAAA,EACC,UAAA;AAAA,UAAA,gBAAAI,EAACC,EAAK,OAAL,EAAW,UAAA,OAAA,CAAI;AAAA,UAChB,gBAAAD;AAAA,YAACC,EAAK;AAAA,YAAL;AAAA,cACC,MAAK;AAAA,cACL,OAAOwyD;AAAA,cACP,aAAY;AAAA,cACZ,UAAQ;AAAA,cACR,UAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,QACV,GACF;AAAA,0BACC7yD,IAAA,EACC,UAAA;AAAA,UAAA,gBAAAI,EAACC,EAAK,OAAL,EAAW,UAAA,eAAA,CAAY;AAAA,UACxB,gBAAAD;AAAA,YAACC,EAAK;AAAA,YAAL;AAAA,cACC,MAAK;AAAA,cACL,OAAO6hD;AAAA,cACP,aAAY;AAAA,cACZ,UAAQ;AAAA,cACR,UAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,QACV,GACF;AAAA,QACA,gBAAA/gD,EAAC,SAAI,OAAO,EAAE,UAAU,QAAQ,SAAS,UACvC,UAAA;AAAA,UAAA,gBAAAf,EAAC,QAAA,EAAK,WAAU,QAAQ,UAAA0O,EAAO,cAAa;AAAA,4BAC3C,QAAA,EACC,UAAA;AAAA,YAAA,gBAAA1O,EAAC,OAAE,UAAA,eAAA,CAAsB;AAAA,YACzB,gBAAAe,EAAC,KAAA,EAAE,WAAU,QAAO,UAAA;AAAA,cAAA;AAAA,cAC8B;AAAA,cAChD,gBAAAf,EAAC,OAAE,UAAA,kBAAA,CAAe;AAAA,cAAI;AAAA,YAAA,GACxB;AAAA,YACA,gBAAAA,EAAC,KAAA,EAAE,WAAU,QAAO,UAAA,6HAGpB;AAAA,YACA,gBAAAA,EAAC,KAAA,EAAE,WAAU,QAAO,UAAA,qEAAA,CAGpB;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IACA,gBAAAe,EAAC4iB,IAAA,EAAI,IAAI,GACP,UAAA;AAAA,MAAA,gBAAA3jB,EAAC,QAAG,UAAA,oCAAA,CAAiC;AAAA,wBACpCC,GAAA,EACC,UAAA;AAAA,QAAA,gBAAAc,EAACnB,IAAA,EACC,UAAA;AAAA,UAAA,gBAAAI,EAACC,EAAK,OAAL,EAAW,UAAA,OAAA,CAAI;AAAA,UAChB,gBAAAD;AAAA,YAACC,EAAK;AAAA,YAAL;AAAA,cACC,UAAQ;AAAA,cACR,MAAK;AAAA,cACL,OAAOgH;AAAA,cACP,aAAY;AAAA,cACZ,UAAU,CAACiC,MAAMurB,EAAS,OAAOvrB,EAAE,OAAO,KAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QACjD,GACF;AAAA,0BACCtJ,IAAA,EACC,UAAA;AAAA,UAAA,gBAAAI,EAACC,EAAK,OAAL,EAAW,UAAA,eAAA,CAAY;AAAA,UACxB,gBAAAD;AAAA,YAACC,EAAK;AAAA,YAAL;AAAA,cACC,MAAK;AAAA,cACL,OAAOse;AAAA,cACP,aAAY;AAAA,cACZ,UAAQ;AAAA,cACR,UAAQ;AAAA,YAAA;AAAA,UAAA;AAAA,QACV,GACF;AAAA,0BACC3e,IAAA,EACC,UAAA;AAAA,UAAA,gBAAAI,EAACC,EAAK,OAAL,EAAW,UAAA,cAAA,CAAW;AAAA,UACvB,gBAAAD;AAAA,YAACC,EAAK;AAAA,YAAL;AAAA,cACC,IAAG;AAAA,cACH,MAAM;AAAA,cACN,OAAO0sB;AAAA,cACP,aAAY;AAAA,cACZ,UAAU,CAACzjB,MAAMurB,EAAS,eAAevrB,EAAE,OAAO,KAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QACzD,GACF;AAAA,0BACCtJ,IAAA,EACC,UAAA;AAAA,UAAA,gBAAAI,EAACC,EAAK,OAAL,EAAW,UAAA,0BAAA,CAAuB;AAAA,UACnC,gBAAAc,EAACd,EAAK,OAAL,EAAW,MAAK,SACf,UAAA;AAAA,YAAA,gBAAAD,EAACC,EAAK,MAAM,OAAX,EAAiB,MAAK,SAAQ,SAAO,IAAC,UAAQ,GAAA,CAAC;AAAA,YAChD,gBAAAc,EAACd,EAAK,MAAM,OAAX,EACC,UAAA;AAAA,cAAA,gBAAAD,EAAC,QAAA,EAAK,WAAU,WAAW,UAAA0O,EAAO,SAAQ;AAAA,cAC1C,gBAAA1O,EAAC,OAAE,UAAA,WAAA,CAAQ;AAAA,cACX,gBAAAA,EAAC,SAAI,UAAA,0DAAA,CAEL;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;AAEAwyD,GAAU,YAAY;AAAA,EACpB,MAAMtyD,EAAU,MAAM;AAAA,IACpB,OAAOA,EAAU;AAAA,IACjB,KAAKA,EAAU;AAAA,EAAA,CAChB,EAAE;AAAA,EACH,OAAOA,EAAU,MAAM;AAAA,IACrB,aAAaA,EAAU;AAAA,IACvB,OAAOA,EAAU;AAAA,IACjB,KAAKA,EAAU;AAAA,EAAA,CAChB,EAAE;AAAA,EACH,UAAUA,EAAU,KAAK;AAC3B;ACrEO,MAAM0G,KAAqB,CAAAC,MAC5BA,EAAM,QAAQ,KACTtB,GAAY,sBAAsB,UAAUsB,EAAM,GAAG,GAAG,IAE5D,uBAAuB,KAAKA,EAAM,GAAG,IAMnCnB,GAAA,IALEH;AAAA,EACL;AAAA,EACA,UAAUsB,EAAM,GAAG;AAAA,GCzCnB6rD,KAA0B,CAAC1lB,GAAQ4V,MAAU;AACjD,QAAMj0B,IAAU,EAAE,gBAAgB,GAAC,GAC7B9nB,IAAQ3B,EAAU8nC,CAAM,GACxBhlC,IAAO9C,EAAU09C,CAAK;AAwB5B,SAvBqB/7C,EAAM,OAAO;AAAA,IAChC,CAACT,MAAUA,EAAM,SAASqT,EAAW;AAAA,EAAA,EAE1B,QAAQ,CAACk5C,MAAgB;AAIpC,KAACA,EAAY,cAAc,CAAA,GAAI,QAAQ,CAACz7B,MAAa;AACnD,UACE,CAACzd,EAAW,UAAUA,EAAW,cAAc,EAAE,SAASyd,EAAS,IAAI,KACvEA,EAAS,eACT;AACA,cAAM2rB,IAAiB3rB,EAAS;AAChC,QAAIlvB,GAAM,qBAAqB,iBAAiB66C,CAAc,MAE5Dl0B,EAAQ,eAAek0B,CAAc,IACnC76C,EAAK,oBAAoB,eAAe66C,CAAc,GACxDl0B,EAAQ,eAAek0B,CAAc,EAAE,OAAOA;AAAA,MAElD;AAAA,IACF,CAAC;AAAA,EACH,CAAC,GAEG,OAAO,KAAKl0B,EAAQ,kBAAkB,EAAE,EAAE,WAAW,IAChD,OAEFA;AACT,GAEMikC,KAAiB,CAAC5lB,GAAQ4V,MAAU;AACxC,QAAMj0B,IAAU,EAAE,gBAAgB,GAAC,GAC7B9nB,IAAQ3B,EAAU8nC,CAAM,GACxBhlC,IAAO9C,EAAU09C,CAAK;AAiB5B,SAfqB/7C,EAAM,OAAO;AAAA,IAAO,CAACT,MACxC,CAACqT,EAAW,UAAUA,EAAW,cAAc,EAAE,SAASrT,EAAM,IAAI;AAAA,EAAA,EAGzD,QAAQ,CAACusD,MAAgB;AACpC,UAAM9P,IAAiB8P,EAAY;AAEnC,IAAI3qD,GAAM,qBAAqB,iBAAiB66C,CAAc,MAE5Dl0B,EAAQ,eAAek0B,CAAc,IACnC76C,EAAK,oBAAoB,eAAe66C,CAAc,GACxDl0B,EAAQ,eAAek0B,CAAc,EAAE,OAAOA;AAAA,EAElD,CAAC,GAEG,OAAO,KAAKl0B,EAAQ,kBAAkB,EAAE,EAAE,WAAW,IAChD,OAEFA;AACT,GAEMqgB,KAAe;AAAA,EACnB,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,QAAQ;AACV,GAEMD,KAAU,CAACI,GAAOG,MACdA,EAAO,SACR,UACI;AAAA,EACL,GAAGN;AAAA,EACH,OAAOM,EAAO,QAAQ;AAAA,EACtB,MAAMA,EAAO,QAAQ;AAAA,IAGhB,EAAE,GAAGH,GAAO,CAACG,EAAO,IAAI,GAAGA,EAAO,QAAA,GAKzCujB,KAAe,CAAC/tD,MAAU;AAC9B,QAAM,EAAE,OAAOm+C,GAAc,MAAMD,MAAgBl+C,GAG7C,CAACqqC,GAAOC,CAAQ,IAAIC,GAAWN,IAAS;AAAA,IAC5C,GAAGC;AAAA,IACH,OAAOiU;AAAA,IACP,MAAMD;AAAA,EAAA,CACP;AAGD,EAAAzsC,GAAU,MAAM;AACd,IAAA64B,EAAS,EAAE,MAAM,SAAS,SAAS6T,GAAc;AAAA,EACnD,GAAG,CAACA,CAAY,CAAC,GAEjB1sC,GAAU,MAAM;AACd,IAAA64B,EAAS,EAAE,MAAM,QAAQ,SAAS4T,GAAa;AAAA,EACjD,GAAG,CAACA,CAAW,CAAC;AAGhB,QAAM8P,IAAc,CAACp3C,GAAQq3C,MAAW;AACtC,IAAA3jB,EAAS,EAAE,MAAM,SAAS,SAAS,EAAE,GAAGD,EAAM,OAAO,CAACzzB,CAAM,GAAGq3C,EAAA,GAAU;AAAA,EAC3E,GAEMjvC,IAAa,YAAY;AAC7B,QAAIsE,IAAMxhB,GAAmBuoC,EAAM,KAAK;AACxC,QAAI,CAAC/mB,EAAI;AACP,MAAAgnB,EAAS,EAAE,MAAM,UAAU,SAAShnB,GAAK;AAAA,SACpC;AACL,YAAMuG,IAAUikC,GAAezjB,EAAM,OAAOA,EAAM,IAAI,GAChD6jB,IAAmBN,GAAwBvjB,EAAM,OAAOA,EAAM,IAAI,GAClE8jB,IAAgB1L,GAAayL,KAAoB,CAAA,GAAIrkC,KAAW,CAAA,CAAE,GAClEw0B,IAAY;AAAA,QAChB,GAAGhU,EAAM;AAAA,QACT,GAAG8jB;AAAA,MAAA;AAEL,MAAA7qC,IAAM,MAAME,GAAa,kBAAkB66B,CAAS,GACpD/T,EAAS,EAAE,MAAM,UAAU,SAAShnB,EAAI,QAAQ;AAAA,IAClD;AAAA,EACF,GAEM0X,IAAc,CAAC52B,MAAM;AACzB,IAAIA,KAAKA,EAAE,mBACTA,EAAE,gBAAA,GAEJkmC,EAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS,EAAE,OAAO6T,GAAc,MAAMD,EAAA;AAAA,IAAY,CACnD;AAAA,EACH,GAGMI,IACJ,gBAAApjD;AAAA,IAACiB;AAAA,IAAA;AAAA,MAEC,SAAQ;AAAA,MACR,SAAS,CAACiI,MAAM;AACd,QAAAA,EAAE,gBAAA,GACF4a,EAAA;AAAA,MACF;AAAA,MACD,UAAA;AAAA,IAAA;AAAA,IANK;AAAA,EAAA,GAWFu/B,IACJ,gBAAArjD,EAACiB,GAAA,EAAqB,SAAQ,aAAY,SAAS,CAACiI,MAAM42B,EAAY52B,CAAC,GAAG,UAAA,QAAA,GAA9D,SAEZ;AAIF,SACE,gBAAAnI,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,IAAA,EAAS,KAAI,eACZ,UAAA,gBAAAzP;AAAA,MAACiB;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,SAAS,CAACiI,MAAM;AACd,UAAAA,EAAE,gBAAA,GACFkmC,EAAS,EAAE,MAAM,QAAQ,SAAS,IAAM;AAAA,QAC1C;AAAA,QAEC,UAAA1gC,EAAO;AAAA,MAAA;AAAA,IAAA,GAEZ;AAAA,IACA,gBAAA1O;AAAA,MAACoiD;AAAA,MAAA;AAAA,QACC,MAAM,CAACgB,GAAYC,CAAW;AAAA,QAC9B,OAAM;AAAA,QACN,WAAW;AAAA,UACT,MAAMlU,EAAM;AAAA,UACZ,SAAS,CAAC9tC,MAAU+tC,EAAS,EAAE,MAAM,QAAQ,SAAS/tC,EAAA,CAAO;AAAA,QAAA;AAAA,QAE/D,OAAOy+B;AAAA,QAEP,UAAA,gBAAA/+B,EAAAsI,GAAA,EACE,UAAA;AAAA,UAAA,gBAAArJ;AAAA,YAAC0iD;AAAA,YAAA;AAAA,cACC,QAAQvT,EAAM;AAAA,cACd,SAAS,MAAMC,EAAS,EAAE,MAAM,UAAU,SAAS,MAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UAE3D,gBAAApvC;AAAA,YAACwyD;AAAA,YAAA;AAAA,cACC,MAAMvP;AAAA,cACN,OAAO9T,EAAM;AAAA,cACb,UAAU2jB;AAAA,YAAA;AAAA,UAAA;AAAA,QACZ,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,GC1LMI,KAAiB;AAAA,EACrBvuD,EAAU,cAAc;AAAA,EACxBA,EAAU,cAAc;AAAA,EACxBA,EAAU,cAAc;AAC1B,GAEMwQ,KAAgB;AAAA,EACpB,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,UAAU;AACZ,GAEMg+C,KAAY,CAAC,EAAE,aAAAC,GAAa,aAAAC,QAAkB;AAClD,QAAMv9C,IAAUrV,GAAA,GACV6yD,IAAQ7yD,GAAA,GACRsV,IAAYxD,GAAQ,OAAO,EAAE,QAAQ,SAAS,OAAO,WAAW,EAAE,GAClE,CAACyD,GAASC,CAAU,IAAInG,EAAS,CAAA,CAAE,GACnC,CAACuF,CAAU,IAAIvF,EAAS;AAAA,IAC5B;AAAA,MACE,YAAY;AAAA,MACZ,cAAc,CAACiD,MACb,gBAAAhS,EAAAsI,GAAA,EACE,UAAA;AAAA,QAAA,gBAAArJ,EAACyP,IAAA,EAAS,KAAI,eACZ,UAAA,gBAAAzP,EAACiB,GAAA,EAAO,MAAK,MAAK,SAAS,MAAMmyD,EAAYrgD,CAAM,GAAG,iBAEtD,GACF;AAAA,QACCmgD,GAAe,SAASngD,EAAO,KAAK,MAAM,KACzC,gBAAA/S;AAAA,UAAC4oB;AAAA,UAAA;AAAA,YACC,KAAI;AAAA,YACJ,KAAI;AAAA,YACJ,SAASyqC;AAAA,YACT,UAAUtgD;AAAA,YACV,UAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ,GAEJ;AAAA,MAEF,UAAU;AAAA,MACV,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,OAAO;AAAA,MACP,YAAY;AAAA,MACZ,OAAO;AAAA,IAAA;AAAA,EACT,CACD;AAED,EAAAwD,GAAU,MAAM;AAOd,KAN0B,YAAY;AACpC,YAAM6R,IAAM,MAAMo6B,GAAa,mBAAA;AAC/B,MAAIp6B,EAAI,OAAO,aACbnS,EAAWmS,EAAI,QAAQ,QAAQ,CAAA,CAAE;AAAA,IAErC,GACA;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,QAAMmrC,IAAyBn9C,GAAY,MAAM;AAC/C,IAAAN,EAAQ,QAAQ,IAAI,cAAc,mBAAmBw9C,EAAM,QAAQ,KAAK;AAAA,EAC1E,GAAG,CAAA,CAAE;AAEL,2BACG,OAAA,EACC,UAAA;AAAA,IAAA,gBAAAtzD,EAAC,SAAI,WAAU,QACb,UAAA,gBAAAe,EAAC,OAAA,EAAI,WAAU,qBACb,UAAA;AAAA,MAAA,gBAAAf,EAAC,QAAA,EAAK,WAAU,+DACb,UAAA0O,EAAO,mBACV;AAAA,MACA,gBAAA1O;AAAA,QAACC,EAAK;AAAA,QAAL;AAAA,UACC,KAAKqzD;AAAA,UACL,MAAK;AAAA,UACL,aAAY;AAAA,UACZ,OAAO,EAAE,aAAa,OAAA;AAAA,UACtB,UAAUC;AAAA,QAAA;AAAA,MAAA;AAAA,IACZ,EAAA,CACF,EAAA,CACF;AAAA,IACA,gBAAAvzD,EAAC,SAAI,WAAW2E,EAAU,WAAW,OAAO,OAAO,OAAOoR,GACxD,UAAA,gBAAA/V;AAAA,MAAC2W;AAAA,MAAA;AAAA,QACC,KAAKb;AAAA,QACL,YAAAT;AAAA,QACA,eAAAF;AAAA,QACA,SAAAa;AAAA,MAAA;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GACF;AAEJ;AAEAm9C,GAAU,YAAY;AAAA,EACpB,aAAajzD,EAAU,KAAK;AAAA,EAC5B,aAAaA,EAAU,KAAK;AAC9B;ACvIA,MAAMszD,KAAoB,CAAC1uD,MAAU;AACnC,QAAM,EAAE,SAAAzE,GAAS,UAAA6mB,GAAU,OAAArgB,EAAA,IAAU/B,GAC/B,CAACqD,GAAMC,CAAO,IAAI0H,EAAS,EAAK,GAEhC4kC,IAAa,MAAMtsC,EAAQ,EAAI,GAC/BmM,IAAc,MAAMnM,EAAQ,EAAK,GAEjCqrD,IAAkB,OAAO1gD,MAAW;AACxC,UAAMyvC,GAAa,iBAAiBzvC,EAAO,KAAK,EAAE,GAClD3K,EAAQ,EAAK;AAAA,EACf,GAEMsrD,IAAkB,CAAC3gD,MAAW;AAClC,UAAMy7B,IAASwiB,GAAoB3wD,GAASwG,GAAOkM,EAAO,IAAI;AAC9D,IAAAmU,EAASsnB,CAAM,GACfpmC,EAAQ,EAAK;AAAA,EACf;AAEA,SACE,gBAAArH,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,IAAA,EAAS,KAAI,eACZ,UAAA,gBAAAzP;AAAA,MAACiB;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,SAAS,CAACiI,MAAM;AACd,UAAAA,EAAE,gBAAA,GACFwrC,EAAA;AAAA,QACF;AAAA,QAEC,UAAAhmC,EAAO;AAAA,MAAA;AAAA,IAAA,GAEZ;AAAA,IAEA,gBAAA3N;AAAA,MAACuI;AAAA,MAAA;AAAA,QACC,UAAQ;AAAA,QACR,MAAAnB;AAAA,QACA,QAAQoM;AAAA,QACR,iBAAgB;AAAA,QAEhB,UAAA;AAAA,UAAA,gBAAAvU,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,4BAACA,EAAM,OAAN,EAAY,UAAA,yCAAA,CAAsC,EAAA,CACrD;AAAA,UACA,gBAAAtJ,EAACsJ,EAAM,MAAN,EACC,UAAA,gBAAAtJ;AAAA,YAACmzD;AAAA,YAAA;AAAA,cACC,aAAaO;AAAA,cACb,aAAaD;AAAA,YAAA;AAAA,UAAA,GAEjB;AAAA,UACA,gBAAAzzD,EAACsJ,EAAM,QAAN,EAAa,WAAU,yBACtB,UAAA,gBAAAtJ,EAACyP,IAAA,EAAS,KAAI,SACZ,UAAA,gBAAAzP;AAAA,YAACiB;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,SAAS,CAACiI,MAAM;AACd,gBAAAA,EAAE,gBAAA,GACFqL,EAAA;AAAA,cACF;AAAA,cACD,UAAA;AAAA,YAAA;AAAA,UAAA,GAGH,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAEAi/C,GAAkB,YAAY;AAAA,EAC5B,SAAStzD,EAAU,OAAO;AAAA,EAC1B,UAAUA,EAAU,KAAK;AAAA,EACzB,OAAOA,EAAU,OAAO;AAC1B;AC3EA,MAAMyzD,KAAoB,CAAC,EAAE,YAAA9yC,QAAiB;AAC5C,QAAM,EAAE,aAAaC,IAAa,CAAA,GAAI,eAAeC,IAAU,MAC7DF;AAEF,MAAI,CAACC,EAAW,OAAQ,QAAO;AAE/B,QAAME,IAAeC,GAAgBF,CAAO,GACtC6yC,IAAiB9yC,EAAW,IAAI,CAAC+yC,MAAc;AACnD,UAAM,EAAE,IAAAhlC,GAAI,OAAAhoB,GAAO,OAAAT,GAAO,OAAA/E,MAAUwyD;AACpC,6BACG,MAAA,EACC,UAAA;AAAA,MAAA,gBAAA7zD,EAAC,QAAI,UAAA6G,EAAA,CAAM;AAAA,MACX,gBAAA7G,EAAC,QAAI,UAAAoG,EAAA,CAAM;AAAA,MACX,gBAAApG,EAAC,QAAI,UAAAqB,EAAA,CAAM;AAAA,IAAA,EAAA,GAHJwtB,CAIT;AAAA,EAEJ,CAAC;AACD,SACE,gBAAA9tB,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAtI,EAAC,OAAA,EAAI,WAAU,0BAAyB,UAAA;AAAA,MAAA;AAAA,MAChBigB;AAAA,IAAA,GACxB;AAAA,IACA,gBAAAjgB,EAAC+yD,MAAM,MAAK,MAAK,UAAQ,IAAC,YAAU,IAAC,WAAU,OAC7C,UAAA;AAAA,MAAA,gBAAA9zD,EAAC,WAAM,WAAU,eACf,4BAAC,MAAA,EACE,UAAA,CAAC,SAAS,SAAS,OAAO,EAAE,IAAI,CAACue,MAChC,gBAAAve,EAAC,MAAA,EAAgB,eAARue,CAAc,CACxB,GACH,EAAA,CACF;AAAA,MACA,gBAAAve,EAAC,WAAO,UAAA4zD,EAAA,CAAe;AAAA,IAAA,EAAA,CACzB;AAAA,EAAA,GACF;AAEJ;AAEAD,GAAkB,YAAY;AAAA,EAC5B,YAAYzzD,EAAU,MAAM;AAAA,IAC1B,aAAaA,EAAU;AAAA,MACrBA,EAAU,MAAM;AAAA,QACd,IAAIA,EAAU;AAAA,QACd,OAAOA,EAAU;AAAA,QACjB,OAAOA,EAAU;AAAA,QACjB,OAAOA,EAAU;AAAA,MAAA,CAClB;AAAA,IAAA;AAAA,IAEH,eAAeA,EAAU;AAAA,EAAA,CAC1B,EAAE;AACL;ACxCA,MAAM6zD,KAAoB3zD,GAAW,CAAC,EAAE,OAAAyG,EAAA,GAAStG,MAAQ;AAEvD,QAAM2d,IAASrX,GAAO,UAAU,CAAA,GAE1B,CAAC4f,GAAWutC,CAAY,IAAIlkD,EAASoO,CAAM,GAG3CU,IAAyBne,GAAO,IAAI;AAO1C,MAJAK,GAAoBP,GAAK,OAAO;AAAA,IAC9B,YAAY,MAAMkmB;AAAA,EAAA,EAClB,GAEEvI,EAAO,WAAW,EAAG,QAAOG;AAEhC,QAAM0B,IAAa,CAAC+B,GAAWC,MAAc;AAC3C,UAAMkyC,IAAgBC,GAAUztC,GAAW3E,GAAWC,CAAS;AAC/D,IAAAiyC,EAAaC,CAAa;AAAA,EAC5B,GAGME,IAAsBpyD,GAAOmc,GAAQ,CAAC,UAAU,CAAC,KAAK,CAAA,GACtDk2C,IAAkBryD,GAAO0kB,GAAW,CAAC,UAAU,CAAC,KAAK,CAAA,GAErDkkB,IAAQ,CAAChzB,GAAKgL,IAAQ,OAAU;AACpC,UAAM,EAAE,OAAApE,GAAO,OAAAnY,GAAO,MAAAJ,EAAA,IAAS2R,GAMzB7D,IACJ,gBAAA/S,EAAC,OAAA,EAAI,WALc,6BACnB4hB,IAAQ,YAAY,WACtB,KAIK,UAAA;AAAA,MAAAjE,GAAmBH,GAAOnY,GAAOqT,EAAW,YAAYzT,IAAO,UAAUA,CAAI;AAAA,MAC9E,gBAAAhG,EAACq0D,IAAA,EAAuB,YAAY18C,EAAA,CAAK;AAAA,IAAA,GAC3C;AAIF,WAAKgL,IAYH,gBAAA3iB;AAAA,MAAC6f;AAAA,MAAA;AAAA,QAEC,MAAM6mC,GAAK;AAAA,QACX,OAAO,EAAE,KAAK/uC,EAAI,OAAO,GAAGA,EAAA;AAAA,QAC5B,OAAM;AAAA,QACN,YAAAoI;AAAA,QACA,SAAO;AAAA,QAEN,UAAAjM;AAAA,MAAA;AAAA,MAPI,GAAG1N,CAAK,IAAIuc,IAAQ,QAAQ,SAAS;AAAA,IAAA,IAX1C,gBAAA3iB;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAEV,UAAA,gBAAAA,EAAC,SAAK,UAAA8T,EAAA,CAAQ;AAAA,MAAA;AAAA,MAHT,GAAG1N,CAAK,IAAIuc,IAAQ,QAAQ,SAAS;AAAA,IAAA;AAAA,EAoBlD,GAEM2xC,IAAoBH,EACvB,IAAI,CAAC/tD,MAAUukC,EAAMvkC,GAAO,EAAK,CAAC,EAClC,OAAO,OAAO,GACXmuD,IAAgBH,EACnB,IAAI,CAAChuD,MAAUukC,EAAMvkC,GAAO,EAAI,CAAC,EACjC,OAAO,OAAO;AAEjB,SACE,gBAAArF,EAAC,OAAA,EAAI,WAAU,4BACb,UAAA;AAAA,IAAA,gBAAAA,EAAC2iB,IAAA,EAAI,WAAU,YACb,UAAA;AAAA,MAAA,gBAAA1jB,EAAC2jB,IAAA,EAAI,IAAI,GACP,UAAA,gBAAA3jB,EAAC8U,MAAO,OAAM,uBAAsB,sCAAwB,EAAA,CAC9D;AAAA,MACA,gBAAA9U,EAAC2jB,MAAI,IAAI,GAAG,WAAU,gBACpB,UAAA,gBAAA5iB,EAAC+T,IAAA,EAAO,OAAM,mBAAkB,UAAA;AAAA,QAAA;AAAA,QACdpG,EAAO;AAAA,QAAwB;AAAA,MAAA,EAAA,CACjD,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IACA,gBAAA1O;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK4e;AAAA,QACL,WAAU;AAAA,QACV,OAAO;AAAA,UACL,WAAW;AAAA,UACX,WAAW;AAAA,UACX,WAAW;AAAA,UACX,UAAU;AAAA;AAAA,QAAA;AAAA,QAGZ,UAAA,gBAAA7d,EAAC2iB,IAAA,EAAI,WAAU,cACb,UAAA;AAAA,UAAA,gBAAA1jB;AAAA,YAAC2jB;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,cACJ,OAAO;AAAA,gBACL,UAAU;AAAA,cAAA;AAAA,cAGX,UAAA2wC;AAAA,YAAA;AAAA,UAAA;AAAA,UAEH,gBAAAt0D;AAAA,YAAC2jB;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,cACJ,OAAO;AAAA,gBACL,UAAU;AAAA,cAAA;AAAA,cAGX,UAAA4wC;AAAA,YAAA;AAAA,UAAA;AAAA,QACH,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAv0D,EAAC2e,MAAU,wBAAAC,EAAA,CAAgD;AAAA,EAAA,GAC7D;AAEJ,CAAC;AAEDm1C,GAAkB,cAAc;ACvHhC,MAAMS,KAAgB,CAAC;AAAA,EACrB,OAAA3tD,IAAQ,CAAA;AAAA,EACR,SAAA7C,IAAU,CAAA;AAAA,EACV,aAAAiE;AAAA,EACA,QAAA+b,IAAS,MAAM;AAAA,EAAC;AAClB,MAAM;AACJ,QAAM,CAAC7b,GAAMC,CAAO,IAAI0H,EAAS,EAAK,GAChCmU,IAAoBxjB,GAAO,IAAI;AAErC,OAAKoG,EAAM,UAAU,CAAA,GAAI,WAAW,EAAG,QAAO;AAE9C,QAAMid,IAAa,CAACmwC,MAAkB;AAEpC,UAAMvrD,IAAUxD,EAAUlB,CAAO;AACjC,IAAA0E,EAAQ,oBAAoB,OAAO7B,EAAM,GAAG,EAAE,SAASotD,GACvDvrD,EAAQ,UAAU,IAClBsb,EAAO,IAAIjf,GAASW,GAAA,GAAiBgD,CAAO,CAAC;AAAA,EAC/C;AAEA,SACE,gBAAA3H,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAtI;AAAA,MAACiT,GAAS;AAAA,MAAT;AAAA,QACC,UAAU,kBAAkBnN,EAAM,KAAK;AAAA,QACvC,SAAS,MAAMuB,EAAQ,EAAI;AAAA,QAE1B,UAAA;AAAA,UAAAsG,EAAO;AAAA,UAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEjB,gBAAA1O;AAAA,MAAC4jB;AAAA,MAAA;AAAA,QACC,aAAA3b;AAAA,QACA,WAAW,EAAE,MAAAE,GAAM,SAAAC,EAAA;AAAA,QACnB,QAAQ0b;AAAA,QAER,UAAA,gBAAA9jB,EAAC+zD,IAAA,EAAkB,KAAK9vC,GAAmB,OAAApd,EAAA,CAAc;AAAA,MAAA;AAAA,IAAA;AAAA,EAC3D,GACF;AAEJ;AAEA2tD,GAAc,YAAY;AAAA,EACxB,OAAOt0D,EAAU;AAAA,EACjB,SAASA,EAAU;AAAA,EACnB,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,QAAQzE,EAAU;AACpB;AACAs0D,GAAc,eAAe;AAAA,EAC3B,OAAO,CAAA;AAAA,EACP,SAAS,CAAA;AAAA,EACT,QAAQ,MAAM;AAAA,EAAC;AACjB;ACzBA,SAASC,GAAW3vD,GAAO;AACzB,QAAM,EAAE,MAAAkD,GAAM,aAAAC,GAAa,UAAAif,GAAU,cAAA4oC,MAAiBhrD,GAChD,CAACkrD,GAAc0E,CAAe,IAAI5kD,EAAS,CAAA,CAAE,GAE7C6kD,IAAoB,CAACvwD,MAAa;AACtC,IAAAswD,EAAgB,CAACzsB,OAAU;AAAA,MACzB,GAAGA;AAAA,MACH,CAAC7jC,CAAQ,GAAG,CAAC6jC,EAAK7jC,CAAQ;AAAA,IAAA,EAC1B;AAAA,EACJ,GAEMwwD,IAAa,CAAC5C,MAAO;AACzB,UAAM,EAAE,aAAAX,GAAa,OAAAxqD,EAAA,IAAUmrD,GACzBxjB,IAAS2iB,GAAkBE,GAAarpD,GAAMnB,CAAK;AACzD,IAAAqgB,EAASsnB,CAAM;AAAA,EACjB,GAEM8gB,IAAa,CAAC0C,MAAO;AACzB,UAAM,EAAE,UAAUr2C,GAAW,OAAOD,MAAWs2C,GACzCxjB,IAAS8d,GAAetkD,GAAM2T,GAAWD,CAAM;AACrD,IAAAwL,EAASsnB,CAAM;AAAA,EACjB,GAEMqmB,IAAgB,CAAC7nB,MAAW;AAChC,UAAMwB,IAASqd,GAAkB7e,GAAQhlC,CAAI;AAC7C,IAAAkf,EAASsnB,CAAM;AAAA,EACjB,GAEMsmB,IAAqB,OAAO9nB,MAAW;AAC3C,UAAMwB,IAASsd,GAAuB9e,GAAQhlC,GAAMC,CAAW;AAC/D,IAAAif,EAASsnB,CAAM;AAAA,EACjB,GAEMumB,IAAwB,OAAO/nB,MAAW;AAC/B,UAAM1kB,GAAa,oBAAoB0kB,EAAO,EAAE;AAAA,EACjE,GAEMgoB,IAAgB,CAACr5C,GAAW3U,MAAa;AAC7C,UAAMwnC,IAASyd,GAAkBjkD,GAAM2T,GAAW3U,CAAQ;AAC1D,IAAAkgB,EAASsnB,CAAM;AAAA,EACjB,GAEMtlB,IAAgB,CAACslB,MAAW;AAChC,IAAAtnB,EAASsnB,CAAM;AAAA,EACjB,GAgBMrnC,IAAS,CAAA,GAGT2T,IAAeD;AAAA,IACnB7S,EAAK,oBAAoB,UAAU,CAAA;AAAA,IACnCA,EAAK,UAAU,UAAU,CAAA;AAAA,EAAC,GAItBsT,IAAe,CAAA;AACrB,SAAAR,EAAa,QAAQ,CAAC3B,MAAS;AAC7B,IAAIA,EAAK,SAAS,UAEhBA,EAAK,OAAO,QAAQ,CAAC8wB,MAAc;AACjC,MAAA3uB,EAAa,KAAK2uB,EAAU,IAAI;AAAA,IAClC,CAAC,IAGD3uB,EAAa,KAAKnC,EAAK,IAAI;AAAA,EAE/B,CAAC,IAEAmC,KAAgB,CAAA,GAAI,QAAQ,CAACzU,MAAU;AACtC,UAAMzC,IAAW,GAAGyC,EAAM,GAAG,IAGvB8W,IAAY5D,GAAoB/R,EAAK,UAAU5D,CAAQ,GAEvD8Z,IACJ,gBAAAle;AAAA,MAAC+xD;AAAA,MAAA;AAAA,QACC,SAAS/pD;AAAA,QACT,aAAAC;AAAA,QACA,UAAAif;AAAA,QACA,OAAArgB;AAAA,QACA,cAAAipD;AAAA,QACA,cAAcE,EAAa5rD,CAAQ;AAAA,MAAA;AAAA,IAAA,GAIjC+gB,IAAa;AAAA,MACjBxgB,EAAU,cAAc;AAAA,MACxBA,EAAU,cAAc;AAAA,IAAA,EACxB,SAASsD,CAAW,GAEhB26B,IAAc,gBAAA5iC,EAAC0d,IAAA,EAAY,OAAA7W,GAAc,WAAA8W,EAAA,CAAsB,GAE/Ds3C,IACJ,gBAAAl0D,EAAC,OAAA,EAAI,WAAU,UACb,UAAA;AAAA,MAAA,gBAAAf,EAAC,SAAI,WAAU,QACb,4BAACqyD,IAAA,EAAY,UAAUuC,GAAY,OAAA/tD,GACjC,UAAA,gBAAA7G;AAAA,QAACwzD;AAAA,QAAA;AAAA,UACC,SAASxrD;AAAA,UACT,UAAAkf;AAAA,UACA,OAAArgB;AAAA,QAAA;AAAA,MAAA,GAEJ,EAAA,CACF;AAAA,MACA,gBAAA7G,EAACuJ,MAAY,WAAU,QACrB,4BAACspD,IAAA,EAAa,OAAAhsD,GAAc,MAAAmB,GAAY,EAAA,CAC1C;AAAA,MACA,gBAAAhI,EAACuJ,IAAA,EACC,UAAA,gBAAAxI,EAACstD,IAAA,EAAc,SAAS,IACtB,UAAA;AAAA,QAAA,gBAAAruD;AAAA,UAACinB;AAAA,UAAA;AAAA,YACC,UAAU+tC;AAAA,YACV,YAAA7vC;AAAA,YACA,OAAAte;AAAA,YACA,IAAG;AAAA,UAAA;AAAA,QAAA;AAAA,QAEL,gBAAA7G;AAAA,UAACmT;AAAA,UAAA;AAAA,YACC,KAAI;AAAA,YACJ,SAASm8C;AAAA,YACT,SAAS,EAAE,UAAAlrD,GAAU,OAAO,KAAA;AAAA,YAC5B,IAAG;AAAA,YACH,OAAM;AAAA,YACN,IAAG;AAAA,UAAA;AAAA,QAAA;AAAA,QAEL,gBAAApE;AAAA,UAACw0D;AAAA,UAAA;AAAA,YACC,OAAA3tD;AAAA,YACA,SAASmB;AAAA,YACT,aAAAC;AAAA,YACA,QAAQif;AAAA,UAAA;AAAA,QAAA;AAAA,QAEV,gBAAAlnB,EAACgU,GAAS,SAAT,EAAiB;AAAA,QAClB,gBAAAhU;AAAA,UAACouD;AAAA,UAAA;AAAA,YACC,SAAS30C,EAAW;AAAA,YACpB,QAAQrV;AAAA,YACR,SAAS4D;AAAA,YACT,WAAWkhB;AAAA,YACX,IAAG;AAAA,UAAA;AAAA,QAAA;AAAA,MACL,EAAA,CACF,EAAA,CACF;AAAA,IAAA,GACF,GAUIgsC,IACJ,gBAAAl1D;AAAA,MAAC0c;AAAA,MAAA;AAAA,QAEC,UAAAtY;AAAA,QACA,cAAcuwD;AAAA,QACd,YAXF,gBAAA5zD,EAAAsI,GAAA,EACG,UAAA;AAAA,UAAAu5B;AAAA,UACAqyB;AAAA,QAAA,GACH;AAAA,QAUG,UAAA/2C;AAAA,MAAA;AAAA,MALI,iBAAiB9Z,CAAQ;AAAA,IAAA;AAQlC,IAAA+C,EAAO,KAAK+tD,CAAO;AAAA,EACrB,CAAC,GAGC,gBAAAl1D,EAAC,OAAA,EACC,UAAA,gBAAAe,EAAC6lC,IAAA,EAAK,WAAU,YACd,UAAA;AAAA,IAAA,gBAAA7lC,EAAC6lC,GAAK,QAAL,EAAY,IAAG,MAAK,WAAW,GAAGzuB,EAAG,qBAAqB,UAAA;AAAA,MAAA;AAAA,MAEzD,gBAAApX,EAAC,QAAA,EAAK,WAAU,6BACd,UAAA;AAAA,QAAA,gBAAAf;AAAA,UAAC+jB;AAAA,UAAA;AAAA,YACC,SAAS/b;AAAA,YACT,aAAAC;AAAA,YACA,QAAQif;AAAA,UAAA;AAAA,QAAA;AAAA,QAEV,gBAAAlnB;AAAA,UAAC68C;AAAA,UAAA;AAAA,YACC,SAAS70C;AAAA,YACT,aAAAC;AAAA,YACA,QAAQif;AAAA,UAAA;AAAA,QAAA;AAAA,QAEV,gBAAAlnB,EAAConB,IAAA,EAAgB,UAAUytC,EAAA,CAAe;AAAA,QAC1C,gBAAA70D;AAAA,UAACu0C;AAAA,UAAA;AAAA,YACC,UAAUugB;AAAA,YACV,UAAUC;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IACA,gBAAA/0D,EAAC4mC,GAAK,MAAL,EAAU,WAAU,OACnB,UAAA,gBAAA5mC,EAAC,OAAA,EAAK,UAAAmH,EAAA,CAAO,EAAA,CACf;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;AAEAstD,GAAW,YAAY;AAAA,EACrB,MAAMv0D,EAAU,OAAO;AAAA,EACvB,UAAUA,EAAU,KAAK;AAAA,EACzB,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,cAAczE,EAAU;AAC1B;AAEAu0D,GAAW,eAAe,EAAE,cAAc,GAAC;AC5P3C,MAAqBU,WAA2B9iC,GAAU;AAAA,EACxD,YAAYvtB,GAAO;AACjB,UAAMA,CAAK,GACX,KAAK,cAAcD,GAAM,UAAA;AAAA,EAC3B;AAAA,EAEA,eAAe;AACb,UAAM,EAAE,UAAAyL,MAAa,KAAK;AAC1B,IAAAA,EAAS,KAAK,YAAY,QAAQ,MAAM,MAAM;AAAA,EAChD;AAAA,EAEA,SAAS;AACP,UAAM,EAAE,WAAA6vB,GAAW,SAAA4K,EAAA,IAAY,KAAK;AACpC,WACE,gBAAAhqC;AAAA,MAACuI;AAAA,MAAA;AAAA,QACC,UAAQ;AAAA,QACR,UAAS;AAAA,QACT,MAAM62B;AAAA,QACN,QAAQ,MAAM4K,EAAA;AAAA,QACd,MAAK;AAAA,QAEL,UAAA;AAAA,UAAA,gBAAA/qC,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,4BAACA,EAAM,OAAN,EAAY,UAAA,kBAAA,CAAe,EAAA,CAC9B;AAAA,UACA,gBAAAtJ,EAACsJ,EAAM,MAAN,EAAW,OAAO,EAAE,UAAU,OAAA,GAC7B,UAAA,gBAAAvI,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,YAAA,gBAAAf,EAACC,GAAA,EAAK,WAAU,uBACd,UAAA,gBAAAc,EAACd,EAAK,OAAL,EAAW,WAAU,wBACpB,UAAA;AAAA,cAAA,gBAAAc,EAACC,IAAA,EACC,UAAA;AAAA,gBAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAgB,UAAA,OAAA,CAAI;AAAA,gBACrB,gBAAAhB,EAACC,EAAK,SAAL,EAAa,MAAK,QAAO,KAAK,KAAK,YAAA,CAAa;AAAA,cAAA,GACnD;AAAA,cACA,gBAAAc,EAAC,OAAA,EAAI,WAAU,QAAO,UAAA;AAAA,gBAAA;AAAA,kCAEnB,MAAA,EAAG;AAAA,gBAAE;AAAA,kCAIL,MAAA,EAAG;AAAA,gBAAE;AAAA,cAAA,EAAA,CAGR;AAAA,YAAA,EAAA,CACF,EAAA,CACF;AAAA,YACA,gBAAAA,EAACd,EAAK,OAAL,EACC,UAAA;AAAA,cAAA,gBAAAD,EAACiB,GAAA,EAAO,SAAQ,WAAU,SAAS,MAAM,KAAK,aAAA,GAAgB,UAAA,2CAAA,CAE9D;AAAA,cAAS;AAAA,cAET,gBAAAjB,EAACiB,KAAO,SAAQ,aAAY,SAAS,MAAM8pC,EAAA,GAAW,UAAA,SAAA,CAEtD;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,EAAA,CACF,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAoqB,GAAmB,YAAY;AAAA,EAC7B,WAAWj1D,EAAU,KAAK;AAAA,EAC1B,SAASA,EAAU,KAAK;AAAA,EACxB,UAAUA,EAAU,KAAK;AAC3B;AC5DA,MAAMk1D,KAAkB,CAACl9C,MAAU;AACjC,EAAAA,EAAM,gBAAA;AACR;AACA,MAAqBm9C,WAAqBhjC,GAAU;AAAA,EAClD,YAAYvtB,GAAO;AACjB,UAAMA,CAAK,GACX,KAAK,iBAAiBD,GAAM,UAAA;AAAA,EAC9B;AAAA,EAEA,eAAe;AACb,UAAM,EAAE,SAAAb,GAAS,MAAAsxD,GAAM,aAAAC,EAAA,IAAgB,KAAK,OACtCj0B,IAAQ,KAAK,eAAe,QAAQ,MAAM,KAAA,GAC1Ck0B,IAAY,EAAE,KAAKl0B,GAAO,OAAOA,EAAA,GAIjCm0B,IADOvwD,EAAUlB,CAAO,GAEtB,qBAAqB,eAAesxD,CAAI,GAAG,WAAW,CAAA;AAC9D,IAAAG,EAAU,KAAKD,CAAS,GAExBD,EAAYD,GAAMh0B,GAAOm0B,CAAS;AAAA,EACpC;AAAA,EAEA,SAAS;AACP,UAAM,EAAE,MAAAH,GAAM,UAAAz1D,EAAA,IAAa,KAAK;AAChC,WACE,gBAAAkB;AAAA,MAACd,EAAK;AAAA,MAAL;AAAA,QACC,MAAK;AAAA,QACL,IAAIyjB;AAAAA,QACJ,OAAO,EAAE,cAAc,SAAS,SAAS,eAAA;AAAA,QAEzC,UAAA;AAAA,UAAA,gBAAA3iB,EAACd,EAAK,OAAL,EACE,UAAA;AAAA,YAAAyO,EAAO;AAAA,YAAO;AAAA,YAAO4mD;AAAA,UAAA,GACxB;AAAA,UACA,gBAAAv0D,EAACC,IAAA,EAAW,WAAU,kBACpB,UAAA;AAAA,YAAA,gBAAAhB;AAAA,cAACC,EAAK;AAAA,cAAL;AAAA,gBACC,MAAK;AAAA,gBACL,MAAK;AAAA,gBACL,KAAK,KAAK;AAAA,gBACV,aAAY;AAAA,gBACZ,MAAK;AAAA,gBACL,SAASm1D;AAAA,gBACT,SAASA;AAAA,cAAA;AAAA,YAAA;AAAA,YAEX,gBAAAp1D;AAAA,cAACmT;AAAA,cAAA;AAAA,gBACC,KAAI;AAAA,gBACJ,SAAS,MAAM,KAAK,aAAA;AAAA,gBACpB,IAAG;AAAA,cAAA;AAAA,YAAA;AAAA,YAEJtT;AAAA,UAAA,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAw1D,GAAa,YAAY;AAAA,EACvB,SAASn1D,EAAU,OAAO;AAAA,EAC1B,MAAMA,EAAU,OAAO;AAAA,EACvB,aAAaA,EAAU,KAAK;AAAA,EAC5B,UAAUA,EAAU,KAAK;AAC3B;AClEA,MAAMw1D,KAAqB,CACzB1xD,GACAgqD,GACA5B,GACAC,GACA8B,GACAt6C,IAAK,aAEL,gBAAA7T;AAAA,EAACouD;AAAA,EAAA;AAAA,IACC,SAAApqD;AAAA,IACA,SAAAgqD;AAAA,IACA,QAAA5B;AAAA,IACA,SAAAC;AAAA,IACA,WAAA8B;AAAA,IACA,IAAAt6C;AAAA,EAAA;AACF;ACZF,SAAS8hD,GAAgB,EAAE,MAAAxwD,GAAM,OAAAoZ,GAAO,SAAAva,GAAS,MAAAsxD,GAAM,YAAAM,GAAY,OAAAC,KAAS;AAC1E,QAAM,CAACjR,GAAYkR,CAAa,IAAIhmD,EAASyO,CAAK;AAElD,EAAA1Z,GAAM,UAAU,MAAM;AACpB,IAAAixD,EAAcv3C,CAAK;AAAA,EACrB,GAAG,CAACA,CAAK,CAAC;AAEV,QAAM+b,IAAe,CAACpiB,MAAU;AAC9B,UAAM4e,IAAW5e,EAAM,OAAO;AAC9B,IAAA49C,EAAch/B,CAAQ,GACtB8+B,EAAW19C,GAAO/S,GAAMmwD,CAAI;AAAA,EAC9B;AAEA,SACE,gBAAAt1D,EAACC,EAAK,OAAL,EAAW,MAAK,MAAK,WAAW,wBAAwBkF,CAAI,IAC3D,UAAA,gBAAApE,EAACC,IAAA,EACC,UAAA;AAAA,IAAA,gBAAAhB,EAACgB,GAAW,MAAX,EAAiB,UAAAmE,EAAA,CAAK;AAAA,IACvB,gBAAAnF;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,MAAK;AAAA,QACL,MAAK;AAAA,QACL,OAAO2kD;AAAA,QACP,UAAUtqB;AAAA,MAAA;AAAA,IAAA;AAAA,IAEXo7B,GAAmB1xD,GAAS,UAAUmB,GAAMmwD,GAAMO,CAAK;AAAA,EAAA,EAAA,CAC1D,EAAA,CACF;AAEJ;AAEA,MAAME,KAASlxD,GAAM,KAAK8wD,EAAe;AACzCI,GAAO,cAAc;AAErB,SAASC,GAAiBlxD,GAAO;AAC/B,QAAM,EAAE,SAAAd,GAAS,MAAAsxD,GAAM,YAAAM,GAAY,OAAAC,MAAU/wD,GAEvC6pB,IACJ3qB,GAAS,qBAAqB,eAAesxD,CAAI,GAAG,WAAW,CAAA;AACjE,SAAI3mC,EAAQ,SAAS,IAAU,OAG7B,gBAAA3uB,EAAC2jB,IAAA,EAAI,IAAI,IACP,4BAACijB,GAAK,MAAL,EACE,UAAAjY,EAAQ,IAAI,CAAC,MACZ,gBAAA3uB,EAAC,OAAA,EAA6B,WAAU,QACtC,UAAA,gBAAAA;AAAA,IAAC+1D;AAAA,IAAA;AAAA,MACC,MAAM,EAAE;AAAA,MACR,OAAO,EAAE;AAAA,MACT,SAAA/xD;AAAA,MACA,MAAAsxD;AAAA,MACA,YAAAM;AAAA,MACA,OAAAC;AAAA,IAAA;AAAA,EAAA,KAPM,GAAG,EAAE,GAAG,IAAIP,CAAI,EAS1B,CACD,EAAA,CACH,GACF;AAEJ;AAEAU,GAAiB,YAAY;AAAA,EAC3B,SAAS91D,EAAU,OAAO;AAAA,EAC1B,MAAMA,EAAU,OAAO;AAAA,EACvB,YAAYA,EAAU,KAAK;AAAA,EAC3B,OAAOA,EAAU,KAAK;AACxB;AC7DA,SAAS+1D,GAAUnxD,GAAO;AACxB,QAAM,EAAE,SAAAd,GAAS,MAAAsxD,GAAM,OAAA1qB,GAAO,UAAA+G,GAAU,YAAAikB,MAAe9wD,GACjD,CAACkY,GAAQC,CAAS,IAAInN,EAAS,EAAK;AAO1C,2BACG4T,IAAA,EACC,UAAA;AAAA,IAAA,gBAAA1jB,EAAC2jB,IAAA,EAAI,IAAI,IACP,UAAA,gBAAA5iB;AAAA,MAACs0D;AAAA,MAAA;AAAA,QACC,SAAArxD;AAAA,QACA,MAAAsxD;AAAA,QACA,aAXgB,CAACY,GAAOpJ,GAAQqJ,MAAY;AAClD,UAAAl5C,EAAU,EAAI,GACd2tB,EAAMsrB,GAAOpJ,GAAQqJ,CAAO;AAAA,QAC9B;AAAA,QASQ,UAAAxkB;AAAA,QAEC,UAAA;AAAA,UAAA+jB,GAAmB1xD,GAAS,UAAUsxD,GAAM,IAAI3jB,CAAQ;AAAA,UACzD,gBAAA3xC;AAAA,YAACmT;AAAA,YAAA;AAAA,cACC,KAAK,OAAO6J,IAAS,aAAa,QAAQ;AAAA,cAC1C,SAAS,MAAMC,EAAU,CAACD,CAAM;AAAA,cAChC,IAAI,UAAUA,IAAS,OAAO,MAAM;AAAA,YAAA;AAAA,UAAA;AAAA,QACtC;AAAA,MAAA;AAAA,IAAA,GAEJ;AAAA,IACCA,KACC,gBAAAhd;AAAA,MAACg2D;AAAA,MAAA;AAAA,QACC,SAAAhyD;AAAA,QACA,MAAAsxD;AAAA,QACA,YAAAM;AAAA,QACA,OAAOjkB;AAAA,MAAA;AAAA,IAAA;AAAA,EACT,GAEJ;AAEJ;AAEAskB,GAAU,YAAY;AAAA,EACpB,SAAS/1D,EAAU,OAAO;AAAA,EAC1B,MAAMA,EAAU,OAAO;AAAA,EACvB,OAAOA,EAAU,KAAK;AAAA,EACtB,YAAYA,EAAU,KAAK;AAAA,EAC3B,UAAUA,EAAU,KAAK;AAC3B;ACvCA,SAASk2D,GAAkBtxD,GAAO;AAChC,QAAM,EAAE,SAAAd,GAAS,UAAA2tC,EAAA,IAAa7sC,GAExB,CAACuxD,GAAeC,CAAgB,IAAIxmD,EAAS,EAAK,GAElDymD,IAAQ,CAACl7C,GAAMqxC,GAAYC,MAAmB;AAClD,UAAMne,IAASie,GAAgBzoD,GAASqX,GAAMqxC,GAAYC,CAAc;AACxE,IAAAhb,EAASnD,CAAM,GACf8nB,EAAiB,EAAK;AAAA,EACxB,GAEME,IAAW,CAAC/uD,MAAe;AAC/B,UAAMgvD,IAAM,EAAE,GAAGzyD,EAAQ,qBAAqB,eAAA;AAC9C,IAAAyyD,EAAIhvD,CAAU,IAAI,CAAA;AAClB,UAAM+mC,IAAS+d,GAAgBvoD,GAASyD,GAAYgvD,CAAG;AACvD,IAAA9kB,EAASnD,CAAM,GACf8nB,EAAiB,EAAK;AAAA,EACxB,GAEMI,IAAsB,CAACx+C,GAAOvQ,GAAWolD,MAAc;AAC3D,UAAMzrB,IAAQppB,EAAM,OAAO,OACrBs2B,IAASoe,GAAkB5oD,GAAS2D,GAAWolD,GAAWzrB,CAAK;AACrE,IAAAqQ,EAASnD,CAAM;AAAA,EACjB;AAEA,2BACG,OAAA,EACC,UAAA;AAAA,IAAA,gBAAAztC,EAAC6lC,IAAA,EAAK,WAAU,YACd,UAAA;AAAA,MAAA,gBAAA7lC,EAAC6lC,GAAK,QAAL,EAAY,IAAG,MAAK,WAAW,GAAGzuB,EAAG,gBAAgB,UAAA;AAAA,QAAA;AAAA,QAEpD,gBAAAnY;AAAA,UAACmT;AAAA,UAAA;AAAA,YACC,KAAI;AAAA,YACJ,SAAS,MAAMmjD,EAAiB,EAAI;AAAA,YACpC,IAAG;AAAA,YACH,MAAK;AAAA,YACL,IAAG;AAAA,YACH,KAAI;AAAA,YACJ,QAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MACT,GACF;AAAA,MACA,gBAAAt2D,EAAC4mC,GAAK,MAAL,EACE,UAAA,OAAO,KAAK5iC,EAAQ,qBAAqB,kBAAkB,CAAA,CAAE,EAAE;AAAA,QAC9D,CAACsxD,MAEG,gBAAAt1D;AAAA,UAACi2D;AAAA,UAAA;AAAA,YAEC,SAAAjyD;AAAA,YACA,MAAAsxD;AAAA,YACA,OAAOiB;AAAA,YACP,UAAA5kB;AAAA,YACA,YAAY+kB;AAAA,UAAA;AAAA,UALPpB;AAAA,QAAA;AAAA,MAQX,EACF,CACF;AAAA,IAAA,GACF;AAAA,IACA,gBAAAt1D;AAAA,MAACm1D;AAAA,MAAA;AAAA,QACC,WAAWkB;AAAA,QACX,SAAS,MAAMC,EAAiB,EAAK;AAAA,QACrC,UAAUE;AAAA,MAAA;AAAA,IAAA;AAAA,EACZ,GACF;AAEJ;AAEAJ,GAAkB,YAAY;AAAA,EAC5B,SAASl2D,EAAU,OAAO;AAAA,EAC1B,UAAUA,EAAU,KAAK;AAC3B;AC9EA,MAAMy2D,KAAgB,CAAC,EAAE,WAAAzuD,GAAW,UAAArI,QAAe;AACjD,QAAM,EAAE,MAAAsI,GAAM,SAAAC,EAAA,IAAYF;AAC1B,SAAKC,IAGH,gBAAApH;AAAA,IAACuI;AAAA,IAAA;AAAA,MACC,UAAQ;AAAA,MACR,MAAAnB;AAAA,MACA,QAAQ,MAAMC,EAAQ,EAAK;AAAA,MAC3B,YAAU;AAAA,MACV,UAAS;AAAA,MAET,UAAA;AAAA,QAAA,gBAAApI,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,4BAACA,EAAM,OAAN,EAAY,UAAA,kBAAA,CAAe,EAAA,CAC9B;AAAA,QACA,gBAAAtJ,EAACsJ,EAAM,MAAN,EAAY,UAAAzJ,EAAA,CAAS;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IAbR;AAgBpB;AAEA82D,GAAc,YAAY;AAAA,EACxB,WAAWz2D,EAAU,MAAM;AAAA,IACzB,MAAMA,EAAU,KAAK;AAAA,IACrB,SAASA,EAAU,KAAK;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,UAAUA,EAAU,KAAK;AAC3B;AC1BA,MAAM02D,KAAU,CAAA9xD,MAAS;AACvB,QAAM,EAAE,MAAAmO,MAASnO,GAEX,CAAC,EAAE,YAAAga,EAAA,GAAcoB,CAAI,IAAIE,GAAQ,OAC9B;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAAnB,OACA,EAAE,YAAYA,EAAQ,aAAW;AAAA,IAE1C,MAAMhM;AAAA,EAAA,EAET;AAED,SACE,gBAAAlS,EAAC,OAAA,EAAmB,WAAU,4BAA2B,KAAKmf,GAC5D,UAAA;AAAA,IAAA,gBAAAlgB,EAAC,SAAI,WAAU,uBACb,4BAAC,KAAA,EAAG,UAAAiT,EAAK,OAAM,EAAA,CACjB;AAAA,sBACC,OAAA,EAAI,UAAA;AAAA,MAAA;AAAA,MAAEA,EAAK;AAAA,MAAI;AAAA,IAAA,EAAA,CAAC;AAAA,EAAA,EAAA,GAJTA,EAAK,GAKf;AAEJ;AAEA2jD,GAAQ,YAAY,EAAE,MAAM12D,EAAU,OAAO,WAAA;AAE7C,MAAM22D,KAAW,CAAA/xD,MAAS;AACxB,QAAM,EAAE,OAAA+mC,MAAU/mC;AAElB,SACE,gBAAA9E,EAAAqJ,GAAA,EACG,UAAAwiC,EAAM,IAAI,CAAA54B,MACT,gBAAAjT,EAAC42D,IAAA,EAAuB,IAAI3jD,EAAK,IAAI,MAAAA,EAAA,GAAvBA,EAAK,GAA8B,CAClD,GACH;AAEJ;AAEA4jD,GAAS,YAAY,EAAE,OAAO32D,EAAU,MAAM,WAAA;ACpC9C,MAAM42D,KAAa,CAAChyD,MAAU;AAC5B,QAAM,EAAE,SAAAzE,MAAYyE;AAEpB,MAAIzE,GAAS,uBAAuB;AAClC,WAAO;AAMT,QAAMuC,IAJeb;AAAAA,IACnB1B,EAAQ,oBAAoB,UAAU,CAAA;AAAA,IACtC,OAAKiE,EAAE;AAAA,EAAA,EAEmB,OAAO,CAAC4E,MAAMA,EAAE,EAAE;AAE9C,2BACG,SAAA,EACC,UAAA;AAAA,IAAA,gBAAAlJ,EAAC,OAAA,EAAI,WAAU,eAAc,UAAA,6EAG7B;AAAA,IACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,eAAc,UAAA,+EAG7B;AAAA,IACA,gBAAAA,EAAC62D,IAAA,EAAS,OAAOj0D,EAAA,CAAQ;AAAA,EAAA,GAC3B;AAEJ;AAEAk0D,GAAW,YAAY,EAAE,SAAS52D,EAAU,OAAO,WAAA;AC9BnD,MAAM62D,KAAoB,EAAE,YAAY,MAAA,GAClCC,KAAoB,EAAE,GAAGD,IAAmB,KAAK,GAAA,GACjDE,KAAY,CAAAlkD,MAAU,QAAQ,IAAI,oBAAoBA,CAAM,GAE5DmkD,KAAY,CAAC,EAAE,MAAAlvD,EAAA,MACnB,gBAAAjH,EAAAsI,GAAA,EACE,UAAA;AAAA,EAAA,gBAAArJ;AAAA,IAACm3D;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,UAAUC,GAAS;AAAA,MACnB,OAAOL;AAAA,MACP,WAAAE;AAAA,IAAA;AAAA,EAAA;AAAA,oBAED,OAAA,EACC,UAAA;AAAA,IAAA,gBAAAj3D,EAAC,OAAA,EAAI,WAAU,uBACb,UAAA,gBAAAA,EAAC,OAAG,UAAAgI,EAAK,MAAM,OAAM,EAAA,CACvB;AAAA,sBACC,OAAA,EAAI,UAAA;AAAA,MAAA;AAAA,MAAEA,EAAK,MAAM;AAAA,MAAI;AAAA,IAAA,EAAA,CAAC;AAAA,EAAA,GACzB;AAAA,EACA,gBAAAhI;AAAA,IAACm3D;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,UAAUC,GAAS;AAAA,MACnB,IAAG;AAAA,MACH,OAAOJ;AAAA,IAAA;AAAA,EAAA;AACT,GACF,GAGFK,KAAejkD,GAAK8jD,EAAS,GCzBvBI,KAAW,CAAC,EAAE,WAAAC,GAAW,UAAAC,EAAA,MAC7B,gBAAAx3D,EAAC,OAAA,EAAI,WAAWu3D,GAAY,UAAAC,EAAA,CAAS;AAGvCF,GAAS,YAAY;AAAA,EACnB,WAAWp3D,EAAU,OAAO;AAAA,EAC5B,UAAUA,EAAU,OAAO;AAC7B;AAEA,MAAMu3D,KAAsB,CAC1B5wD,GACA6wD,GACAH,IAAY,OACZI,IAAS,OACN;AACH,QAAMH,IACJD,MAAc,QAAQ7oD,EAAO,gBAAgBA,EAAO,cAChD+d,IAAM,eAAekrC,CAAM;AACjC,SACE,gBAAA52D,EAAC,OAAA,EAAI,WAAU,2BACZ,UAAA;AAAA,IAAA22D,IAAU,gBAAA13D,EAACs3D,IAAA,EAAS,WAAAC,GAAsB,UAAAC,EAAA,CAAoB,IAAK;AAAA,IACpE,gBAAAx3D,EAAC,SAAI,WAAWysB,GACd,4BAAC,KAAA,EAAG,UAAA5lB,EAAM,OAAM,EAAA,CAClB;AAAA,sBACC,OAAA,EAAI,UAAA;AAAA,MAAA;AAAA,MAAEA,EAAM;AAAA,MAAI;AAAA,IAAA,EAAA,CAAC;AAAA,EAAA,GACpB;AAEJ,GCrBM+wD,KAAuB,CAAC/rB,GAAOriB,MAAe;AAClD,QAAMquC,IAAehsB,EAAM;AAAA,IACzB,CAAAgB,MAAKA,EAAE,SAASloC,EAAU,WAAW;AAAA,EAAA;AAEvC,MAAIkzD,EAAa,SAAS,EAAG,QAAO,EAAE,OAAO,CAAA,GAAI,OAAO,GAAC;AAEzD,QAAMC,IAAc,CAAA,GACdC,IAAc,CAAA,GACd,EAAE,QAAQC,EAAA,IAAqBxuC;AAKrC,GAHEznB,GAAOi2D,GAAkB,CAAC,YAAY,aAAa,CAAC,KAAK,CAAA,GAG9C,QAAQ,CAAAnxD,MAAS;AAC5B,QAAIoxD,IAAiBJ,EAAa,KAAK,CAAAhrB,MAAKhmC,EAAM,QAAQgmC,EAAE,KAAK,IAAI,GACjEtuB,IAAQk5C,GAAoB5wD,GAAO,EAAI;AAC3C,QAAI,CAACoxD,GAAgB;AAInB,UAHAA,IAAiBJ,EAAa;AAAA,QAAK,CAAAhrB,MACjChmC,EAAM,IAAI,WAAW,GAAGgmC,EAAE,KAAK,IAAI,GAAG;AAAA,MAAA,GAEpC,CAACorB,EAAgB;AACrB,MAAA15C,IAAQk5C,GAAoB5wD,GAAO,IAAM,KAAK;AAAA,IAChD;AAEA,UAAMqxD,IAAOrxD,EAAM,KACbquD,IAAU;AAAA,MACd,IAAIgD;AAAA,MACJ,MAAMvzD,EAAU,WAAW;AAAA,MAC3B,MAAM,EAAE,OAAA4Z,GAAO,OAAA1X,GAAO,MAAAqxD,EAAA;AAAA,MACtB,OAAOD,EAAe;AAAA,MACtB,QAAQA,EAAe;AAAA,IAAA;AAEzB,IAAAH,EAAY,KAAK5C,CAAO;AAAA,EAC1B,CAAC,GAGD4C,EAAY,QAAQzsB,EAAa,GACjCysB,EAAY,KAAKxsB,EAAc;AAG/B,QAAM6sB,IAAe,CAAA;AACrB,SAAAL,EAAY,QAAQ,CAAC7kD,GAAM4B,MAAU;AACnC,QAAIA,MAAU;AACZ,MAAAsjD,EAAa,KAAKllD,CAAI;AAAA,SACjB;AACL,YAAMmlD,IAAWD,EAAatjD,IAAQ,CAAC,GACjCwjD,IAAc;AAAA,QAClB,GAAGD,EAAS,SAAS;AAAA,QACrB,GAAGA,EAAS,SAAS,KAAKvjD,IAAQ,KAAK,KAAK5B,EAAK;AAAA,MAAA;AAEnD,MAAAklD,EAAa,KAAK,EAAE,GAAGllD,GAAM,UAAUolD,GAAa;AAAA,IACtD;AAAA,EACF,CAAC,GAGDF,EAAa,QAAQ,CAACllD,GAAM4B,MAAU;AACpC,QAAIA,MAAU,EAAG;AACjB,UAAMujD,IAAWD,EAAatjD,IAAQ,CAAC;AACvC,IAAAkjD,EAAY,KAAK;AAAA,MACf,IAAI,GAAGK,EAAS,EAAE,IAAInlD,EAAK,EAAE;AAAA,MAC7B,QAAQmlD,EAAS;AAAA,MACjB,QAAQnlD,EAAK;AAAA,MACb,UAAU;AAAA,IAAA,CACX;AAAA,EACH,CAAC,GAEM,EAAE,OAAOklD,GAAc,OAAOJ,EAAA;AACvC,GCrEaO,KAAuB,CAACC,MAAY;AAC/C,QAAMpxD,IAASjC,EAAUqzD,KAAW,EAAE;AACtC,SAAO,OAAO,KAAKpxD,CAAM,EAAE,OAAO,CAAChF,GAAK8E,OACjCA,EAAI,WAAWtC,EAAU,YAAY,MACxCxC,EAAI8E,CAAG,IAAIE,EAAOF,CAAG,IAEhB9E,IACN,CAAA,CAAE;AACP,GAEaq2D,KAAsB,CAACD,GAASnxD,MAAa;AACxD,QAAMD,IAASjC,EAAUqzD,KAAW,EAAE,GAEhCxc,KADS30C,GAAU,UAAU,CAAA,GACH,QAAQ,CAACC,MAAUA,EAAM,UAAU,EAAE;AAErE,SAAO,OAAO,KAAKF,CAAM,EAAE,OAAO,CAAChF,GAAK8E,OACjC80C,EAAiB,SAAS90C,CAAG,MAChC9E,EAAI8E,CAAG,IAAIE,EAAOF,CAAG,IAEhB9E,IACN,CAAA,CAAE;AACP,GAEMs2D,KAAuB,CAAC7sB,GAAKzkC,GAAQqiB,MACzCoiB,EAAI,IAAI,CAAA5gB,MAAK;AACX,MAAIA,EAAE,SAASrmB,EAAU,WAAW,WAAWqmB,EAAE,MAAM;AACrD,UAAM,EAAE,MAAAktC,MAASltC,EAAE,MACbnkB,IAAQM,EAAO+wD,CAAI,KAAK,CAAA,GAMxB35C,IALgBm6C;AAAA,MACpBlvC,EAAW,UAAU,CAAA;AAAA,MACrB,CAAA+D,MAAKA,EAAE,OAAOA,EAAE,QAAQ2qC,KAAQ3qC,EAAE,IAAI,WAAW,GAAG2qC,CAAI,GAAG;AAAA,IAAA,IAIzDT,GAAoB5wD,GAAO,EAAI,IAC/B4wD,GAAoB5wD,GAAO,EAAK;AAEpC,IAAAmkB,EAAE,OAAO,EAAE,OAAAzM,GAAO,OAAA1X,GAAO,MAAMA,EAAM,IAAA;AAAA,EACvC;AACA,UACEmkB,EAAE,SAASrmB,EAAU,WAAW,SAChCqmB,EAAE,SAASrmB,EAAU,WAAW,YAEhCqmB,EAAE,YAAY,KAETA;AACT,CAAC,GAEU2tC,KAAmB,CAAC7zD,MAAU;AACzC,QAAM,EAAE,IAAA+pB,GAAI,OAAAhoB,GAAO,UAAAimC,EAAA,IAAahoC;AAChC,SAAO;AAAA,IACL,IAAI+pB,KAAMvW,GAAA;AAAA,IACV,MAAM3T,EAAU,WAAW;AAAA,IAC3B,MAAM;AAAA,MACJ,MAAMkC,EAAM;AAAA,MACZ,OAAAA;AAAA,MACA,OAAO4wD,GAAoB5wD,GAAO,EAAK;AAAA,IAAA;AAAA,IAEzC,UAAUimC,KAAY,EAAE,GAAG,GAAG,GAAG,EAAA;AAAA,EAAE;AAEvC,GAgBa8rB,KAAgB,CAACC,GAAQN,IAAU,OAAO;AACrD,QAAMO,IAAe,CAAC9rB,MAAWurB,EAAQ,SAASvrB,EAAO,GAAG;AAC5D,SAAO6rB,EAAO;AAAA,IAAI,CAACE,MACjBA,EAAM,KAAK,QACP;AAAA,MACE,GAAGA;AAAA,MACH,MAAM;AAAA,QACJ,OAAOtB;AAAA,UACLsB,EAAM,KAAK;AAAA,UACX;AAAA,UACA;AAAA,UACAD,EAAaC,EAAM,KAAK,KAAK,IAAI,KAAK;AAAA,QAAA;AAAA,QAExC,OAAOA,EAAM,KAAK;AAAA,QAClB,MAAMA,EAAM,KAAK,MAAM;AAAA,MAAA;AAAA,MAEzB,OAAO;AAAA,QACL,QAAQD,EAAaC,EAAM,KAAK,KAAK,IACjC,mBACA;AAAA,QACJ,OAAOD,EAAaC,EAAM,KAAK,KAAK,IAAI,SAAS;AAAA,MAAA;AAAA,IACnD,IAEFA;AAAA,EAAA;AAER,GAQaC,KAAoB,CAACl0D,MAAU;AAC1C,QAAM,EAAE,YAAA0kB,GAAY,mBAAAyvC,GAAmB,UAAAC,IAAW,cAAcp0D,GAC1D,EAAE,MAAA4mC,GAAM,YAAA0C,GAAY,QAAAjnC,EAAA,IAAW8xD,GAC/B,EAAE,OAAAptB,GAAO,OAAAC,GAAO,UAAAE,EAAA,IAAaoC,IAC/BlpC,EAAUkpC,CAAU,IACpB3C,GAAkBC,CAAI;AAE1B,MAAIwtB,MAAa,WAAW;AAE1B,UAAMC,IACJ,OAAO,KAAK3vC,CAAU,EAAE,WAAW,IAAIyvC,IAAoBzvC,GACvD4vC,IAAmBxB,GAAqB/rB,GAAOstB,CAAc;AACnE,WAAO;AAAA,MACL,OAAOC,EAAiB;AAAA,MACxB,OAAOA,EAAiB;AAAA,MACxB,UAAU;AAAA,QACR,GAAG;AAAA,QACH,GAAG;AAAA,QACH,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,EAEJ;AAOA,SAAO,EAAE,OAHYX,GAAqB5sB,GAAO1kC,GAAQqiB,CAAU,GAGrC,OAAAsiB,GAAO,UAAAE,EAAA;AACvC,GC7HMqtB,KAAY,EAAE,cAAcnC,GAAA,GAE5BoC,KAAU,CAAAx0D,MAAS;AACvB,QAAM,EAAE,SAAAzE,GAAS,QAAA2jB,EAAA,IAAWlf,GACtBy0D,IAAqBl5D,EAAQ,qBAC7Bm5D,IAAmB/4D,GAAO,IAAI,GAC9B,CAACk+B,GAAUC,CAAW,IAAI9uB;AAAA,IAAS,MACvCkpD,GAAkB;AAAA,MAChB,YAAYO;AAAA,MACZ,mBAAmBA;AAAA,IAAA,CACpB;AAAA,EAAA,GAEG,CAACE,GAAmBC,CAAoB,IAAI5pD,EAAS,IAAI,GACzD,CAAC+7B,GAAO8tB,GAAUC,CAAa,IAAIC,GAAcl7B,EAAS,KAAK,GAC/D,CAACmN,GAAOguB,GAAUC,CAAa,IAAIC,GAAcr7B,EAAS,KAAK,GAE/Ds4B,IAAY7gD;AAAA,IAChB,CAAArD,MACE+mD;AAAA,MAAS,CAAAG,MACPC;AAAA,QACE;AAAA,UACE,GAAGnnD;AAAA,UACH,UAAU;AAAA,UACV,WAAW,EAAE,MAAMg5B,GAAW,YAAA;AAAA,UAC9B,OAAO;AAAA;AAAA,QAAA;AAAA,QAGTkuB;AAAA,MAAA;AAAA,IACF;AAAA,IAEJ,CAAA;AAAA,EAAC,GAGGp2C,IAASzN,GAAY,MAAM;AAC/B,QAAIqjD,GAAmB;AACrB,YAAMrrB,IAAaqrB,EAAkB,SAAA;AAErC,MAAAz1C,EAAO,EAAE,YAAAoqB,GAAY;AAAA,IACvB;AAAA,EACF,GAAG,CAACqrB,CAAiB,CAAC,GAEhBU,IAAU,CAAClnD,GAAMgM,MAAY;AACjC,QAAIw6C,GAAmB;AACrB,YAAMW,IAAen7C,EAAQ,gBAAA,GACvBo7C,IAAkBb,EAAiB,QAAQ,sBAAA;AACjD,UAAI1sB,IAAW;AAAA,QACb,GAAGstB,EAAa,IAAIC,EAAgB;AAAA,QACpC,GAAGD,EAAa,IAAIC,EAAgB;AAAA,MAAA;AAEtC,MAAAvtB,IAAW2sB,EAAkB,QAAQ3sB,CAAQ;AAC7C,YAAMooB,IAAUyD,GAAiB;AAAA,QAC/B,OAAO1lD;AAAA,QACP,UAAA65B;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAKD;AACD,MAAA6sB,EAAS,CAAAW,MAAOA,EAAI,OAAOpF,CAAO,CAAC;AAAA,IACrC;AAAA,EACF,GAEM,CAAC,EAAE,QAAA50C,GAAQ,SAAAi6C,KAAW/5C,CAAI,IAAIC,GAAQ;AAAA,IAC1C,QAAQ;AAAA,IACR,MAAM,CAACtH,GAAM8F,MAAY;AACvB,MAAAk7C,EAAQhhD,GAAM8F,CAAO;AAAA,IAuBvB;AAAA,IACA,SAAS,CAAAA,OACA,EAAE,QAAQA,EAAQ,OAAA,GAAU,SAASA,EAAQ,UAAQ;AAAA,EAC9D,CACD;AAED,SAAA1I,GAAU,MAAM;AACd,IAAAqoB;AAAA,MACEo6B,GAAkB;AAAA,QAChB,YAAYO;AAAA,QACZ,mBAAmBA;AAAA,MAAA,CACpB;AAAA,IAAA;AAAA,EAEL,GAAG,CAACA,CAAkB,CAAC,GAGrB,gBAAAv5D,EAAAqJ,GAAA,EACE,4BAAC,OAAA,EAAI,KAAKmX,GAAM,WAAU,WACxB,4BAACg6C,IAAA,EACC,UAAA;AAAA,IAAA,gBAAAx6D,EAAC,OAAA,EAAI,WAAU,qBAAoB,KAAKw5D,GACtC,UAAA,gBAAAz4D;AAAA,MAAC05D;AAAA,MAAA;AAAA,QACC,OAAA5uB;AAAA,QACA,OAAAC;AAAA,QACA,WAAAmrB;AAAA,QACA,eAAA2C;AAAA,QACA,eAAAG;AAAA,QACA,QAAQL;AAAA,QACR,gBAAgBgB,GAAe;AAAA,QAAA,WAC/BrB;AAAAA,QACA,eAAe,CAAC,UAAU,WAAW;AAAA,QACrC,SAAO;AAAA,QAEP,UAAA;AAAA,UAAA,gBAAAr5D,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA,gBAAAe,EAACE,KAAO,MAAK,MAAK,SAAS4iB,GACxB,UAAA;AAAA,YAAAnV,EAAO;AAAA,YAAa;AAAA,UAAA,EAAA,CACvB,EAAA,CACF;AAAA,4BACCisD,IAAA,CAAA,CAAS;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEd;AAAA,IACA,gBAAA36D,EAAC82D,MAAW,SAAAz2D,EAAA,CAAkB;AAAA,EAAA,EAAA,CAChC,GACF,GACF;AAEJ;AAEAi5D,GAAQ,YAAY;AAAA,EAClB,SAASp5D,EAAU,OAAO;AAAA,EAC1B,QAAQA,EAAU,KAAK;AACzB;ACpJA,MAAM06D,KAAoB,CAAC91D,MAAU;AACnC,QAAM,EAAE,SAAAzE,GAAS,QAAA2jB,GAAQ,aAAA/b,GAAa,QAAA2L,MAAW9O,GAC3C,CAACqD,GAAMC,CAAO,IAAI0H,EAAS,EAAK;AAEtC,SACG;AAAA,IACCnL,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,EACxB,SAASsD,CAAW,IAoBtB,gBAAAlH,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,IAAA,EAAS,KAAI,eACZ,UAAA,gBAAA1O;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,SAAS,MAAMmH,EAAQ,EAAI;AAAA,QAC3B,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,WAAWwL;AAAA,QAEX,UAAA;AAAA,UAAA,gBAAA5T,EAAC+U,IAAA,EAAI,IAAE,GAAA,CAAC;AAAA,UAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEd;AAAA,IACA,gBAAA/U,EAAC22D,IAAA,EAAc,aAAA1uD,GAA0B,WAAW,EAAE,MAAAE,GAAM,SAAAC,EAAA,GAC1D,UAAA,gBAAApI,EAACs5D,IAAA,EAAQ,SAAAj5D,GAAkB,QA3BV,CAACw6D,MAAgB;AACtC,YAAMnvB,IAAOmvB,EAAY;AACzB,MAAAnvB,EAAK,QAAWA,EAAK,MAAS,IAAI,CAACqtB,OAC5BA,EAAM,QACPA,EAAM,SAAS,aAAW,OAAOA,EAAM,KAAK,OACzCA,EACR,GAED14D,EAAQ,oBAAoB,aAAaqrC,GACzC,OAAOrrC,EAAQ,oBAAoB,MACnC2jB,EAAO,IAAIjf,GAASW,GAAA,GAAiBrF,CAAO,CAAC,GAC7C+H,EAAQ,EAAK;AAAA,IACf,GAeyD,EAAA,CACrD;AAAA,EAAA,GACF,IAhCO;AAkCX;AAEAwyD,GAAkB,YAAY;AAAA,EAC5B,SAAS16D,EAAU,OAAO;AAAA,EAC1B,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,QAAQzE,EAAU,KAAK;AAAA,EACvB,QAAQA,EAAU;AACpB;AAEA06D,GAAkB,eAAe;AAAA,EAC/B,QAAQ;AACV;AC9DA,MAAME,KAAsB,CAACh2D,MAAU;AACrC,QAAM,EAAE,MAAAkD,GAAM,UAAA+yD,GAAU,aAAA9yD,GAAa,WAAAC,MAAcpD,GAC7C,EAAE,MAAAqD,GAAM,SAAAC,EAAA,IAAYF,GACpB8yD,IAAqB,CAAC9xD,MAAM;AAChC,UAAMV,IAAS+kD,GAAwBrkD,GAAGjB,CAAW;AACrD,QAAIO,EAAO,OAAO,WAAW;AAC3B,YAAMyyD,IAAU/1D,EAAU8C,CAAI;AAE9B,MAAI,OAAO,UAAU,eAAe,KAAKQ,EAAO,SAAS,UAAU,IACjEyyD,EAAQ,WAAW/1D,EAAUsD,EAAO,QAAQ,QAAQ,IAEpD,OAAOyyD,EAAQ;AAGjB,YAAMzxC,IAAatkB,EAAUsD,EAAO,OAAO;AAC3C,aAAOghB,EAAW,UAClByxC,EAAQ,sBAAsBzxC,GAE9BhhB,EAAO,UAAUyyD;AAAA,IACnB;AACA,IAAAF,EAASvyD,CAAM,GACfJ,EAAQ,EAAK;AAAA,EACf,GAEM8yD,IAAuB,CAACpuC,MAAS;AACrC,UAAMquC,IAAS,IAAI,WAAA;AACnB,IAAAA,EAAO,SAASH,GAChBG,EAAO,WAAWruC,EAAK,CAAC,CAAC;AAAA,EAC3B;AAEA,SACE,gBAAA/rB,EAACuI,KAAM,UAAQ,IAAC,MAAAnB,GAAY,QAAQ,MAAMC,EAAQ,EAAK,GACrD,UAAA;AAAA,IAAA,gBAAApI,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,4BAACA,EAAM,OAAN,EAAY,UAAA,+BAAA,CAA4B,EAAA,CAC3C;AAAA,IACA,gBAAAtJ,EAACsJ,EAAM,MAAN,EAAW,OAAO,EAAE,UAAU,UAC7B,UAAA,gBAAAtJ;AAAA,MAAC68B;AAAA,MAAA;AAAA,QACC,QAAQ,CAACu+B,MAAWF,EAAqBE,CAAM;AAAA,QAC/C,WAAU;AAAA,QACV,OAAO,EAAE,QAAQ,GAAA;AAAA,QAEjB,4BAAC,OAAA,EAAI,OAAO,EAAE,YAAY,GAAA,GAAM,UAAA,iCAAA,CAA8B;AAAA,MAAA;AAAA,IAAA,EAChE,CACF;AAAA,EAAA,GACF;AAEJ;AAEAN,GAAoB,YAAY;AAAA,EAC9B,MAAM56D,EAAU,OAAO;AAAA,EACvB,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,UAAUzE,EAAU,KAAK;AAAA,EACzB,WAAWA,EAAU,MAAM;AAAA,IACzB,MAAMA,EAAU,KAAK;AAAA,IACrB,SAASA,EAAU,KAAK;AAAA,EAAA,CACzB,EAAE;AACL;AC5DA,MAAMm7D,KAAoB,CAACv2D,MAAU;AACnC,QAAM,EAAE,MAAAkD,GAAM,UAAA+yD,GAAU,aAAA9yD,GAAa,QAAA2L,MAAW9O,GAC1C,CAACqD,GAAMC,CAAO,IAAI0H,EAAS,EAAK;AAEtC,SACE,gBAAA/O,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,IAAA,EAAS,KAAI,oBACZ,UAAA,gBAAA1O;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,SAAS,MAAMmH,EAAQ,EAAI;AAAA,QAC3B,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,WAAWwL;AAAA,QAEV,UAAA;AAAA,UAAAlF,EAAO;AAAA,UAAsB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAElC;AAAA,IACCvG,KACC,gBAAAnI;AAAA,MAAC86D;AAAA,MAAA;AAAA,QACC,MAAA9yD;AAAA,QACA,UAAA+yD;AAAA,QACA,aAAA9yD;AAAA,QACA,WAAW,EAAE,MAAAE,GAAM,SAAAC,EAAA;AAAA,MAAQ;AAAA,IAAA;AAAA,EAC7B,GAEJ;AAEJ;AAEAizD,GAAkB,YAAY;AAAA,EAC5B,MAAMn7D,EAAU,OAAO;AAAA,EACvB,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,UAAUzE,EAAU,KAAK;AAAA,EACzB,QAAQA,EAAU;AACpB;AAEAm7D,GAAkB,eAAe;AAAA,EAC/B,QAAQ;AACV;AC7CA,MAAMC,KAAkB,CAAC,EAAE,UAAAxuB,GAAU,UAAAyuB,IAAW,aA2B5C,gBAAAv7D;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAO;AAAA,MACL,UAAU;AAAA,MACV,OAAO;AAAA,MACP,iBAAiB;AAAA,MACjB,SAAS;AAAA,MACT,UAAAu7D;AAAA,MACA,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,IAvCoB,MAAM;AAC9B,gBAAQzuB,GAAA;AAAA,UACN,KAAK;AACH,mBAAO;AAAA,cACL,KAAK;AAAA,cACL,MAAM;AAAA,cACN,WAAW;AAAA,YAAA;AAAA,UAEf,KAAK;AACH,mBAAO;AAAA,cACL,KAAK;AAAA,cACL,MAAM;AAAA,cACN,WAAW;AAAA,YAAA;AAAA,UAEf,KAAK;AACH,mBAAO;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,cACN,WAAW;AAAA,YAAA;AAAA,UAEf;AACE,mBAAO,CAAA;AAAA,QAAC;AAAA,MAEd,GAgBS;AAAA,IAAkB;AAAA,IAGtB,UAAAp+B,EAAO;AAAA,EAAA;AAAA;AAKd4sD,GAAgB,YAAY;AAAA,EAC1B,UAAUp7D,EAAU,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE;AAAA,EACvD,UAAUA,EAAU;AACtB;AAEA,MAAMs7D,KAAiB,CAAC;AAAA,EACtB,WAAAC;AAAA,EACA,YAAAC;AAAA,EACA,kBAAAC,IAAmB;AAAA,EACnB,cAAAC,IAAe;AAAA,EACf,eAAAC,IAAgB;AAAA,EAChB,WAAA/7D,IAAY;AAAA,EACZ,OAAA8iB,IAAQ,CAAA;AAAA,EACR,gCAAAk5C,IAAiC;AACnC,MAAM;AACJ,QAAM,CAACC,GAAWC,CAAY,IAAIlsD,EAAS6rD,CAAgB,GACrD,CAAC78C,GAAYm9C,CAAa,IAAInsD,EAAS,EAAK,GAC5C,CAACosD,GAAwBC,CAAyB,IAAIrsD,EAAS,EAAK,GACpEkQ,IAAevf,GAAO,IAAI,GAC1B27D,IAAkB37D,GAAO,IAAI,GAE7B47D,IAAkBjmD,GAAY,CAAClN,MAAM;AACzC,IAAAA,EAAE,eAAA,GACF+yD,EAAc,EAAI;AAAA,EACpB,GAAG,CAAA,CAAE,GAECK,IAAkBlmD;AAAA,IACtB,CAAClN,MAAM;AACL,UAAI,CAAC4V,KAAc,CAACkB,EAAa,QAAS;AAE1C,YAAMb,IAAgBa,EAAa,QAAQ,sBAAA,GACrCu8C,IAAiBp9C,EAAc;AAGrC,UAAIq9C,KAFWtzD,EAAE,UAAUiW,EAAc,QAEZo9C,IAAkB;AAE/C,MAAAC,IAAe,KAAK,IAAIZ,GAAcY,CAAY,GAClDA,IAAe,KAAK,IAAI,MAAMX,GAAeW,CAAY,GAEzDR,EAAaQ,CAAY;AAAA,IAC3B;AAAA,IACA,CAAC19C,GAAY88C,GAAcC,CAAa;AAAA,EAAA,GAGpCY,IAAgBrmD,GAAY,MAAM;AACtC,IAAA6lD,EAAc,EAAK;AAAA,EACrB,GAAG,CAAA,CAAE,GAECS,IAA2BtmD,GAAY,MAAM;AACjD,QAAIgmD,EAAgB,SAAS;AAC3B,YAAMO,IAAeP,EAAgB,QAAQ;AAC7C,MAAAD,EAA0BQ,KAAgBb,CAA8B;AAAA,IAC1E;AAAA,EACF,GAAG,CAACA,CAA8B,CAAC;AAEnC,EAAAvlD,GAAU,MAAM;AACd,IAAAmmD,EAAA;AAEA,UAAME,IAAiB,IAAI,eAAe,MAAM;AAC9C,MAAAF,EAAA;AAAA,IACF,CAAC;AAED,WAAIN,EAAgB,WAClBQ,EAAe,QAAQR,EAAgB,OAAO,GAGzC,MAAM;AACX,MAAAQ,EAAe,WAAA;AAAA,IACjB;AAAA,EACF,GAAG,CAACF,CAAwB,CAAC,GAE7BnmD,GAAU,MAAM;AACd,QAAIuI;AACF,sBAAS,iBAAiB,aAAaw9C,CAAe,GACtD,SAAS,iBAAiB,WAAWG,CAAa,GAClD,SAAS,KAAK,MAAM,SAAS,cAC7B,SAAS,KAAK,MAAM,aAAa,QAE1B,MAAM;AACX,iBAAS,oBAAoB,aAAaH,CAAe,GACzD,SAAS,oBAAoB,WAAWG,CAAa,GACrD,SAAS,KAAK,MAAM,SAAS,IAC7B,SAAS,KAAK,MAAM,aAAa;AAAA,MACnC;AAAA,EAEJ,GAAG,CAAC39C,GAAYw9C,GAAiBG,CAAa,CAAC;AAE/C,QAAMI,IAAa,MAAMd;AAEzB,SACE,gBAAAh7D;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKif;AAAA,MACL,WAAW,UAAUlgB,CAAS;AAAA,MAC9B,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,GAAG8iB;AAAA,MAAA;AAAA,MAIL,UAAA;AAAA,QAAA,gBAAA5iB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,OAAO,GAAG+7D,CAAS;AAAA,cACnB,UAAU;AAAA,cACV,cAAc;AAAA,YAAA;AAAA,YAGf,UAAAN;AAAA,UAAA;AAAA,QAAA;AAAA,QAGH,gBAAA16D;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAKq7D;AAAA,YACL,aAAaC;AAAA,YACb,OAAO;AAAA,cACL,OAAO;AAAA,cACP,iBAAiBv9C,IAAa,YAAY;AAAA,cAC1C,QAAQ;AAAA,cACR,YAAY;AAAA,cACZ,aAAa;AAAA,cACb,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,YAAYA,IAAa,SAAS;AAAA,YAAA;AAAA,YAEpC,cAAc,CAAC5V,MAAM;AACnB,cAAK4V,MACH5V,EAAE,OAAO,MAAM,kBAAkB;AAAA,YAErC;AAAA,YACA,cAAc,CAACA,MAAM;AACnB,cAAK4V,MACH5V,EAAE,OAAO,MAAM,kBAAkB;AAAA,YAErC;AAAA,YAEC,UAAA;AAAA,cAAAgzD,KAA0B,gBAAAl8D,EAACs7D,IAAA,EAAgB,UAAS,OAAM,UAAS,QAAO;AAAA,cAC3E,gBAAAt7D,EAACs7D,IAAA,EAAgB,UAAS,UAAS,UAAS,QAAO;AAAA,cAClDY,KAA0B,gBAAAl8D,EAACs7D,IAAA,EAAgB,UAAS,UAAS,UAAS,OAAA,CAAO;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGhF,gBAAAt7D;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAO;AAAA,cACL,OAAO,GAAG68D,CAAU;AAAA,cACpB,UAAU;AAAA,cACV,aAAa;AAAA,YAAA;AAAA,YAGd,UAAAnB;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAF,GAAe,YAAY;AAAA,EACzB,WAAWt7D,EAAU,KAAK;AAAA,EAC1B,YAAYA,EAAU,KAAK;AAAA,EAC3B,kBAAkBA,EAAU;AAAA,EAC5B,cAAcA,EAAU;AAAA,EACxB,eAAeA,EAAU;AAAA,EACzB,WAAWA,EAAU;AAAA,EACrB,OAAOA,EAAU;AAAA,EACjB,gCAAgCA,EAAU;AAC5C;ACxMA,MAAM48D,KAAa,CAAC70D,GAAaD,MAAS;AACxC,QAAM,EAAE,MAAA7C,GAAM,OAAAoZ,GAAO,MAAA+N,EAAA,IAAStkB;AAC9B,MAAI2L,IAAM;AACV,UAAQ1L,GAAA;AAAA,IACN,KAAKtD,EAAU,cAAc;AAC3B,MAAAgP,IAAM,GAAG1L,CAAW,cAAcsW,CAAK,KAAKpZ,CAAI;AAChD;AAAA,IACF,KAAKR,EAAU,cAAc;AAC3B,MAAAgP,IAAM,GAAG1L,CAAW,cAAcqkB,CAAI,KAAK/N,CAAK;AAChD;AAAA,IACF,KAAK5Z,EAAU,cAAc;AAC3B,MAAAgP,IAAM,GAAG1L,CAAW,cAAcsW,CAAK;AACvC;AAAA,EAEA;AAEJ,SAAO5K;AACT,GAEMopD,KAAgB,CAACj4D,MAAU;AAE/B,QAAM,EAAE,MAAAkD,GAAM,cAAA8nD,GAAc,UAAAkN,GAAU,aAAA/0D,GAAa,aAAAg1D,MAAgBn4D;AAEnE,SACE,gBAAA9E,EAAC,OAAA,EACC,UAAA,gBAAAe,EAAC6lC,IAAA,EACC,UAAA;AAAA,IAAA,gBAAA7lC;AAAA,MAAC6lC,GAAK;AAAA,MAAL;AAAA,QACC,WAAW,gBAAgBzuB,EAAG;AAAA,QAE7B,UAAA;AAAA,UAAA2kD,GAAW70D,GAAaD,CAAI;AAAA,UAC7B,gBAAAjH,EAAC,QAAA,EAAK,WAAU,6BACd,UAAA;AAAA,YAAA,gBAAAf;AAAA,cAACq7D;AAAA,cAAA;AAAA,gBACC,MAAArzD;AAAA,gBACA,UAAUi1D;AAAA,gBACV,aAAAh1D;AAAA,gBACA,QAAO;AAAA,cAAA;AAAA,YAAA;AAAA,YAET,gBAAAjI;AAAA,cAAC46D;AAAA,cAAA;AAAA,gBACC,SAAS5yD;AAAA,gBACT,QAAQi1D;AAAA,gBACR,aAAAh1D;AAAA,gBACA,QAAO;AAAA,cAAA;AAAA,YAAA;AAAA,YAET,gBAAAjI;AAAA,cAACmT;AAAA,cAAA;AAAA,gBACC,KAAI;AAAA,gBACJ,KAAI;AAAA,gBACJ,SAAS6pD;AAAA,gBACT,SAAS,EAAE,MAAAh1D,GAAM,SAAS,QAAA;AAAA,gBAC1B,IAAG;AAAA,gBACH,OAAM;AAAA,gBACN,IAAG;AAAA,gBACH,MAAK;AAAA,gBACL,QAAO;AAAA,cAAA;AAAA,YAAA;AAAA,YAET,gBAAAhI;AAAA,cAACmT;AAAA,cAAA;AAAA,gBACC,KAAI;AAAA,gBACJ,KAAI;AAAA,gBACJ,SAAS6pD;AAAA,gBACT,SAAS,EAAE,MAAAh1D,GAAM,SAAS,QAAA;AAAA,gBAC1B,IAAG;AAAA,gBACH,OAAM;AAAA,gBACN,IAAG;AAAA,gBACH,MAAK;AAAA,gBACL,QAAO;AAAA,cAAA;AAAA,YAAA;AAAA,YAET,gBAAAhI;AAAA,cAACmT;AAAA,cAAA;AAAA,gBACC,KAAI;AAAA,gBACJ,KAAI;AAAA,gBACJ,SAAS6pD;AAAA,gBACT,SAAS,EAAE,MAAAh1D,GAAM,SAAS,QAAA;AAAA,gBAC1B,IAAG;AAAA,gBACH,OAAM;AAAA,gBACN,IAAG;AAAA,gBACH,MAAK;AAAA,gBACL,QAAO;AAAA,cAAA;AAAA,YAAA;AAAA,UACT,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAhI,EAAC4mC,GAAK,MAAL,EACC,4BAAC,OAAA,EAAI,OAAO,EAAE,UAAU,UAAU,QAAQ,QAAQ,QAAQ,UACxD,UAAA,gBAAA5mC;AAAA,MAACw7D;AAAA,MAAA;AAAA,QACC,kBAAkB;AAAA,QAClB,cAAc;AAAA,QACd,eAAe;AAAA,QACf,WACE,gBAAAx7D;AAAA,UAACy0D;AAAA,UAAA;AAAA,YACC,MAAAzsD;AAAA,YACA,cAAA8nD;AAAA,YACA,UAAUmN;AAAA,YACV,UAAUA;AAAA,YACV,aAAAh1D;AAAA,UAAA;AAAA,QAAA;AAAA,QAGJ,8BACG,OAAA,EACC,UAAA,gBAAAjI,EAACo2D,MAAkB,SAASpuD,GAAM,UAAUi1D,EAAA,CAAa,EAAA,CAC3D;AAAA,MAAA;AAAA,IAAA,GAGN,EAAA,CACF;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;AAEAF,GAAc,YAAY;AAAA,EACxB,MAAM78D,EAAU;AAAA,EAChB,cAAcA,EAAU;AAAA,EACxB,UAAUA,EAAU,KAAK;AAAA;AAAA,EAEzB,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,aAAazE,EAAU,KAAK;AAC9B;AAEA68D,GAAc,eAAe,EAAE,cAAc,GAAC;AC/H9C,MAAMG,KAAmB,CAAC;AAAA,EACxB,YAAAC;AAAA,EACA,UAAA1oC;AAAA,EACA,WAAA30B,IAAY;AACd,MAEI,gBAAAE;AAAA,EAACC,GAAK;AAAA,EAAL;AAAA,IACC,MAAK;AAAA,IACL,SAASk9D;AAAA,IACT,UAAA1oC;AAAA,IACA,WAAA30B;AAAA,EAAA;AAAA;AAKNo9D,GAAiB,OAAOlrC,GAAM;AAE9BkrC,GAAiB,YAAY;AAAA,EAC3B,YAAYh9D,EAAU,KAAK;AAAA,EAC3B,UAAUA,EAAU,KAAK;AAAA,EACzB,WAAWA,EAAU;AACvB;AAEAg9D,GAAiB,eAAe;AAAA,EAC9B,WAAW;AACb;AAEA,MAAAE,KAAehrC,GAAS8qC,EAAgB,GCvBlCG,KAAa,CAACxiC,MACXhQ,GAAOgQ,GAAM,mBAAmB,EAAE,OAAO,kBAAkB,GAG9DyiC,KAAe,CAAC;AAAA,EACpB,UAAAvqC;AAAA,EACA,WAAAwqC;AAAA,EACA,KAAAC;AAAA,EACA,KAAAzrC;AAAA,EACA,UAAAjhB;AAAA,EACA,YAAA2sD;AAAA,EACA,QAAAC;AAAA,EACA,YAAAP;AAAA,EACA,mBAAAQ;AACF,MAAM;AACJ,QAAM;AAAA,IACJ,IAAA9uC;AAAA,IACA,MAAAvW;AAAA,IACA,aAAaslD;AAAA,IACb,YAAYC;AAAA,IACZ,YAAAr0C;AAAA,IACA,oBAAoByvC;AAAA,IACpB,SAAA7zD;AAAA,EAAA,IACEo4D,GAEE,EAAE,OAAAM,GAAO,YAAA9qD,EAAA,IAAe+f,GACxB,CAACgrC,GAAQC,CAAW,IAAIT,EAAU,MAAM,GAAG,GAC3CU,IAAY,SAASF,GAAQ,EAAE,GAC/BxkD,IAAO,MAAM0kD,CAAS,IAAgB,IAAZA,GAC1BC,IACJv7D,GAAY,CAAC2V,GAAMuW,CAAE,CAAC,MAAMmvC,IACxB,yBACA;AAEN,MAAIG,IAAK,IACLC,IAAU,IACVC,IAAQ;AACZ,EAAItsC,MAAQ,yBACVosC,IAAKP,IAAa,gBAAgBP,GAAWO,CAAU,CAAC,WAAW,iBACnEQ,IAAUh5D,MAAYw4D,IAAa,IAAIx4D,CAAO,KAAK,KACnDi5D,IAAQ,OAAO/lD,KAAQ,EAAE,KAEvByZ,MAAQ,iBACVosC,IAAK,aAAad,GAAWQ,CAAS,CAAC,UACvCO,IAAU,IAAI50C,EAAW,OAAO,IAChC60C,IAAQ,gBAAgB70C,EAAW,cAAc,EAAE;AAGrD,QAAM80C,IACJV,KAAcrkD,IAAM,IAClB,gBAAAvZ;AAAA,IAAC4oB;AAAA,IAAA;AAAA,MACC,KAAI;AAAA,MACJ,SAAS9X;AAAA,MACT,UAAU,EAAE,IAAA+d,EAAA;AAAA,IAAG;AAAA,EAAA,IAEf,MACA0vC,IAAMX,IACV,gBAAA59D;AAAA,IAAC4oB;AAAA,IAAA;AAAA,MACC,KAAI;AAAA,MACJ,SAAS60C;AAAA,MACT,UAAU,EAAE,IAAA5uC,EAAA;AAAA,MACZ,IAAG;AAAA,IAAA;AAAA,EAAA,IAEH,MACE2vC,IAAKV,IACT,gBAAA99D;AAAA,IAACmT;AAAA,IAAA;AAAA,MACC,KAAI;AAAA,MACJ,SAASH;AAAA,MACT,SAAS,EAAE,IAAA6b,EAAA;AAAA,MACX,IAAG;AAAA,MACH,OAAM;AAAA,IAAA;AAAA,EAAA,IAEN,MAEE4vC,IAAwB,CAACv1D,MAAM;AACnC,IAAIy0D,KACFA,EAAkBH,GAAKt0D,EAAE,OAAO,SAAS,EAAE,OAAAm1D,GAAO,SAAAD,GAAS;AAAA,EAE/D;AAEA,SACE,gBAAAr9D,EAAC,OAAA,EAAI,WAAW,+BAA+Bm9D,CAAa,IAC1D,UAAA;AAAA,IAAA,gBAAAn9D,EAAC,OAAA,EAAI,WAAU,+CACb,UAAA;AAAA,MAAA,gBAAAf;AAAA,QAACk9D;AAAAA,QAAA;AAAA,UACC,YAAAC;AAAA,UACA,UAAUsB;AAAA,QAAA;AAAA,MAAA;AAAA,MAEZ,gBAAAz+D,EAAC,OAAA,EAAI,WAAU,eAAe,UAAAq+D,GAAM;AAAA,MACpC,gBAAAr+D,EAAC,OAAA,EAAI,WAAU,6BACZ,UAAAo+D,GACH;AAAA,MACA,gBAAAr9D,EAAC,OAAA,EAAI,WAAU,QAAO,UAAA;AAAA,QAAA;AAAA,QAAGwY,IAAM;AAAA,MAAA,EAAA,CAAE;AAAA,IAAA,GACnC;AAAA,IACA,gBAAAxY,EAAC,OAAA,EAAI,WAAU,4BACb,UAAA;AAAA,MAAA,gBAAAf,EAAC,OAAA,EAAI,WAAU,SAAS,UAAAm+D,GAAG;AAAA,MAC3B,gBAAAp9D,EAACwI,IAAA,EAAY,MAAK,MAAK,WAAU,SAC9B,UAAA;AAAA,QAAA+0D;AAAA,QACAE;AAAA,QACAD;AAAA,QACD,gBAAAv+D;AAAA,UAACmT;AAAA,UAAA;AAAA,YACC,KAAI;AAAA,YACJ,SAASuqD;AAAA,YACT,SAAS,EAAE,MAAAplD,GAAM,IAAAuW,EAAA;AAAA,YACjB,IAAG;AAAA,YACH,OAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MACR,EAAA,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,GA1BmEvW,CA2BrE;AAEJ;AAEAglD,GAAa,YAAY;AAAA,EACvB,UAAUp9D,EAAU,MAAM;AAAA,IACxB,OAAOA,EAAU;AAAA,IACjB,YAAYA,EAAU;AAAA,EAAA,CACvB,EAAE;AAAA,EACH,WAAWA,EAAU,OAAO;AAAA,EAC5B,KAAKA,EAAU,OAAO;AAAA,EACtB,KAAKA,EAAU,MAAM,CAAC,sBAAsB,YAAY,CAAC;AAAA,EACzD,UAAUA,EAAU;AAAA,EACpB,YAAYA,EAAU;AAAA,EACtB,QAAQA,EAAU,KAAK;AAAA,EACvB,YAAYA,EAAU;AAAA,EACtB,mBAAmBA,EAAU;AAC/B;AAEAo9D,GAAa,eAAe;AAAA,EAC1B,YAAY,MAAM;AAAA,EAAC;AAAA,EACnB,UAAU,MAAM;AAAA,EAAC;AAAA,EACjB,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,mBAAmB;AACrB;AC1IsBoB,GAAO;AAAA,EAC3B,YAAY,CAAC/mD,MAAQA,GAAK,OAAO,KAAK,UAAUA,CAAG;AAAA;AAAA,EACnD,QAAQ,EAAE,YAAY,GAAA;AACxB,CAAC;ACPM,MAAMgnD,KAAc;AAAA,EACzB,OAAO;AAAA,EACP,SAAS;AAEX,GAGaC,KAAkB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAGaC,KAAwB,CAAC,OAAO,eAAe,WAAW,YAAY,GAGtEC,KAAkB;AAAA,EAC7B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,OAAO;AAAA;AAET,GAgBMC,KAAsB,CAAC,SAAS,QAAQ,eAAe,UAAU,GAGjEC,KAA+B;AAAA,EACnC,MAAM,CAAC,SAAS,QAAQ,aAAa,eAAe,YAAY,UAAU;AAAA,EAC1E,UAAU,CAAC,SAAS,QAAQ,WAAW;AAAA,EACvC,UAAU,CAAC,SAAS,QAAQ,WAAW;AAAA,EACvC,QAAQ,CAAC,SAAS,QAAQ,WAAW;AAAA,EACrC,UAAU,CAAC,SAAS,QAAQ,WAAW;AAAA,EACvC,kBAAkB,CAAC,SAAS,QAAQ,WAAW;AAAA,EAC/C,iBAAiB,CAAC,SAAS,QAAQ,WAAW;AAAA,EAC9C,eAAe,CAAC,SAAS,QAAQ,WAAW;AAAA,EAC5C,gBAAgB,CAAC,SAAS,QAAQ,WAAW;AAAA,EAC7C,iBAAiB;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAAA,EAEF,eAAe,CAAC,SAAS,QAAQ,aAAa,YAAY;AAAA,EAC1D,SAAS,CAAC,SAAS,QAAQ,aAAa,eAAe,UAAU;AAAA,EACjE,QAAQ,CAAC,SAAS,QAAQ,aAAa,eAAe;AAAA,EACtD,gBAAgB,CAAC,SAAS,QAAQ,aAAa,eAAe;AAAA,EAC9D,kBAAkB,CAAC,SAAS,QAAQ,aAAa,eAAe;AAAA,EAChE,OAAO,CAAC,SAAS,QAAQ,YAAY;AAAA,EACrC,OAAO,CAAC,MAAM;AAAA;AAAA,EAEd,QAAQ,CAAC,OAAO;AAClB,GAGMC,KAA6B,CAACvtD,GAAMwtD,MAAiB;AACzD,QAAM1wB,IAAS,CAAA;AACf,gBAAO,QAAQ0wB,CAAY,EAAE,QAAQ,CAAC,CAACl5D,GAAMm5D,CAAa,MAAM;AAC9D,UAAMC,IAAS,CAAC,SAAS,GAAG1tD,GAAM,GAAGytD,CAAa,EAC/C,OAAO,CAAChmD,GAAMtE,GAAOizC,MAASA,EAAK,QAAQ3uC,CAAI,MAAMtE,CAAK;AAC7D,IAAA25B,EAAOxoC,CAAI,IAAIo5D;AAAA,EACjB,CAAC,GACM5wB;AACT,GAGa6wB,KAAiBJ,GAA2BF,IAAqBC,EAA4B,GAG7FM,KAAkB;AAAA,EAC7B,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,kBAAkB;AACpB,GAEaC,KAA0B;AAAA,EACrC,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,SAAW;AAAA,EACX,QAAU;AAAA,EACV,SAAW;AACb,GAEaC,KAA+B;AAAA,EAC1C,uBAAyB;AAAA,EACzB,0BAA4B;AAAA,EAC5B,2BAA6B;AAC/B,GAGaC,KAAc;AAAA,EACzB,eAAe;AAAA,IACb,UAAU;AAAA,IACV,QAAQ;AAAA,EAAA;AAAA,EAEV,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,YAAY;AAAA;AACd,GCpHaC,KAA8B,CAACt5D,MAAU;AACpD,MAAI,CAACA,KAAS,OAAOA,KAAU,YAAY,CAACA,EAAM;AAChD,WAAOA;AAIT,QAAMu5D,IAAgBN,GAAej5D,EAAM,IAAI,KAAK,CAAA,GAG9Cw5D,IAAgB,CAAA;AACtB,SAAAD,EAAc,QAAQ,CAAA56C,MAAQ;AAC5B,IAAIA,KAAQ3e,MAEN2e,MAAS,cAAc3e,EAAM2e,CAAI,KAAK,OAAO3e,EAAM2e,CAAI,KAAM,WAC/D66C,EAAc76C,CAAI,IAAI,EAAE,KAAK3e,EAAM2e,CAAI,EAAE,IAAA,IAEzC66C,EAAc76C,CAAI,IAAI3e,EAAM2e,CAAI;AAAA,EAGtC,CAAC,GAEM66C;AACT,GAQaC,KAAoB,CAACz5D,GAAO05D,IAAa,SAAS;AAC7D,MAAI,CAAC15D,KAAS,OAAOA,KAAU;AAC7B,WAAOA;AAGT,QAAM25D,IAAY,EAAE,GAAG35D,EAAA;AAGvB,SAAI25D,EAAU,cAAc,MAAM,QAAQA,EAAU,UAAU,MAC5DA,EAAU,aAAaA,EAAU,WAAW,IAAI,CAAA7oC,MAAY;AAC1D,QAAIA,KAAY,OAAOA,KAAa,UAAU;AAE5C,UAAI8oC,IAAoBN,GAA4BxoC,CAAQ;AAE5D,aAAO+oC,GAAeD,GAAmBF,CAAU;AAAA,IACrD;AACA,WAAOG,GAAe/oC,GAAU4oC,CAAU;AAAA,EAC5C,CAAC,IAGIG,GAAeF,GAAWD,CAAU;AAC7C,GASaG,KAAiB,CAACC,GAAMJ,IAAa,SAAS;AACzD,MAAI,CAACI,KAAQ,OAAOA,KAAS,SAAU,QAAOA;AAG9C,MAAI,MAAM,QAAQA,CAAI;AACpB,WAAOA,EAAK,IAAI,CAAC/mD,MAAS8mD,GAAe9mD,GAAM2mD,CAAU,CAAC;AAI5D,MAAII,EAAK,UAAU,OAAOA,EAAK,UAAW,YAAY,CAAC,MAAM,QAAQA,EAAK,MAAM;AAC9E,QAAIJ,KAAcA,EAAW,SAAS,GAAG;AAEvC,YAAMK,IAAgB,CAAA;AAGtB,MAAAL,EAAW,QAAQ,CAAA17D,MAAY;AAC7B,QAAI87D,EAAK,OAAO97D,CAAQ,MACtB+7D,EAAc/7D,CAAQ,IAAI87D,EAAK,OAAO97D,CAAQ;AAAA,MAElD,CAAC,GAGD,OAAO,KAAK87D,EAAK,MAAM,EAAE,QAAQ,CAAA97D,MAAY;AAC3C,QAAMA,KAAY+7D,MAChBA,EAAc/7D,CAAQ,IAAI87D,EAAK,OAAO97D,CAAQ;AAAA,MAElD,CAAC,GAED87D,IAAO,EAAE,GAAGA,GAAM,QAAQC,EAAA;AAAA,IAC5B,OAAO;AAEL,YAAMC,IAAgBr+D,GAAO,OAAO,QAAQm+D,EAAK,MAAM,GAAG,cAAc;AACxE,MAAAA,IAAO,EAAE,GAAGA,GAAM,QAAQ,OAAO,YAAYE,CAAa,EAAA;AAAA,IAC5D;AAGF,QAAMC,IAAU,CAAA;AAEhB,aAAW,CAACp5D,GAAK5F,CAAK,KAAK,OAAO,QAAQ6+D,CAAI,GAAG;AAE/C,QAAItB,GAAgB,SAAS33D,CAAG;AAC9B;AAIF,UAAMq5D,IAASxB,GAAgB73D,CAAG,KAAKA;AAEvC,IAAIA,MAAQ,oBAAoB5F,KAAS,OAAOA,KAAU,YAAY,CAAC,MAAM,QAAQA,CAAK,IAExFg/D,EAAQC,CAAM,IAAIC,GAAuBl/D,GAAOy+D,CAAU,IACjD74D,MAAQ,YAAY5F,KAAS,OAAOA,KAAU,YAAY,CAAC,MAAM,QAAQA,CAAK,IAEvFg/D,EAAQC,CAAM,IAAIE,GAAgBn/D,GAAOy+D,CAAU,IAGnDO,EAAQC,CAAM,IAAIL,GAAe5+D,GAAOy+D,CAAU;AAAA,EAEtD;AAEA,SAAOO;AACT,GAQME,KAAyB,CAAC34D,GAAek4D,MAAe;AAC5D,QAAMW,IAA2B,CAAA;AAEjC,aAAW,CAAC94D,GAAW+4D,CAAW,KAAK,OAAO,QAAQ94D,CAAa;AACjE,IAAI84D,KAAe,OAAOA,KAAgB,YAAYA,EAAY,WAAW,MAAM,QAAQA,EAAY,OAAO,IAE5GD,EAAyB94D,CAAS,IAAIs4D,GAAeS,EAAY,SAASZ,CAAU,IAGpFW,EAAyB94D,CAAS,IAAIs4D,GAAeS,GAAaZ,CAAU;AAIhF,SAAOW;AACT,GAQMD,KAAkB,CAACr5D,GAAQ24D,MAAe;AAC9C,QAAMa,IAAoB,CAAA;AAE1B,aAAW,CAACv8D,GAAUw8D,CAAU,KAAK,OAAO,QAAQz5D,CAAM;AACxD,QAAIy5D,KAAc,OAAOA,KAAe,YAAY,CAAC,MAAM,QAAQA,CAAU,GAAG;AAE9E,YAAMC,IAAY,EAAE,GAAGD,EAAA;AACvB,MAAA/B,GAAsB,QAAQ,CAAC95C,MAAS;AACtC,QAAIA,KAAQ87C,KAAW,OAAOA,EAAU97C,CAAI;AAAA,MAC9C,CAAC,GAGG87C,EAAU,UAAU,MAAM,QAAQA,EAAU,MAAM,MACpDA,EAAU,SAASA,EAAU,OAAO,IAAI,CAAAz6D,MAAS;AAC/C,YAAIA,KAAS,OAAOA,KAAU,YAAYA,EAAM,MAAM;AAEpD,cAAI06D,IAAiBpB,GAA4Bt5D,CAAK;AAGtD,iBAAI,CAAC,eAAe,OAAO,EAAE,SAASA,EAAM,IAAI,IACvCy5D,GAAkBiB,GAAgBhB,CAAU,IAG9CG,GAAea,GAAgBhB,CAAU;AAAA,QAClD;AACA,eAAOG,GAAe75D,GAAO05D,CAAU;AAAA,MACzC,CAAC,IAGHa,EAAkBv8D,CAAQ,IAAI67D,GAAeY,GAAWf,CAAU;AAAA,IACpE;AAEE,MAAAa,EAAkBv8D,CAAQ,IAAI67D,GAAeW,GAAYd,CAAU;AAIvE,SAAOa;AACT,GChMaI,KAA2B,CAAC1/D,GAAO4F,GAAK+5D,MAC/C/5D,MAAQ,UAAU,OAAO5F,KAAU,WAC9Bi+D,GAAgBj+D,CAAK,KAAKA,IAG/B4F,MAAQ,kBAAkB,OAAO5F,KAAU,WACtCk+D,GAAwBl+D,CAAK,KAAKA,IAGvC4F,MAAQ,gBAAgB,OAAO5F,KAAU,WACpCm+D,GAA6Bn+D,CAAK,KAAKA,IAG5C4F,MAAQ,cAAc,OAAO5F,KAAU,YAClCA,IAAQ,YAAY,aAGzB,CAAC,mBAAmB,UAAU,EAAE,SAAS4F,CAAG,KAAK,OAAO5F,KAAU,YAC7DA,IAAQ,QAAQ,OAMlBA,GAWI4/D,KAAc,CAAC3+D,GAAK4+D,GAAaj6D,GAAKk6D,MAAc;AAC/D,MAAI,CAACD,EAAa,QAAO;AACzB,MAAI5+D,MAAQ,KAAM,QAAO;AAIzB,MAHIA,MAAQ,UAGR6+D,MAAc,YAAY,OAAO7+D,KAAQ,YAAYA,MAAQ;AAC/D,WAAO;AAIT,QAAM8+D,IAAmBL,GAAyBz+D,GAAK2E,CAAc;AAErE,SAAI,OAAOm6D,KAAqB,WAAiBA,IAC1C,OAAOA,CAAgB;AAChC,GCtDMC,KAAgB3C,GAAO;AAAA,EAC3B,YAAY,CAAC/mD,MAAQA,GAAK,OAAO,KAAK,UAAUA,CAAG;AAAA;AAAA,EACnD,QAAQ,EAAE,YAAY,GAAA;AACxB,CAAC,GAaK2pD,KAAyB,CAACC,GAAQC,GAAgBC,GAAgBN,GAAWl6D,GAAKy6D,GAAQvmC,MAEzFomC,MAAW,WAAWA,MAAW,aAAeC,KAAkBC,IAC9D,KAIF,CAACD,KAAkB,CAACC,GAcvBE,KAAsB,CAACD,GAAQvmC,GAAQymC,GAAUJ,GAAgBC,GAAgBN,GAAWl6D,MAAQ;AACxG,MAAIs6D,IAAS;AAEb,UAAIK,MAAa,UASNF,MAAWvmC,KAEhBqmC,KAAkBC,OAEhBC,MAAW,SACbH,IAAS,UACApmC,MAAW,SACpBomC,IAAS,YAETA,IAAS,aAOXD,GAAuBC,GAAQC,GAAgBC,CAA8C,MAC/FF,IAAS,aAGJA;AACT,GAUaM,KAAgB,CAACC,GAAQC,GAAQZ,IAAY,IAAIa,IAAQ,MAAM;AAC1E,QAAMl4C,IAAO,CAAA,GACPm4C,IAAQZ,GAAc,KAAKS,KAAU,CAAA,GAAIC,KAAU,EAAE,GAGrDG,IAAa,OAAO,KAAKH,KAAU,CAAA,CAAE,GAErCI,IADa,OAAO,KAAKL,KAAU,CAAA,CAAE,EACP,OAAO,CAAA76D,MAAO,CAACi7D,EAAW,SAASj7D,CAAG,CAAC;AAG3E,SAFgB,CAAC,GAAGi7D,GAAY,GAAGC,CAAgB,EAE3C,QAAQ,CAACtgE,MAAM;AACrB,UAAM6/D,IAASI,IAASjgE,CAAC,GACnBs5B,IAAS4mC,IAASlgE,CAAC,GACnBm/D,IAAUG,IAAY,GAAGA,CAAS,IAAIt/D,CAAC,KAAKA,GAC5C+/D,IAAWK,IAAQpgE,CAAC,GAGpB2/D,IAAiBE,KAAW,QAAgC,OAAOA,KAAW,UAC9ED,IAAiBtmC,KAAW,QAAgC,OAAOA,KAAW,UAG9EomC,IAASI,GAAoBD,GAAQvmC,GAAQymC,GAAUJ,GAAgBC,CAA4B,GAGnG73C,IAAM;AAAA,MACV,IAAIo3C;AAAA,MACJ,KAAKn/D;AAAA,MACL,WAAAs/D;AAAA,MACA,SAAAH;AAAA,MACA,OAAAgB;AAAA,MACA,UAAUf,GAAYS,GAAQF,GAAgB3/D,GAAGs/D,CAAS;AAAA,MAC1D,UAAUF,GAAY9lC,GAAQsmC,GAAgB5/D,GAAGs/D,CAAS;AAAA,MAC1D,QAAAI;AAAA,MACA,UAAU,CAACC,KAAkB,CAACC;AAAA;AAAA,MAE9B,aAAaC;AAAA,MACb,aAAavmC;AAAA,IAAA;AAMf,QAHArR,EAAK,KAAKF,CAAG,GAGT,CAAC43C,KAAkB,CAACC;AACtB,UAAI,MAAM,QAAQC,CAAM,KAAK,MAAM,QAAQvmC,CAAM,GAAG;AAElD,cAAMinC,IAAY,KAAK;AAAA,UACrB,MAAM,QAAQV,CAAM,IAAIA,EAAO,SAAS;AAAA,UACxC,MAAM,QAAQvmC,CAAM,IAAIA,EAAO,SAAS;AAAA,QAAA;AAG1C,iBAASwN,IAAI,GAAGA,IAAIy5B,GAAWz5B,KAAK;AAClC,gBAAM05B,IAAU,MAAM,QAAQX,CAAM,IAAIA,EAAO/4B,CAAC,IAAI,QAC9C25B,IAAU,MAAM,QAAQnnC,CAAM,IAAIA,EAAOwN,CAAC,IAAI;AACpD,UAAA7e,EAAK;AAAA,YACH,GAAG+3C;AAAA,cACD,EAAE,CAACl5B,CAAC,GAAG05B,EAAA;AAAA,cACP,EAAE,CAAC15B,CAAC,GAAG25B,EAAA;AAAA,cACPtB;AAAA,cACAgB,IAAQ;AAAA,YAAA;AAAA,UACV;AAAA,QAEJ;AAAA,MACF;AAEE,QAAAl4C,EAAK;AAAA,UACH,GAAG+3C,GAAcH,KAAU,CAAA,GAAIvmC,KAAU,IAAI6lC,GAASgB,IAAQ,CAAC;AAAA,QAAA;AAAA,EAIvE,CAAC,GAEMl4C;AACT,GCpJay4C,KAAa,CAAC,EAAE,QAAAC,IAAS,IAAI,QAAAC,IAAS,SAAS;AAC1D,QAAMC,IAAUC,GAAUH,GAAQC,CAAM;AACxC,2BACG,QAAA,EACE,UAAAC,EAAQ,IAAI,CAAC3nC,GAAMlmB,MAAU;AAC5B,UAAM+N,IAAQ;AAAA,MACZ,iBAAiBmY,EAAK,QAClB4jC,GAAY,QACZ5jC,EAAK,UACH4jC,GAAY,UACZ;AAAA,IAAA;AAER,WACE,gBAAA3+D,EAAC,QAAA,EAAiB,OAAA4iB,GACf,UAAAmY,EAAK,SADGlmB,CAEX;AAAA,EAEJ,CAAC,EAAA,CACH;AAEJ,GAQM+tD,KAAyB,CAAC37D,GAAKk6D,MAAc;AAEjD,MAAI,QAAQ,KAAKl6D,CAAG,GAAG;AACrB,UAAM47D,IAAe,SAAS57D,GAAK,EAAE,IAAI;AACzC,WAAO,OAAO47D,CAAY;AAAA,EAG5B;AACA,SAAO57D;AACT,GAOa67D,KAAkB,CAAC/vD,MAAW;AACzC,QAAM,EAAE,MAAA/K,MAAS+K,GACXgwD,IAAS/6D,EAAK,QAAQy3D,GAAY,YAGlCuD,IAAaJ,GAAuB56D,EAAK,KAAKA,EAAK,SAAS;AAElE,SACE,gBAAAjH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,QACL,aAAa,GAAGgiE,CAAM;AAAA,QACtB,SAAS;AAAA,QACT,YAAY;AAAA,MAAA;AAAA,MAGb,UAAA;AAAA,QAAA/6D,EAAK,YACJ,gBAAAhI,EAAC,QAAA,EAAK,OAAO,EAAE,aAAa,OAAO,OAAO,OAAA,GACvC,UAAA0O,EAAO,QAAA,CACV;AAAA,QAEF,gBAAA1O,EAAC,UAAM,UAAAgjE,EAAA,CAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGxB,GAOaC,KAAuB,CAAClwD,MAAW;AAC9C,QAAM,EAAE,MAAA/K,MAAS+K,GACX,EAAE,aAAAmwD,GAAa,aAAAC,GAAa,QAAA5B,EAAA,IAAWv5D;AAG7C,MACEu5D,MAAW,eACV,OAAO2B,KAAgB,YAAY,OAAOA,KAAgB,YAAY,OAAOA,KAAgB,eAC7F,OAAOC,KAAgB,YAAY,OAAOA,KAAgB,YAAY,OAAOA,KAAgB,YAC9F;AAEA,UAAMX,IAAS,OAAOzB,GAAyBmC,GAAal7D,EAAK,KAAKA,EAAK,OAAO,CAAC;AACpE,kBAAO+4D,GAAyBoC,GAAan7D,EAAK,KAAKA,EAAK,OAAO,CAAC,GAC5E,gBAAAhI,EAACuiE,IAAA,EAAW,QAAAC,GAAgB,QAAO,GAAA,CAAG;AAAA,EAC/C;AAGA,QAAMptC,IAAeriB,EAAO;AAG5B,SAAIwuD,MAAW,YAEX,gBAAAvhE,EAAC,UAAK,OAAO;AAAA,IACX,iBAAiB2+D,GAAY;AAAA,IAC7B,SAAS;AAAA,IACT,cAAc;AAAA,EAAA,GAEb,UAAAvpC,GACH,IAIG,gBAAAp1B,EAAC,UAAM,UAAAo1B,EAAA,CAAa;AAC7B,GAOaguC,KAAuB,CAACrwD,MAAW;AAC9C,QAAM,EAAE,MAAA/K,MAAS+K,GACX,EAAE,aAAAmwD,GAAa,aAAAC,GAAa,QAAA5B,EAAA,IAAWv5D;AAG7C,MACEu5D,MAAW,eACV,OAAO2B,KAAgB,YAAY,OAAOA,KAAgB,YAAY,OAAOA,KAAgB,eAC7F,OAAOC,KAAgB,YAAY,OAAOA,KAAgB,YAAY,OAAOA,KAAgB,YAC9F;AAEe,WAAOpC,GAAyBmC,GAAal7D,EAAK,KAAKA,EAAK,OAAO,CAAC;AACnF,UAAMy6D,IAAS,OAAO1B,GAAyBoC,GAAan7D,EAAK,KAAKA,EAAK,OAAO,CAAC;AACnF,WAAO,gBAAAhI,EAACuiE,IAAA,EAAW,QAAO,IAAG,QAAAE,EAAA,CAAgB;AAAA,EAC/C;AAGA,QAAMrtC,IAAeriB,EAAO;AAG5B,SAAIwuD,MAAW,UAEX,gBAAAvhE,EAAC,UAAK,OAAO;AAAA,IACX,iBAAiB2+D,GAAY;AAAA,IAC7B,SAAS;AAAA,IACT,cAAc;AAAA,EAAA,GAEb,UAAAvpC,GACH,IAIG,gBAAAp1B,EAAC,UAAM,UAAAo1B,EAAA,CAAa;AAC7B,GCvJaiuC,KAAmB,CAACC,GAAcC,MAAiB;AAAA,EAC9D;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,cAAcT;AAAA,IACd,MAAM;AAAA,IACN,UAAU;AAAA,IACV,QAAQ;AAAA;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,OAAO;AAAA,IACP,YAAY,GAAGQ,KAAgB,WAAW;AAAA,IAC1C,cAAcL;AAAA,IACd,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ;AAAA,IACE,OAAO;AAAA,IACP,YAAYM,KAAgB;AAAA,IAC5B,cAAcH;AAAA,IACd,MAAM;AAAA,IACN,UAAU;AAAA,EAAA;AAAA,EAEZ;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,UAAU;AAAA,EAAA;AAEd,GAMaI,KAAmB,MAAM/D,GAAY,eAMrCgE,KAAc,MAAM,CAAC1wD,OAAY;AAAA,EAC5C,iBAAiBA,EAAO,KAAK,WAAW,SAAS,gBAAgB;AAAA;AACnE;ACdA,SAAwB2wD,GAAmB;AAAA,EACzC,SAAAC;AAAA,EACA,SAAAC;AAAA,EACA,cAAAN;AAAA,EACA,cAAAC;AACF,GAAG;AAED,QAAM,CAACM,GAAiBC,CAAkB,IAAIh0D,EAAS,EAAI,GAQrD,EAAE,qBAAAi0D,GAAqB,qBAAAC,EAAA,IAAwBzxD,GAAQ,MAAM;AAEjE,QAAI0xD,IAAoB;AACxB,WAAIL,GAAS,UAAU,OAAOA,EAAQ,UAAW,YAAY,CAAC,MAAM,QAAQA,EAAQ,MAAM,MAExFK,IADsBliE,GAAO,OAAO,QAAQ6hE,EAAQ,MAAM,GAAG,cAAc,EACzC,IAAI,CAAC,CAAC38D,CAAG,MAAMA,CAAG,IAI/C;AAAA,MACL,qBAAqBg5D,GAAe0D,GAASM,CAAiB;AAAA,MAC9D,qBAAqBhE,GAAe2D,GAASK,CAAiB;AAAA,IAAA;AAAA,EAElE,GAAG,CAACN,GAASC,CAAO,CAAC,GAQfM,IAAa3xD;AAAA,IACjB,MAAMsvD,GAAckC,GAAqBC,CAAmB;AAAA,IAC5D,CAACD,GAAqBC,CAAmB;AAAA,EAAA,GAQrChuD,IAAUzD,GAAQ,MAClBsxD,IACKK,EAAW,OAAO,CAAAt6C,MAAOA,EAAI,WAAW,MAAM,IAEhDs6C,GACN,CAACA,GAAYL,CAAe,CAAC,GAM1BM,IAA0B,CAACj7D,MAAM;AACrC,IAAA46D,EAAmB56D,EAAE,OAAO,OAAO;AAAA,EACrC,GAGMmM,IAAaguD,GAAiBC,GAAcC,CAAY,GACxDpuD,IAAgBquD,GAAA,GAChBY,IAAkBX,GAAA;AAExB,2BACG,OAAA,EAAI,OAAO,EAAE,OAAO,UAEnB,UAAA;AAAA,IAAA,gBAAAzjE,EAAC,OAAA,EAAI,WAAU,QACb,UAAA,gBAAAA;AAAA,MAACC,EAAK;AAAA,MAAL;AAAA,QACC,MAAK;AAAA,QACL,IAAG;AAAA,QACH,OAAM;AAAA,QACN,SAAS4jE;AAAA,QACT,UAAUM;AAAA,MAAA;AAAA,IAAA,GAEd;AAAA,IAGA,gBAAAnkE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW2E,EAAU,WAAW,OAAO;AAAA,QACvC,OAAO,EAAE,QAAQ86D,GAAY,QAAQ,OAAO,OAAA;AAAA,QAE5C,UAAA,gBAAAz/D;AAAA,UAAC2W;AAAA,UAAA;AAAA,YACC,SAAAX;AAAA,YACA,YAAAX;AAAA,YACA,eAAAF;AAAA,YACA,aAAasqD,GAAY;AAAA,YACzB,aAAa2E;AAAA,UAAA;AAAA,QAAA;AAAA,MACf;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AC1HA,MAAMC,KAAe,CAAC,EAAE,WAAAn8D,GAAW,mBAAAo8D,QAAwB;AACzD,QAAM,EAAE,MAAAn8D,GAAM,SAAAC,EAAA,IAAYF,GACpB,CAACq8D,GAAiBC,CAAkB,IAAI10D,EAAS,EAAI;AAE3D,MAAI,CAAC3H,EAAM,QAAO;AAGlB,QAAMs8D,IAAqBH,EAAkB,MAAM,GAAG,CAAC,GAGjDI,IAAe,CAACC,MAAe;AACnC,QAAI,CAACA,KAAcA,MAAe;AAChC,aAAO;AAGT,UAAMthE,IAAQshE,EAAW,MAAM,iBAAiB;AAChD,WAAKthE,IAEE,CAAC,SAASA,EAAM,CAAC,GAAG,EAAE,GAAG,SAASA,EAAM,CAAC,GAAG,EAAE,CAAC,IAFnC;AAAA,EAGrB,GAGMuhE,IAAkB,CAACC,GAAUC,MAAa;AAC9C,QAAI,CAACD,KAAY,CAACC,EAAU,QAAO;AACnC,QAAI,CAACD,EAAU,QAAO;AACtB,QAAI,CAACC,EAAU,QAAO;AAEtB,UAAM,CAACC,GAAQC,CAAM,IAAIH,GACnB,CAACI,GAAQC,CAAM,IAAIJ;AAEzB,WAAIC,MAAWE,IAAeF,IAASE,IAChCD,IAASE;AAAA,EAClB,GAGMC,IAAiBV,EAAmB,CAAC,GAAG,iBAAiB,WAAW,iBACpEW,IAAkBX,EAAmB,CAAC,GAAG,iBAAiB,WAAW,iBAGrEY,IAAeX,EAAaS,CAAc,GAC1CG,IAAgBZ,EAAaU,CAAe,GAG5CG,IAAaX,EAAgBS,GAAcC,CAAa;AAE9D,MAAI3B,GAASC,GAASN,GAAcC;AAEpC,EAAIgC,KAAc,KAEhB5B,IAAUc,EAAmB,CAAC,KAAK,CAAA,GACnCb,IAAUa,EAAmB,CAAC,KAAK,CAAA,GACnCnB,IAAe6B,GACf5B,IAAe6B,MAGfzB,IAAUc,EAAmB,CAAC,KAAK,CAAA,GACnCb,IAAUa,EAAmB,CAAC,KAAK,CAAA,GACnCnB,IAAe8B,GACf7B,IAAe4B;AAGjB,QAAM5wD,IAAc,MAAM;AACxB,IAAAnM,EAAQ,EAAK;AAAA,EACf;AAMA,SACE,gBAAArH,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAAC,SAAA,EACE,UAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAcH;AAAA,IACA,gBAAAe;AAAA,MAACuI;AAAA,MAAA;AAAA,QACC,mBAAgB;AAAA,QAChB,MAAAnB;AAAA,QACA,QAAQoM;AAAA,QAER,UAAS;AAAA,QACT,iBAAgB;AAAA,QAChB,UAAQ;AAAA,QAEV,UAAA;AAAA,UAAA,gBAAAvU,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,UAAA,gBAAAvI,EAACuI,EAAM,OAAN,EAAY,UAAA;AAAA,YAAA;AAAA,YAEVm7D,EAAmB,WAAW,uBAC5B,SAAA,EAAM,WAAU,mBAAkB,UAAA,kDAAA,CAEnC;AAAA,UAAA,EAAA,CAEJ,EAAA,CACF;AAAA,UACA,gBAAAzkE;AAAA,YAACsJ,EAAM;AAAA,YAAN;AAAA,cACC,OAAO;AAAA,gBACL,WAAW;AAAA,gBACX,UAAU;AAAA,gBACV,SAAS;AAAA,cAAA;AAAA,cAGV,YAAmB,SAAS,IAC3B,gBAAAvI,EAAC,OAAA,EAAI,WAAU,mBACb,UAAA;AAAA,gBAAA,gBAAAf,EAAC,KAAA,EAAE,WAAU,cAAa,UAAA,iDAE1B;AAAA,gBACA,gBAAAe,EAAC,KAAA,EAAE,WAAU,cAAa,UAAA;AAAA,kBAAA;AAAA,kBACHujE,EAAkB;AAAA,kBAAO;AAAA,gBAAA,EAAA,CAChD;AAAA,cAAA,EAAA,CACF,sBAEC,OAAA,EACC,UAAA,gBAAAtkE;AAAA,gBAAC0jE;AAAA,gBAAA;AAAA,kBACC,SAAAC;AAAA,kBACA,SAAAC;AAAA,kBACA,cAAAN;AAAA,kBACA,cAAAC;AAAA,gBAAA;AAAA,cAAA,EACF,CAiBF;AAAA,YAAA;AAAA,UAAA;AAAA,UAGJ,gBAAAvjE,EAACsJ,EAAM,QAAN,EAAa,WAAU,yBACtB,UAAA,gBAAAtJ,EAACiB,GAAA,EAAO,SAAQ,aAAY,SAASsT,GAAa,mBAElD,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACA;AAEJ;AAEA8vD,GAAa,YAAY;AAAA,EACvB,WAAWnkE,EAAU,MAAM;AAAA,IACzB,MAAMA,EAAU,KAAK;AAAA,IACrB,SAASA,EAAU,KAAK;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,mBAAmBA,EAAU,MAAM;AACrC;ACzKA,MAAMslE,KAAgB,CAAC;AAAA,EACrB,SAAAvtD;AAAA,EACA,UAAAvE,IAAW;AAAA,EACX,eAAA+xD,IAAgB;AAClB,MAEI,gBAAA1kE;AAAA,EAACE;AAAAA,EAAA;AAAA,IACC,SAAQ;AAAA,IACR,MAAK;AAAA,IACL,SAAAgX;AAAA,IACA,UAAAvE;AAAA,IACA,OACE+xD,MAAkB,IACd,0CACA;AAAA,IAEP,UAAA;AAAA,MAAA;AAAA,MACWA;AAAA,MAAc;AAAA,IAAA;AAAA,EAAA;AAAA;AAK9BD,GAAc,OAAOxzC,GAAM;AAE3BwzC,GAAc,YAAY;AAAA,EACxB,SAAStlE,EAAU,KAAK;AAAA,EACxB,UAAUA,EAAU;AAAA,EACpB,eAAeA,EAAU;AAC3B;AAEAslE,GAAc,eAAe;AAAA,EAC3B,UAAU;AAAA,EACV,eAAe;AACjB;AAEA,MAAAE,KAAetzC,GAASozC,EAAa,GCpC/BG,yBAAyB,IAAI;AAAA,EACjC;AAAA,IACE;AAAA,IACA;AAAA,MACE,KAAK;AAAA,MACL,IAAI;AAAA,MACJ,OAAO;AAAA,IAAA;AAAA,EACT;AAAA,EAEF;AAAA,IACE;AAAA,IACA;AAAA,MACE,KAAK;AAAA,MACL,IAAI;AAAA,MACJ,OAAO;AAAA,IAAA;AAAA,EACT;AAEJ,CAAC,GAEKC,KAAmB,CAAC,EAAE,cAAAC,GAAc,UAAAC,QAAe;AACvD,QAAMC,IAASJ,GAAmB,IAAIE,CAAY;AAElD,2BACG5kE,IAAA,EAAO,SAAS6kE,GAAU,MAAK,MAAK,SAAQ,SAC1C,UAAA;AAAA,IAAAp3D,EAAOq3D,GAAQ,EAAE;AAAA,IAAE;AAAA,IAAEA,GAAQ;AAAA,EAAA,GAChC;AAEJ;AAEAH,GAAiB,YAAY;AAAA,EAC3B,cAAc1lE,EAAU,KAAK;AAAA,EAC7B,UAAUA,EAAU,KAAK;AAC3B;AC9BA,MAAM8lE,KAA2B,CAAC,EAAE,SAAA/tD,GAAS,UAAAvE,IAAW,IAAO,MAAA3Q,IAAO,SAElE,gBAAAhC;AAAA,EAACE;AAAAA,EAAA;AAAA,IACC,SAAAgX;AAAA,IACA,MAAK;AAAA,IACL,SAAQ;AAAA,IACR,UAAAvE;AAAA,IACA,WAAU;AAAA,IAET,UAAA;AAAA,MAAAhF,EAAO;AAAA,MAAa;AAAA,MAA6B3L;AAAA,IAAA;AAAA,EAAA;AAAA;AAKxDijE,GAAyB,OAAOh0C,GAAM;AAEtCg0C,GAAyB,YAAY;AAAA,EACnC,SAAS9lE,EAAU,KAAK;AAAA,EACxB,UAAUA,EAAU;AAAA,EACpB,MAAMA,EAAU;AAClB;AAEA8lE,GAAyB,eAAe;AAAA,EACtC,UAAU;AAAA,EACV,MAAM;AACR;AAEA,MAAAC,KAAe7zC,GAAS4zC,EAAwB,GC1B1CE,KAAc,MAAM;AACxB,QAAM,CAACC,GAAMC,CAAO,IAAIt2D,EAAS,EAAI;AAMrC,SACE,gBAAA/O,EAAC,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,IAAA,gBAAAA;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,OAAM;AAAA,QACN,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,SAVS,MAAM;AACnB,UAAAmlE,EAAQ,CAACD,CAAI;AAAA,QACf;AAAA,QASM,WAAW,gEACTA,IAAO,+BAA+B,SACxC;AAAA,QAEA,UAAA;AAAA,UAAA,gBAAAnmE,EAAC,QAAA,EAAK,WAAU,QAAQ,UAAA0O,EAAO,qBAAoB;AAAA,UACnD,gBAAA1O,EAAC,QAAA,EAAK,WAAU,QAAO,UAAA,aAAS;AAAA,UAC/BmmE,IAAOz3D,EAAO,cAAcA,EAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGrCy3D,KACC,gBAAAplE;AAAA,MAACk/B;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,gBAAAjgC,EAAC,UAAK,OAAO,EAAE,UAAU,WAAA,GAAc,UAAA,wEAEvC;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAS,MAAMomE,EAAQ,EAAK;AAAA,cAC5B,OAAO,EAAE,QAAQ,WAAW,SAAS,IAAA;AAAA,cACrC,WAAU;AAAA,cACV,OAAM;AAAA,cAEL,UAAA13D,EAAO;AAAA,YAAA;AAAA,UAAA;AAAA,QACV;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GAEJ;AAEJ,GC5CM23D,KAA0B,CAAC,EAAE,WAAAn+D,GAAW,MAAAF,GAAM,aAAAynC,GAAa,iBAAA62B,QAAsB;AACrF,QAAM,EAAE,MAAAn+D,GAAM,SAAAC,EAAA,IAAYF,GACpBG,IAAU5H,GAAA,GACV,CAAC8lE,GAAcC,CAAe,IAAI12D,EAAS,EAAK,GAChD,CAAC22D,GAAeC,CAAgB,IAAI52D,EAAS,EAAE,MAAM,IAAI,SAAS,IAAI,GACtE,CAAC62D,GAAiBC,CAAkB,IAAI92D,EAAS,EAAE,SAAS,IAAM,SAAS,IAAI,GAE/EyE,IAAc,MAAM;AACxB,IAAAnM,EAAQ,EAAK,GACbs+D,EAAiB,EAAE,MAAM,IAAI,SAAS,IAAI,GAC1CE,EAAmB,EAAE,SAAS,IAAM,SAAS,IAAI;AAAA,EACnD,GAEMC,IAAgB,CAACr3C,MACF,6BACD,KAAKA,CAAK,GAGxBs3C,IAAoB,CAAC59D,MAAM;AAC/B,UAAMsmB,IAAQtmB,EAAE,OAAO,MAAM,KAAA;AAE7B,IAAIsmB,MAAU,KACZo3C,EAAmB,EAAE,SAAS,IAAM,SAAS,IAAI,IACvCC,EAAcr3C,CAAK,IAM7Bo3C,EAAmB,EAAE,SAAS,IAAM,SAAS,IAAI,IALjDA,EAAmB;AAAA,MACjB,SAAS;AAAA,MACT,SAAS;AAAA,IAAA,CACV;AAAA,EAIL,GAEMG,IAAsB,CAAC79D,MAAM;AACjC,QAAIA,EAAE,QAAQ,SAAS;AACrB,YAAMsmB,IAAQtmB,EAAE,OAAO,MAAM,KAAA;AAC7B,MAAIsmB,MAAU,MAAM,CAACq3C,EAAcr3C,CAAK,KACtCo3C,EAAmB;AAAA,QACjB,SAAS;AAAA,QACT,SAAS;AAAA,MAAA,CACV;AAAA,IAEL;AAAA,EACF,GAEMI,IAAe,MAAM;AACzB,UAAMC,IAAO5+D,EAAQ;AACrB,QAAI,CAAC4+D,EAAM,QAAO;AAElB,UAAMC,IAAYD,EAAK,cAAc,0BAA0B,GACzDE,IAAwBF,EAAK,cAAc,2BAA2B,GACtEG,IAAaH,EAAK,cAAc,uBAAuB,GACvDI,IAAmBJ,EAAK,cAAc,sBAAsB,GAC5DK,IAAeL,EAAK,cAAc,kBAAkB,GAEpD9hE,IAAO+hE,IAAYA,EAAU,MAAM,SAAS,IAC5CK,IAAmBJ,IAAwBA,EAAsB,MAAM,SAAS,IAChF33C,IAAQ43C,IAAaA,EAAW,MAAM,SAAS,IAC/CI,IAAcH,IAAmBA,EAAiB,MAAM,SAAS,IACjEr3D,IAAUs3D,IAAeA,EAAa,MAAM,SAAS;AAE3D,WAAI,CAACniE,KAAQ,CAACoiE,KAAoB,CAAC/3C,KAAS,CAACg4C,KAAe,CAACx3D,KAC3D02D,EAAiB;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,IAAA,CACV,GACM,MAIJG,EAAcr3C,CAAK,IAQjB,MAPLk3C,EAAiB;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,IAAA,CACV,GACM;AAAA,EAIX,GAEMjtB,IAAe,OAAOvwC,MAAM;AAGhC,QAFAA,EAAE,eAAA,GAEE,EAAC89D,KAIL;AAAA,MAAAR,EAAgB,EAAI,GACpBE,EAAiB,EAAE,MAAM,IAAI,SAAS,IAAI;AAE1C,UAAI;AACF,cAAMO,IAAO5+D,EAAQ,SACf++D,IAAaH,EAAK,cAAc,uBAAuB,GACvDI,IAAmBJ,EAAK,cAAc,sBAAsB,GAC5DK,IAAeL,EAAK,cAAc,kBAAkB,GACpDQ,IAAgBz/D,GAAM,oBAAoB,OAC1C0/D,IAAiB;AAAA,UACrB,eAAeN,IAAaA,EAAW,MAAM,SAAS;AAAA,UACtD,aAAaC,IAAmBA,EAAiB,MAAM,SAAS;AAAA,UAChE,SAASC,IAAeA,EAAa,MAAM,SAAS;AAAA,UACpD,OAAOG,KAAiB;AAAA,UACxB,IAAIz/D,GAAM;AAAA,UACV,cAAcA,GAAM;AAAA,QAAA,GAGhB2f,IAAW,MAAMI,GAAI;AAAA,UACzB2/C;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAGF,QAAI//C,EAAS,OAAO,SAClB++C,EAAiB;AAAA,UACf,MAAM;AAAA,UACN,SAAS/+C,EAAS,OAAO;AAAA,QAAA,CAC1B,KAED++C,EAAiB;AAAA,UACf,MAAM;AAAA,UACN,SAAS;AAAA,QAAA,CACV,GAGDO,EAAK,MAAA,GACLL,EAAmB,EAAE,SAAS,IAAM,SAAS,IAAI,GAG7CN,KACFA,EAAA;AAAA,MAGN,QAAgB;AACd,QAAAI,EAAiB;AAAA,UACf,MAAM;AAAA,UACN,SAAS;AAAA,QAAA,CACV;AAAA,MACH,UAAA;AACE,QAAAF,EAAgB,EAAK;AAAA,MACvB;AAAA;AAAA,EACF;AAEA,SAAKr+D,IAGH,gBAAApH;AAAA,IAACuI;AAAA,IAAA;AAAA,MACC,MAAAnB;AAAA,MACA,QAAQoM;AAAA,MACR,UAAS;AAAA,MACT,UAAU;AAAA,MACV,UAAQ;AAAA,MACR,MAAK;AAAA,MAEL,UAAA;AAAA,QAAA,gBAAAvU,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,4BAACA,EAAM,OAAN,EAAY,UAAA,2CAAA,CAAwC,EAAA,CACvD;AAAA,QAEA,gBAAAvI,EAACuI,EAAM,MAAN,EACE,UAAA;AAAA,UAAAm9D,EAAc,6BACZxmC,IAAA,EAAM,SAASwmC,EAAc,MAAM,WAAU,QAC3C,UAAAA,EAAc,QAAA,CACjB;AAAA,UAGF,gBAAA1lE,EAACd,GAAA,EAAK,KAAKoI,GAAS,UAAUoxC,GAC5B,UAAA;AAAA,YAAA,gBAAA14C,EAACd,EAAK,OAAL,EAAW,WAAU,QACpB,UAAA;AAAA,cAAA,gBAAAc,EAACd,EAAK,OAAL,EAAW,UAAA;AAAA,gBAAA;AAAA,gBACM,gBAAAD,EAAC,QAAA,EAAK,WAAU,eAAc,UAAA,IAAA,CAAC;AAAA,cAAA,GACjD;AAAA,cACA,gBAAAA;AAAA,gBAACC,EAAK;AAAA,gBAAL;AAAA,kBACC,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,aAAY;AAAA,kBACZ,UAAQ;AAAA,kBACR,UAAQ;AAAA,kBACR,cAAcovB,GAASogB,CAAW,EAAE,QAAQ;AAAA,gBAAA;AAAA,cAAA;AAAA,YAC9C,GACF;AAAA,YAEA,gBAAA1uC,EAACd,EAAK,OAAL,EAAW,WAAU,QACpB,UAAA;AAAA,cAAA,gBAAAc,EAACd,EAAK,OAAL,EAAW,UAAA;AAAA,gBAAA;AAAA,gBACQ,gBAAAD,EAAC,QAAA,EAAK,WAAU,eAAc,UAAA,IAAA,CAAC;AAAA,cAAA,GACnD;AAAA,cACA,gBAAAA;AAAA,gBAACC,EAAK;AAAA,gBAAL;AAAA,kBACC,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,aAAY;AAAA,kBACZ,UAAQ;AAAA,kBACR,UAAQ;AAAA,kBACR,cAAcovB,GAASogB,CAAW,EAAE,SAAS;AAAA,gBAAA;AAAA,cAAA;AAAA,YAC/C,GACF;AAAA,YAEA,gBAAA1uC,EAACd,EAAK,OAAL,EAAW,WAAU,QACpB,UAAA;AAAA,cAAA,gBAAAc,EAACd,EAAK,OAAL,EAAW,UAAA;AAAA,gBAAA;AAAA,gBACK,gBAAAD,EAAC,QAAA,EAAK,WAAU,eAAc,UAAA,IAAA,CAAC;AAAA,cAAA,GAChD;AAAA,cACA,gBAAAA;AAAA,gBAACC,EAAK;AAAA,gBAAL;AAAA,kBACC,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,aAAY;AAAA,kBACZ,UAAQ;AAAA,kBACR,UAAU6mE;AAAA,kBACV,YAAYC;AAAA,kBACZ,WAAW,CAACJ,EAAgB;AAAA,gBAAA;AAAA,cAAA;AAAA,cAE7B,CAACA,EAAgB,WAChB,gBAAA3mE,EAACC,EAAK,QAAQ,UAAb,EAAsB,MAAK,WACzB,UAAA0mE,EAAgB,QAAA,CACnB;AAAA,YAAA,GAEJ;AAAA,YAEA,gBAAA5lE,EAACd,EAAK,OAAL,EAAW,WAAU,QACpB,UAAA;AAAA,cAAA,gBAAAc,EAACd,EAAK,OAAL,EAAW,UAAA;AAAA,gBAAA;AAAA,gBACE,gBAAAD,EAAC,QAAA,EAAK,WAAU,eAAc,UAAA,IAAA,CAAC;AAAA,cAAA,GAC7C;AAAA,cACA,gBAAAA;AAAA,gBAACC,EAAK;AAAA,gBAAL;AAAA,kBACC,MAAK;AAAA,kBACL,MAAK;AAAA,kBACL,aAAY;AAAA,kBACZ,UAAQ;AAAA,gBAAA;AAAA,cAAA;AAAA,YACV,GACF;AAAA,YAEA,gBAAAc,EAACd,EAAK,OAAL,EAAW,WAAU,QACpB,UAAA;AAAA,cAAA,gBAAAc,EAACd,EAAK,OAAL,EAAW,UAAA;AAAA,gBAAA;AAAA,gBACM,gBAAAD,EAAC,QAAA,EAAK,WAAU,eAAc,UAAA,IAAA,CAAC;AAAA,cAAA,GACjD;AAAA,cACA,gBAAAA;AAAA,gBAACC,EAAK;AAAA,gBAAL;AAAA,kBACC,IAAG;AAAA,kBACH,MAAM;AAAA,kBACN,MAAK;AAAA,kBACL,aAAY;AAAA,kBACZ,UAAQ;AAAA,gBAAA;AAAA,cAAA;AAAA,YACV,GACF;AAAA,YAEA,gBAAAc,EAAC,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,cAAA,gBAAAf,EAAC,YAAO,UAAA,wBAAA,CAAqB;AAAA,gCAC5B,MAAA,EAAG;AAAA,cAAE;AAAA,cACDgI,GAAM,QAAQ;AAAA,gCAClB,MAAA,EAAG;AAAA,cAAE;AAAA,cACIA,GAAM,WAAW;AAAA,YAAA,EAAA,CAC7B;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,GACF;AAAA,QAEA,gBAAAjH,EAACuI,EAAM,QAAN,EAAa,WAAU,yBACtB,UAAA;AAAA,UAAA,gBAAAtJ,EAACiB,KAAO,SAAQ,aAAY,SAASsT,GAAa,UAAUgyD,GAAc,UAAA,SAAA,CAE1E;AAAA,UACA,gBAAAvmE;AAAA,YAACiB;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,SAASw4C;AAAA,cACT,UAAU8sB;AAAA,cAET,cAAe,kBAAkB;AAAA,YAAA;AAAA,UAAA;AAAA,QACpC,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IArHc;AAwHpB;AAEAF,GAAwB,YAAY;AAAA,EAClC,WAAWnmE,EAAU,MAAM;AAAA,IACzB,MAAMA,EAAU,KAAK;AAAA,IACrB,SAASA,EAAU,KAAK;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,MAAMA,EAAU;AAAA,EAChB,iBAAiBA,EAAU;AAC7B;AAEAmmE,GAAwB,eAAe;AAAA,EACrC,MAAM,CAAA;AAAA,EACN,iBAAiB;AACnB;ACnQA,MAAMsB,KAAiB;AAAA,EACrB,uBAAuB;AAAA,EACvB,sBAAsB;AAAA,EACtB,QAAQ;AAAA,IACN,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,yBAAyB;AAAA,IACzB,oBAAoB;AAAA,EAAA;AAAA,EAEtB,SAAS;AAAA,IACP,YAAY;AAAA,IACZ,oBAAoB;AAAA,EAAA;AAExB,GAGMC,KAAc;AAAA,EAClB,CAACD,GAAe,QAAQ,UAAU,GAAG;AAAA,IACnC,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAAA,EAEV,CAACA,GAAe,QAAQ,kBAAkB,GAAG;AAAA,IAC3C,OAAO;AAAA,IACP,QAAQ;AAAA,EAAA;AAEZ,GAGME,KAAiB,CAAC91C,GAAK/pB,GAAMhC,MAAS;AAC1C,UAAQ+rB,GAAA;AAAA,IACN,KAAK41C,GAAe,QAAQ;AAC1B,aAAO,EAAE,IAAI3/D,EAAK,IAAI,MAAMhC,EAAK,cAAY;AAAA,IAC/C,KAAK2hE,GAAe,QAAQ;AAC1B,aAAO,EAAE,IAAI3/D,EAAK,IAAI,OAAO,GAAGhC,CAAI,QAAA;AAAA,IACtC;AACE,aAAO,CAAA;AAAA,EAAC;AAEd,GAEM8hE,KAAoB,CAAC/1C,GAAK/pB,GAAMhC,GAAM+M,MAAW;AACrD,UAAQgf,GAAA;AAAA,IACN,KAAK41C,GAAe,QAAQ;AAC1B,aAAO;AAAA,QACL,IAAI50D,EAAO;AAAA,QACX,YAAY/K,EAAK;AAAA,QACjB,OAAOhC;AAAA,MAAA;AAAA,IAEX,KAAK2hE,GAAe,QAAQ;AAC1B,aAAO;AAAA,QACL,IAAI50D,EAAO;AAAA,QACX,UAAU/K,EAAK;AAAA,QACf,OAAO,GAAGhC,CAAI;AAAA,MAAA;AAAA,IAElB;AACE,aAAO,CAAA;AAAA,EAAC;AAEd,GAGM+hE,KAAmB,CAACh2C,GAAKi2C,GAAMhgE,MAC/B+pB,MAAQ41C,GAAe,QAAQ,cACzBK,KAAQ,CAAA,GAAI,IAAI,CAACC,OAAO;AAAA,EAC9B,GAAGA;AAAA,EACH,aAAaA,EAAE;AAAA,EACf,IAaG,CATiB;AAAA,EACtB,UAAU,EAAE,GAAGjgE,EAAK,SAAA;AAAA,EACpB,oBAAoB,EAAE,GAAGA,EAAK,oBAAA;AAAA,EAC9B,MAAMA,EAAK,oBAAoB;AAAA,EAC/B,SAASA,EAAK,oBAAoB;AAAA,EAClC,UAAUA,EAAK;AAAA,EACf,IAAI;AAAA,GAGmB,GAAIggE,KAAQ,EAAG,GAIpCE,KAAwB,CAACn2C,GAAK/pB,MAEhC+pB,MAAQ41C,GAAe,QAAQ,sBAC/B3/D,GAAM,sBAECrF,GAAY;AAAA,EACjBqF,EAAK,oBAAoB;AAAA,EACzBA,EAAK,oBAAoB,MAAM;AAAA,CAChC,IAEI2/D,GAAe,sBAGlBQ,KAAoB,CAAC;AAAA,EACzB,aAAAlgE;AAAA,EACA,MAAAD,IAAO,CAAA;AAAA,EACP,WAAAm9B,IAAY,EAAE,aAAa,GAAC;AAAA,EAC5B,YAAAs4B,IAAa,MAAM;AAAA,EAAC;AAAA,EACpB,KAAA1rC,IAAM41C,GAAe,QAAQ;AAAA,EAC7B,OAAA7J,IAAQ;AACV,MAAM;AACJ,QAAM,CAACsK,GAAWC,CAAY,IAAIv4D,EAAS,CAAA,CAAE,GACvC,CAACw0D,GAAmBgE,CAAoB,IAAIx4D,EAAS,CAAA,CAAE,GACvD,CAACy4D,GAAkBC,CAAmB,IAAI14D,EAAS,EAAK,GACxD,CAAC24D,GAAqBC,CAAsB,IAAI54D,EAAS,EAAK,GAC9D,CAACkuD,GAAa2K,CAAc,IAAI74D;AAAA,IAAS,MAC7Co4D,GAAsBn2C,GAAK/pB,CAAI;AAAA,EAAA,GAE3B,CAAC4gE,GAAYC,CAAa,IAAI/4D,EAAS,EAAK,GAE5Cg5D,IAAiB,MAAM;AAC3B,IAAI9gE,GAAM,MACRm2B,GAAWypC,GAAY71C,CAAG,EAAE,KAAK;AAAA,MAC/B81C,GAAe91C,GAAK/pB,GAAMC,CAAW;AAAA,IAAA,EACrC,KAAK,CAAC0f,MAAa;AACnB,MAAIA,EAAS,OAAO,aAClB0gD;AAAA,QACEN;AAAA,UACEh2C;AAAA,UACApK,EAAS,SAAS,MAAM,aAAa,CAAA;AAAA,UACrC3f;AAAA,QAAA;AAAA,MACF;AAAA,IAGN,CAAC;AAAA,EAEL,GAEM+gE,IAAc3yD;AAAA,IAClB,CAACrD,MAAW;AACV,MAAAorB,GAAWypC,GAAY71C,CAAG,EAAE,MAAM;AAAA,QAChC+1C,GAAkB/1C,GAAK/pB,GAAMC,GAAa8K,CAAM;AAAA,MAAA,EAChD,KAAK,CAAC4U,MAAa;AACnB,QAAIA,EAAS,OAAO,aAClBmhD,EAAA;AAAA,MAEJ,CAAC;AAAA,IACH;AAAA,IACA,CAAC/2C,GAAK/pB,CAAI;AAAA,EAAA;AAGZ,EAAAuO,GAAU,MAAM;AACd,IAAAuyD,EAAA;AAAA,EACF,GAAG,CAAA,CAAE;AAEL,QAAMx0B,IAAgBl+B;AAAA,IACpB,CAACspB,MAAO;AACN,UAAIM,KAAYooC,KAAa,CAAA,GAAI;AAAA,QAC/B,CAACH,MAAMtlE,GAAY,CAACslE,EAAE,MAAMA,EAAE,EAAE,CAAC,MAAMjK;AAAA,MAAA;AAEzC,MAAIh+B,KAAYA,EAASjO,CAAG,MAC1BiO,IAAWN,GACX2oC,EAAa,CAAC,GAAGD,CAAS,CAAC;AAAA,IAE/B;AAAA,IACA,CAACpK,GAAaoK,GAAWr2C,CAAG;AAAA,EAAA,GAGxBi3C,IAAU5yD;AAAA,IACd,CAACrD,MAAW;AACV,MAAA41D,EAAehmE,GAAY,CAACoQ,EAAO,MAAMA,EAAO,EAAE,CAAC,CAAC;AAAA,IACtD;AAAA,IACA,CAACq1D,CAAS;AAAA,EAAA,GAGNa,IAAmB7yD;AAAA,IACvB,CAACrD,MAAW;AACV,YAAM44B,IAAOzmC,EAAUkjE,EAAU,KAAK,CAACH,MAAMA,EAAE,OAAOl1D,EAAO,EAAE,CAAC;AAChE,MAAIgf,MAAQ41C,GAAe,QAAQ,sBACjC3/D,EAAK,sBAAsB2jC,EAAK5Z,CAAG,GACnC/pB,EAAK,WAAW2jC,EAAK,UACrB8xB,EAAW/R,GAAYhmD,MAAiBsC,GAAM,EAAE,QAAQ,IAAA,CAAK,CAAC,KAE9Dy1D,EAAW,EAAE,UAAU9xB,EAAK,UAAU,CAAC5Z,CAAG,GAAG4Z,EAAK5Z,CAAG,EAAA,GAAK,MAAM;AAAA,MAAC,CAAC;AAAA,IAEtE;AAAA,IACA,CAAC0rC,GAAY2K,GAAWr2C,GAAK/pB,CAAI;AAAA,EAAA,GAG7BkhE,IAAa9yD;AAAA,IACjB,CAACrD,MAAW;AACV,YAAMo2D,IAAWf,EAAU,KAAK,CAACH,OAAMA,GAAE,OAAOl1D,EAAO,EAAE,GACnDq2D,IAAalkE,EAAUikE,EAAS,kBAAkB;AACxD,MAAAC,EAAW,QAAQD,EAAS,mBAAmB,OAC/CC,EAAW,cAAcD,EAAS,eAAe,IACjDC,EAAW,WAAWD,EAAS,YAAY,CAAA;AAE3C,YAAME,IAAO,gCAAgC;AAAA,QAC3C,KAAK,UAAUD,CAAU;AAAA,MAAA,CAC1B;AACD,MAAAhwC,GAAa;AAAA,QACX,UAAUiwC;AAAA,QACV,MAAM,GAAGD,EAAW,KAAK,IAAIphE,EAAK,KAAK,IAAImhE,EAAS,IAAI;AAAA,MAAA,CACzD;AAAA,IACH;AAAA,IACA,CAACnhE,GAAMogE,CAAS;AAAA,EAAA,GAGZ3J,IAAwBroD;AAAA,IAC5B,CAAC+yD,GAAUhM,GAAY,EAAE,OAAAkB,GAAO,SAAAD,QAAc;AAC5C,MAAAkK,EAAqB,CAACrgC,OAChBk1B,IAGAl1B,GAAK,SAAS,KACd,CAACA,GAAK;AAAA,QACJ,CAACggC,MACCtlE,GAAY,CAACslE,EAAE,MAAMA,EAAE,EAAE,CAAC,MAC1BtlE,GAAY,CAACwmE,EAAS,MAAMA,EAAS,EAAE,CAAC;AAAA,MAAA,IAGrC;AAAA,QACL,GAAGlhC;AAAA,QACH;AAAA,UACE,GAAGkhC,EAASp3C,CAAG;AAAA;AAAA,UAEf,MAAMo3C,EAAS;AAAA,UACf,IAAIA,EAAS;AAAA;AAAA,UAEb,iBAAiB,EAAE,OAAA9K,GAAO,SAAAD,EAAA;AAAA,QAAQ;AAAA,MACpC,IAGGn2B,KAGAA,GAAK,OAAO,CAACggC,MAAM;AACxB,cAAMqB,IAAY3mE,GAAY,CAACslE,EAAE,MAAMA,EAAE,EAAE,CAAC,GACtCsB,KAAa5mE,GAAY,CAACwmE,EAAS,MAAMA,EAAS,EAAE,CAAC;AAC3D,eAAOG,MAAcC;AAAA,MACvB,CAAC,CAEJ;AAAA,IACH;AAAA,IACA,CAACx3C,CAAG;AAAA,EAAA,GAGAy3C,IAAqBpzD,GAAY,MAAM;AAC3C,IAAAoyD,EAAoB,EAAI;AAAA,EAC1B,GAAG,CAAA,CAAE,GAECiB,IAAqBrzD;AAAA,IACzB,CAAC+yD,MACQ7E,EAAkB,KAAK,CAAC2D,MAAM;AACnC,YAAMyB,IAAa/mE,GAAY,CAACslE,EAAE,MAAMA,EAAE,EAAE,CAAC,GACvCsB,IAAa5mE,GAAY,CAACwmE,EAAS,MAAMA,EAAS,EAAE,CAAC;AAC3D,aAAOO,MAAeH;AAAA,IACxB,CAAC;AAAA,IAEH,CAACjF,CAAiB;AAAA,EAAA,GAGdqF,IAAevzD,GAAY,MAAM;AACrC,IAAAyyD,EAAc,CAAC5gC,MAAS,CAACA,CAAI;AAAA,EAC/B,GAAG,CAAA,CAAE,GAEC2hC,IAA2BxzD,GAAY,MAAM;AACjD,IAAAsyD,EAAuB,EAAI;AAAA,EAC7B,GAAG,CAAA,CAAE,GAECmB,IAAsBzzD,GAAY,MAAM;AAG5C,IAAA0yD,EAAA;AAAA,EACF,GAAG,CAAA,CAAE;AAGL,MAAIV,EAAU,SAAS,EAAG,QAAO;AAEjC,QAAMz5C,IAAU,CAAA,GACVqR,KACHooC,KAAa,CAAA,GAAI;AAAA,IAChB,CAACH,MAAMtlE,GAAY,CAACslE,EAAE,MAAMA,EAAE,EAAE,CAAC,MAAMjK;AAAA,EAAA,KACpC,CAAA,GACDp2D,IACHo4B,KAAYA,EAASjO,CAAG,KAAKiO,EAASjO,CAAG,EAAE,kBAAmB,CAAA,GAG3D+3C,IAAiB9pC,EAAS,aAAa,GACvC+pC,IAAoB,MACpBD,MAAmB,IAAU,KAC7BA,MAAmB,IAAU,aAC1B,IAAIA,CAAc;AAG3B,EAAI9pC,EAAS,QACXrR,EAAQ,KAAK;AAAA,IACX,SAASqR;AAAA,IACT,MAAMvmB,EAAW;AAAA,IACjB,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,OAAO;AAAA,EAAA,CACR,GAGHumB,EAASjO,CAAG,IAAIiO,EAASjO,CAAG,KAAK,CAAA,GACjCiO,EAASjO,CAAG,EAAE,SAASiO,EAASjO,CAAG,EAAE,UAAU,CAAA,GAC3CA,MAAQ41C,GAAe,QAAQ,aACjC3nC,EAAS,qBAAqB,EAAE,gBAAgBp4B,EAAA,IAEhDo4B,EAAS,aAAaA,EAAS;AAGjC,QAAMkU,IACJ,gBAAAl0C;AAAA,IAAC0xC;AAAA,IAAA;AAAA,MACC,SAAS1R,KAAY,CAAA;AAAA,MACrB,UAAUsU;AAAA,MACV,WAAW3lB;AAAA,MACX,OAAOqR,EAAS,QAAQ;AAAA,MACxB,WAAWjO,MAAQ41C,GAAe,QAAQ;AAAA,MAC1C,UAAU51C,MAAQ41C,GAAe,QAAQ;AAAA,MACzC,YAAY;AAAA,MACZ,aAAA1/D;AAAA,IAAA;AAAA,EAAA;AAIJ,SACE,gBAAAlH,EAAC2iB,IAAA,EAAI,WAAU,OACZ,UAAA;AAAA,IAAA,CAACklD,KACA,gBAAA7nE,EAAC4iB,IAAA,EAAI,IAAIgkD,GAAe,OAAO,oBAC7B,UAAA;AAAA,MAAA,gBAAA5mE,EAAC,OAAA,EAAI,WAAU,0DACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,KAAA,EAAE,UAAA;AAAA,UAAA;AAAA,UACqB4mE,GAAe;AAAA,UAAuB;AAAA,UAAI;AAAA,QAAA,GAElE;AAAA,QACA,gBAAA3nE;AAAA,UAACwlE;AAAAA,UAAA;AAAA,YACC,SAASgE;AAAA,YACT,UAAUlF,EAAkB,WAAW;AAAA,YACvC,eAAeA,EAAkB;AAAA,UAAA;AAAA,QAAA;AAAA,MACnC,GACF;AAAA,MACC8D,EAAU,IAAI,CAAC5K,GAAKjkD,MACnB,gBAAAvZ;AAAA,QAACs9D;AAAA,QAAA;AAAA,UAEC,MAAAt1D;AAAA,UACA,UAAU,EAAE,OAAA81D,GAAO,YAAYoL,EAAA;AAAA,UAC/B,WAAW,GAAG3vD,CAAG,IAAIykD,CAAW;AAAA,UAChC,KAAAR;AAAA,UACA,KAAAzrC;AAAA,UACA,UAAUg3C;AAAA,UACV,YAAYE;AAAA,UACZ,QAAQD;AAAA,UACR,YAAYS,EAAmBjM,CAAG;AAAA,UAClC,mBAAmBiB;AAAA,QAAA;AAAA,QAVd97D,GAAY,CAAC66D,EAAI,MAAMA,EAAI,EAAE,CAAC;AAAA,MAAA,CAYtC;AAAA,IAAA,GACH;AAAA,IAEF,gBAAAz8D;AAAA,MAAC4iB;AAAA,MAAA;AAAA,QACC,IACEilD,IACIjB,GAAe,OAAO,0BACtBA,GAAe,OAAO;AAAA,QAG5B,UAAA;AAAA,UAAA,gBAAA5mE,EAAC,OAAA,EAAI,WAAU,+DACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,QACZ,UAAA;AAAA,gBAAAi/B,EAAS,WAAWA,EAAS,eAC5B,gBAAAhgC,EAACyd,IAAA,EAAM,IAAG,QAAO,WAAU,QACxB,UAAA,IAAIuiB,EAAS,OAAO,IACvB;AAAA,gBAED,CAACA,EAAS,WAAW,gBAAAhgC,EAAC,QAAA,CAAA,CAAK;AAAA,cAAA,GAC9B;AAAA,cACC+xB,MAAQ41C,GAAe,QAAQ,wCAAuBzB,IAAA,CAAA,CAAY;AAAA,YAAA,GACrE;AAAA,YACA,gBAAAnlE,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,cAAA,gBAAAf;AAAA,gBAACgmE;AAAAA,gBAAA;AAAA,kBACC,SAAS4D;AAAA,kBACT,UACE,CAAC5pC,EAAS,MAAM,CAACA,EAAS,WAAW,CAACmF,EAAU,aAAa;AAAA,kBAE/D,MAAM4kC,EAAA;AAAA,gBAAkB;AAAA,cAAA;AAAA,cAE1B,gBAAA/pE;AAAA,gBAAC4lE;AAAA,gBAAA;AAAA,kBACC,cAAcgD;AAAA,kBACd,UAAUe;AAAA,gBAAA;AAAA,cAAA;AAAA,YACZ,EAAA,CACF;AAAA,UAAA,GACF;AAAA,UACC,OAAO,KAAK3pC,CAAQ,EAAE,WAAW,KAChC,gBAAAhgC;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO;AAAA,gBACL,OAAO;AAAA,gBACP,WAAW2nE,GAAe,OAAO;AAAA,cAAA;AAAA,cAGlC,UAAAzzB;AAAA,YAAA;AAAA,UAAA;AAAA,QACH;AAAA,MAAA;AAAA,IAAA;AAAA,IAGJ,gBAAAl0C;AAAA,MAACqkE;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT,MAAMkE;AAAA,UACN,SAASC;AAAA,QAAA;AAAA,QAEX,mBAAAlE;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAtkE;AAAA,MAACqmE;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT,MAAMoC;AAAA,UACN,SAASC;AAAA,QAAA;AAAA,QAEX,MAAM1oC;AAAA,QACN,aAAamF,EAAU;AAAA,QACvB,iBAAiB0kC;AAAA,MAAA;AAAA,IAAA;AAAA,EACnB,GACF;AAEJ;AAEA1B,GAAkB,YAAY;AAAA,EAC5B,aAAajoE,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,MAAMzE,EAAU;AAAA,EAChB,YAAYA,EAAU;AAAA,EACtB,OAAOA,EAAU;AAAA,EACjB,KAAKA,EAAU,MAAM;AAAA,IACnBynE,GAAe,QAAQ;AAAA,IACvBA,GAAe,QAAQ;AAAA,EAAA,CACxB;AACH;AAEAQ,GAAkB,eAAe;AAAA,EAC/B,MAAM,CAAA;AAAA,EACN,YAAY,MAAM;AAAA,EAAC;AAAA,EACnB,KAAKR,GAAe,QAAQ;AAAA,EAC5B,OAAO;AACT;AC/bA,MAAMqC,KAAW,CAACllE,MAAU;AAC1B,QAAM;AAAA,IACJ,MAAMmlE;AAAA,IACN,cAAAna;AAAA,IACA,UAAAkN;AAAA,IACA,aAAA/0D;AAAA,IACA,WAAAk9B;AAAA,EAAA,IACErgC,GAEE,CAAColE,GAAQC,CAAS,IAAIr6D,EAAS;AAAA,IACnC,MAAMm6D;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA,CACT;AAaD,MAXA1zD,GAAU,MAAM;AACd,IAAA4zD,EAAU,CAACC,OACF;AAAA,MACL,GAAGA;AAAA,MACH,MAAMH;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,IAAA,EAEX;AAAA,EACH,GAAG,CAACA,CAAS,CAAC,GAEV,CAACA,KAAa,OAAO,KAAKA,CAAS,EAAE,WAAW,EAAG,QAAO;AAE9D,QAAMhN,IAAc,CAACoN,MAAY;AAC/B,UAAM,EAAE,SAASC,GAAY,QAAQC,GAAW,YAAAC,MAAeH;AAC/D,IAAIE,EAAU,YACZJ,EAAU,CAACM,OACF;AAAA,MACL,GAAGA;AAAA,MACH,MAAMH;AAAA,MACN,QAAQC;AAAA,MACR,QAAQC,GAAY,SAASA,GAAY,SAASC,EAAU;AAAA,IAAA,EAE/D,IAEDN,EAAU,CAACM,OACF;AAAA,MACL,GAAGA;AAAA,MACH,QAAQF;AAAA,IAAA,EAEX;AAAA,EAEL,GAEMG,IAAW,CAACC,MAAU;AAC1B,IAAAR,EAAU,CAACM,OACF;AAAA,MACL,GAAGA;AAAA,MACH,QAAQE;AAAA,IAAA,EAEX;AAAA,EACH,GAEMlxB,IAAe,CAACuY,MAAO;AAC3B,UAAM,EAAE,MAAAhqD,GAAM,SAAA4iE,EAAA,IAAY5Y,GACpB6Y,IAAaxxD,GAAkBrR,CAAI;AACzC,IAAAg1D,EAAS6N,GAAYD,CAAO;AAAA,EAC9B;AAEA,2BACG,OAAA,EACC,UAAA;AAAA,IAAA,gBAAA5qE;AAAA,MAAC6X;AAAA,MAAA;AAAA,QACC,QAAQqyD,EAAO;AAAA,QACf,QAAQA,EAAO;AAAA,QACf,UAAUQ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEZ,gBAAA3pE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,WAAW,QAAQ,WAAW,QAAQ,QAAQ,OAAA;AAAA,QAEtD,UAAA;AAAA,UAAAmpE,EAAO,WAAW,OACjB,gBAAAlqE;AAAA,YAAC+8D;AAAA,YAAA;AAAA,cACC,MAAMmN,EAAO;AAAA,cACb,cAAApa;AAAA,cACA,aAAA7nD;AAAA,cACA,aAAAg1D;AAAA,cACA,UAAUxjB;AAAA,YAAA;AAAA,UAAA;AAAA,UAGbywB,EAAO,WAAW,OACjB,gBAAAlqE;AAAA,YAACmoE;AAAA,YAAA;AAAA,cACC,aAAAlgE;AAAA,cACA,MAAMiiE,EAAO;AAAA,cACb,WAAA/kC;AAAA,cACA,YAAY83B;AAAA,cACZ,OAAK;AAAA,YAAA;AAAA,UAAA;AAAA,QACP;AAAA,MAAA;AAAA,IAAA;AAAA,EAEJ,GACF;AAEJ;AAEA+M,GAAS,YAAY;AAAA,EACnB,MAAM9pE,EAAU;AAAA,EAChB,UAAUA,EAAU,KAAK;AAAA,EACzB,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,cAAczE,EAAU;AAAA,EACxB,WAAWA,EAAU;AACvB;AAEA8pE,GAAS,eAAe;AAAA,EACtB,cAAc,CAAA;AAAA,EACd,WAAW,CAAA;AACb;ACnHA,MAAMc,KAAmB,CAAAhmE,MAAS;AAChC,QAAM,EAAE,aAAAmD,GAAa,UAAA8yD,GAAU,WAAA7yD,EAAA,IAAcpD,GACvC,EAAE,MAAAqD,GAAM,SAAAC,EAAA,IAAYF,GAEpB8yD,IAAqB,CAAA9xD,MAAK;AAC9B,UAAMV,IAASilD,GAAqBvkD,GAAGjB,CAAW;AAClD,IAAA8yD,EAASvyD,CAAM,GACfJ,EAAQ,EAAK;AAAA,EACf,GAEM8yD,IAAuB,CAAApuC,MAAQ;AACnC,UAAMquC,IAAS,IAAI,WAAA;AACnB,IAAAA,EAAO,SAASH,GAChBG,EAAO,WAAWruC,EAAK,CAAC,CAAC;AAAA,EAC3B;AAEA,SACE,gBAAA/rB,EAACuI,GAAA,EAAM,MAAK,MAAK,UAAQ,IAAC,MAAAnB,GAAY,QAAQ,MAAMC,EAAQ,EAAK,GAC/D,UAAA;AAAA,IAAA,gBAAApI,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,UAAA,gBAAAtJ,EAACsJ,EAAM,OAAN,EAAa,UAAA,UAAUrB,CAAW,oBAAA,CAAoB,GACzD;AAAA,IACA,gBAAAjI,EAACsJ,EAAM,MAAN,EAAW,OAAO,EAAE,UAAU,UAC7B,UAAA,gBAAAtJ;AAAA,MAAC68B;AAAA,MAAA;AAAA,QACC,QAAQ,CAAAu+B,MAAUF,EAAqBE,CAAM;AAAA,QAC7C,WAAU;AAAA,QACV,OAAO,EAAE,QAAQ,GAAA;AAAA,QAEjB,4BAAC,OAAA,EAAI,OAAO,EAAE,YAAY,GAAA,GAAM,UAAA,iCAAA,CAA8B;AAAA,MAAA;AAAA,IAAA,EAChE,CACF;AAAA,EAAA,GACF;AAEJ;AAEA0P,GAAiB,YAAY;AAAA,EAC3B,aAAa5qE,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,UAAUzE,EAAU,KAAK;AAAA,EACzB,WAAWA,EAAU,MAAM;AAAA,IACzB,MAAMA,EAAU,KAAK;AAAA,IACrB,SAASA,EAAU,KAAK;AAAA,EAAA,CACzB,EAAE;AACL;AC5CA,SAAS6qE,GAAcjmE,GAAO;AAC5B,QAAM,EAAE,UAAAi2D,GAAU,aAAA9yD,EAAA,IAAgBnD,GAC5B,CAACqD,GAAMC,CAAO,IAAI0H,EAAS,EAAK;AAEtC,SAAI7H,MAAgBtD,EAAU,cAAc,UAAgB,OAG1D,gBAAA5D,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,MAAS,KAAK,OAAOxH,EAAY,aAAa,WAC7C,UAAA,gBAAAlH;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,SAAS,MAAMmH,EAAQ,EAAI;AAAA,QAC3B,SAAQ;AAAA,QACR,WAAU;AAAA,QAET,UAAA;AAAA,UAAAsG,EAAO;AAAA,UAAa;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEzB;AAAA,IACA,gBAAA1O;AAAA,MAAC8qE;AAAA,MAAA;AAAA,QACC,UAAA/P;AAAA,QACA,aAAA9yD;AAAA,QACA,WAAW,EAAE,MAAAE,GAAM,SAAAC,EAAA;AAAA,MAAQ;AAAA,IAAA;AAAA,EAC7B,GACF;AAEJ;AAEA2iE,GAAc,YAAY;AAAA,EACxB,aAAa7qE,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,UAAUzE,EAAU;AACtB;AAEA6qE,GAAc,eAAe,EAAE,UAAU,MAAM;AAAC,EAAA;ACzChD,MAAMC,KAAe,CAACj4D,MAAW;AAC/B,QAAM,EAAE,MAAA/K,GAAM,OAAAijE,GAAO,MAAAh4D,EAAA,IAASF;AAO9B,2BACG,QAAA,EACC,UAAA,gBAAA/S;AAAA,IAACmT;AAAA,IAAA;AAAA,MACC,KAAI;AAAA,MACJ,IAAG;AAAA,MACH,SAASnL;AAAA,MACT,SAXS,CAACkB,MAAM;AACpB,QAAA+J,EAAK,YAAY,IAAM,EAAI,GAC3Bg4D,EAAM/hE,CAAC;AAAA,MACT;AAAA,IAQe;AAAA,EAAA,GAEb;AAEJ,GClBMgiE,KAAW;AAAA,EACf,CAACvmE,EAAU,cAAc,OAAO,GAAG;AAAA,EACnC,CAACA,EAAU,cAAc,OAAO,GAAG;AAAA,EACnC,CAACA,EAAU,cAAc,OAAO,GAAG;AACrC;AAEA,MAAMwmE,GAAgB;AAAA;AAAA,EAEpB,OAAO5iD,KAAQmO,GAAY;AAAA,EAC3B,OAAOE,KAAWF,GAAY;AAAA,EAE9B,OAAO,gBAAgB,CAAC1uB,MACtBmjE,GAAgB5iD;AAAA,IACd,GAAG2iD,GAASvmE,EAAU,cAAc,OAAO,CAAC;AAAA,IAC5C;AAAA,IACAqD;AAAA,EAAA;AAAA,EAGJ,OAAO,cAAc,CAACojE,GAAMr4D,MAC1Bo4D,GAAgB5iD;AAAA,IACd,GAAG2iD,GAASvmE,EAAU,cAAc,OAAO,CAAC,IAAIymE,CAAI;AAAA,IACpD;AAAA,IACA;AAAA,IACAr4D;AAAA,EAAA;AAAA,EAGJ,OAAO,eAAe,CAACq4D,GAAMpjE,IAAO,CAAA,MAClCmjE,GAAgB5iD,GAAM,GAAG2iD,GAASE,CAAI,CAAC,sBAAsB,QAAQpjE,CAAI;AAAA,EAE3E,OAAO,kBAAkB,CAACojE,MACxBD,GAAgB5iD,GAAM,GAAG2iD,GAASE,CAAI,CAAC,aAAa;AAAA,EAEtD,OAAO,eAAe,CAACr4D,MACrBo4D,GAAgBv0C;AAAA,IACd,GAAGs0C,GAASvmE,EAAU,cAAc,OAAO,CAAC;AAAA,IAC5C;AAAA,IACA;AAAA,IACAoO;AAAA,EAAA;AAEN;ACnCA,SAASs4D,GAAW,EAAE,OAAAJ,KAAS;AAC7B,QAAM,CAACj1D,GAASC,CAAU,IAAInG,EAAS,CAAA,CAAE,GACnC,CAACkjB,GAAS+L,CAAU,IAAIjvB,EAAS,EAAI,GACrCqF,IAAgB5C;AAAA,IACpB,OAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,IAER,CAAA;AAAA,EAAC,GAGGktC,IAAcrpC,GAAY,MAAM;AAapC,KAZuB,YAAY;AACjC,MAAA2oB,EAAW,EAAI;AACf,YAAM3W,IAAM,MAAM+iD,GAAgB;AAAA,QAChCxmE,EAAU,cAAc;AAAA,MAAA;AAE1B,MAAIyjB,EAAI,QACN,QAAQ,MAAMA,EAAI,KAAK,IAEvBnS,EAAWmS,EAAI,QAAQ,QAAQ,CAAA,CAAE,GAEnC2W,EAAW,EAAK;AAAA,IAClB,GACA;AAAA,EACF,GAAG,CAAA,CAAE,GAEC1pB,IAAa;AAAA,IACjB;AAAA,MACE,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,UAAU;AAAA,IAAA;AAAA,IAEZ;AAAA,MACE,YAAY;AAAA,MACZ,cAAc21D;AAAA,MACd,oBAAoB,EAAE,OAAAC,EAAA;AAAA,IAAM;AAAA,IAE9B;AAAA,MACE,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,IAER,EAAE,YAAY,WAAW,OAAO,UAAA;AAAA,IAChC,EAAE,YAAY,eAAe,UAAU,KAAK,OAAO,eAAe,MAAM,EAAA;AAAA,IACxE,EAAE,YAAY,cAAc,UAAU,KAAK,OAAO,aAAA;AAAA,EAAa;AAGjE,SACE,gBAAAjrE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW2E,EAAU,WAAW,OAAO;AAAA,MACvC,OAAO,EAAE,QAAQ,SAAS,OAAO,QAAQ,UAAU,OAAA;AAAA,MAEnD,UAAA,gBAAA3E;AAAA,QAAC2W;AAAA,QAAA;AAAA,UACC,SAAAqc;AAAA,UACA,aAAAysB;AAAA,UACA,YAAApqC;AAAA,UACA,eAAAF;AAAA,UACA,SAAAa;AAAA,UACA,WAAU;AAAA,UACV,kBAAgB;AAAA,QAAA;AAAA,MAAA;AAAA,IAClB;AAAA,EAAA;AAGN;AAEAq1D,GAAW,YAAY;AAAA,EACrB,OAAOnrE,EAAU,KAAK;AACxB;ACpEA,SAASoX,GAAkBvE,GAAQ;AACjC,QAAM,EAAE,MAAA/K,MAAS+K;AACjB,SACE,gBAAAhS,EAAAsI,GAAA,EACG,UAAA;AAAA,IAAArB,EAAK,eAAe;AAAA,IAAM;AAAA,sBAE1B,KAAA,EAAE,WAAWA,EAAK,eAAe,WAAW,eAAY,OAAA,CAAO;AAAA,EAAA,GAClE;AAEJ;AAEA,SAASsjE,GAAW,EAAE,OAAAL,KAAS;AAC7B,QAAM,CAACj1D,GAASC,CAAU,IAAInG,EAAS,CAAA,CAAE,GACnC,CAACkjB,GAAS+L,CAAU,IAAIjvB,EAAS,EAAI,GACrCqF,IAAgB5C;AAAA,IACpB,OAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,IAER,CAAA;AAAA,EAAC,GAGGktC,IAAcrpC,GAAY,MAAM;AAapC,KAZuB,YAAY;AACjC,MAAA2oB,EAAW,EAAI;AACf,YAAM3W,IAAM,MAAM+iD,GAAgB;AAAA,QAChCxmE,EAAU,cAAc;AAAA,MAAA;AAE1B,MAAIyjB,EAAI,QACN,QAAQ,MAAMA,EAAI,KAAK,IAEvBnS,EAAWmS,EAAI,QAAQ,QAAQ,CAAA,CAAE,GAEnC2W,EAAW,EAAK;AAAA,IAClB,GACA;AAAA,EACF,GAAG,CAAA,CAAE,GAEC1pB,IAAa;AAAA,IACjB;AAAA,MACE,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,UAAU;AAAA,IAAA;AAAA,IAEZ;AAAA,MACE,YAAY;AAAA,MACZ,cAAc21D;AAAA,MACd,oBAAoB,EAAE,OAAAC,EAAA;AAAA,IAAM;AAAA,IAE9B;AAAA,MACE,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,IAER;AAAA,MACE,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,cAAc3zD;AAAA,MACd,MAAM;AAAA,IAAA;AAAA,IAER,EAAE,YAAY,WAAW,OAAO,UAAA;AAAA,IAChC,EAAE,YAAY,eAAe,OAAO,eAAe,MAAM,EAAA;AAAA,IACzD,EAAE,YAAY,cAAc,OAAO,aAAA;AAAA,EAAa;AAGlD,SACE,gBAAAtX;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW2E,EAAU,WAAW,OAAO;AAAA,MACvC,OAAO,EAAE,QAAQ,SAAS,OAAO,QAAQ,UAAU,OAAA;AAAA,MAEnD,UAAA,gBAAA3E;AAAA,QAAC2W;AAAA,QAAA;AAAA,UACC,SAAAqc;AAAA,UACA,aAAAysB;AAAA,UACA,YAAApqC;AAAA,UACA,eAAAF;AAAA,UACA,SAAAa;AAAA,UACA,WAAU;AAAA,UACV,kBAAgB;AAAA,QAAA;AAAA,MAAA;AAAA,IAClB;AAAA,EAAA;AAGN;AAEAs1D,GAAW,YAAY;AAAA,EACrB,OAAOprE,EAAU,KAAK;AACxB;ACrFA,SAASqrE,GAAW,EAAE,OAAAN,KAAS;AAC7B,QAAM,CAACj1D,GAASC,CAAU,IAAInG,EAAS,CAAA,CAAE,GACnC,CAACkjB,GAAS+L,CAAU,IAAIjvB,EAAS,EAAI,GACrCqF,IAAgB5C;AAAA,IACpB,OAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAM;AAAA,IAAA;AAAA,IAER,CAAA;AAAA,EAAC,GAGGktC,IAAcrpC,GAAY,MAAM;AAapC,KAZuB,YAAY;AACjC,MAAA2oB,EAAW,EAAI;AACf,YAAM3W,IAAM,MAAM+iD,GAAgB;AAAA,QAChCxmE,EAAU,cAAc;AAAA,MAAA;AAE1B,MAAIyjB,EAAI,QACN,QAAQ,MAAMA,EAAI,KAAK,IAEvBnS,EAAWmS,EAAI,SAAS,QAAQ,CAAA,CAAE,GAEpC2W,EAAW,EAAK;AAAA,IAClB,GACA;AAAA,EACF,GAAG,CAAA,CAAE,GAEC1pB,IAAa;AAAA,IACjB;AAAA,MACE,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,UAAU;AAAA,IAAA;AAAA,IAEZ;AAAA,MACE,YAAY;AAAA,MACZ,cAAc21D;AAAA,MACd,oBAAoB,EAAE,OAAAC,EAAA;AAAA,IAAM;AAAA,IAE9B;AAAA,MACE,YAAY;AAAA,MACZ,OAAO;AAAA,IAAA;AAAA,IAET;AAAA,MACE,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,IAER;AAAA,MACE,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,MAAM;AAAA,IAAA;AAAA,IAER,EAAE,YAAY,WAAW,OAAO,UAAA;AAAA,IAChC,EAAE,YAAY,eAAe,OAAO,eAAe,MAAM,EAAA;AAAA,IACzD,EAAE,YAAY,cAAc,OAAO,aAAA;AAAA,EAAa;AAGlD,SACE,gBAAAjrE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW2E,EAAU,WAAW,OAAO;AAAA,MACvC,OAAO,EAAE,QAAQ,SAAS,OAAO,QAAQ,UAAU,OAAA;AAAA,MAEnD,UAAA,gBAAA3E;AAAA,QAAC2W;AAAA,QAAA;AAAA,UACC,SAAAqc;AAAA,UACA,aAAAysB;AAAA,UACA,YAAApqC;AAAA,UACA,eAAAF;AAAA,UACA,SAAAa;AAAA,UACA,WAAU;AAAA,UACV,kBAAgB;AAAA,QAAA;AAAA,MAAA;AAAA,IAClB;AAAA,EAAA;AAGN;AAEAu1D,GAAW,YAAY;AAAA,EACrB,OAAOrrE,EAAU,KAAK;AACxB;AC7EA,MAAMsrE,KAAoB;AAAA,EACxB,SAASH;AAAA,EACT,SAASC;AAAA,EACT,SAASC;AACX;AAEA,SAASE,GAAa,EAAE,WAAAtrC,GAAW,SAAA4K,GAAS,UAAAz6B,GAAU,SAAAwD,KAAW;AAC/D,QAAM43D,IAAmBF,GAAkB13D,CAAO;AAClD,MAAI,CAAC43D,EAAkB,QAAO;AAE9B,QAAMjmE,IAAQ,WAAWqO,CAAO;AAEhC,SACE,gBAAA/S;AAAA,IAACuI;AAAA,IAAA;AAAA,MACC,UAAQ;AAAA,MACR,UAAS;AAAA,MACT,MAAK;AAAA,MACL,MAAM62B;AAAA,MACN,QAAQ4K;AAAA,MACR,iBAAgB;AAAA,MAEhB,UAAA;AAAA,QAAA,gBAAA/qC,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,4BAACA,EAAM,OAAN,EAAa,UAAA7D,EAAA,CAAM,EAAA,CACtB;AAAA,QACA,gBAAAzF,EAACsJ,EAAM,MAAN,EAAW,OAAO,EAAE,UAAU,OAAA,GAC7B,UAAA,gBAAAtJ,EAAC0rE,GAAA,EAAiB,OAAOp7D,GAAU,EAAA,CACrC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAm7D,GAAa,YAAY;AAAA,EACvB,WAAWvrE,EAAU,KAAK;AAAA,EAC1B,SAASA,EAAU,OAAO;AAAA,EAC1B,SAASA,EAAU,KAAK;AAAA,EACxB,UAAUA,EAAU,KAAK;AAC3B;AChCA,SAASyrE,GAAQ7mE,GAAO;AACtB,QAAM,EAAE,WAAA8mE,GAAW,aAAA3jE,GAAa,YAAA4jE,EAAA,IAAe/mE,GACzC,CAACqD,GAAMC,CAAO,IAAI0H,EAAS,EAAK,GAEhC4kC,IAAa,MAAMtsC,EAAQ,EAAI,GAC/BmM,IAAc,MAAMnM,EAAQ,EAAK,GACjCE,IAAe,OAAOyK,MAAW;AACrC,QAAI;AACF,YAAM4U,IAAW,MAAMwjD,GAAgB,aAAaljE,GAAa;AAAA,QAC/D,YAAY8K,EAAO;AAAA,MAAA,CACpB;AACD,MAAI4U,EAAS,OAAO,YAClBikD,EAAA,IAEAC,EAAW,IAAI9mE,GAAS4iB,EAAS,QAAQ,CAAA,CAAE,CAAC;AAAA,IAEhD,SAASG,GAAO;AACd,cAAQ,MAAM,4BAA4BA,CAAK,GAC/C+jD;AAAA,QACE,IAAI9mE,GAASQ,GAAY,4BAA4BuiB,CAAK,EAAE,GAAG,CAAA,CAAE;AAAA,MAAA;AAAA,IAErE,UAAA;AACE,MAAA1f,EAAQ,EAAK;AAAA,IACf;AAAA,EACF;AAEA,SACE,gBAAArH,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,IAAA,EAAS,KAAI,gBACZ,UAAA,gBAAA1O,EAACE,KAAO,SAAQ,WAAU,SAASyzC,GAChC,UAAA;AAAA,MAAAhmC,EAAO;AAAA,MAAe;AAAA,IAAA,EAAA,CACzB,EAAA,CACF;AAAA,IACA,gBAAA1O;AAAA,MAACyrE;AAAA,MAAA;AAAA,QACC,SAASxjE;AAAA,QACT,SAASsM;AAAA,QACT,UAAUjM;AAAA,QACV,WAAWH;AAAA,MAAA;AAAA,IAAA;AAAA,EACb,GACF;AAEJ;AAEAwjE,GAAQ,YAAY;AAAA,EAClB,WAAWzrE,EAAU,KAAK;AAAA,EAC1B,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,YAAYzE,EAAU;AACxB;AAEAyrE,GAAQ,eAAe,EAAE,YAAY,MAAM;AAAC,EAAA;ACtC5C,MAAMG,KAAoB;AAAA,EACxB,CAACnnE,EAAU,cAAc,OAAO,GAAG;AAAA,EACnC,CAACA,EAAU,cAAc,OAAO,GAAG;AAAA,EACnC,CAACA,EAAU,cAAc,OAAO,GAAG;AACrC,GAEMonE,KAAa,CAAC/lE,MAAS;AAC3B,QAAMjD,IAAO+oE,GAAkB9lE,CAAI;AACnC,SACE,gBAAAjF,EAAC,OAAA,EAAI,WAAU,YACb,UAAA;AAAA,IAAA,gBAAAf,EAAC,UAAK,UAAA,iBAAA,CAAmB;AAAA,IACzB,gBAAAA,EAAC,QAAA,EAAK,WAAU,WAAW,UAAA+C,EAAA,CAAK;AAAA,EAAA,GAClC;AAEJ,GAEMipE,KAAW,CAACC,MAAW;AAC3B,QAAM;AAAA,IACJ,QAAA/6D;AAAA,IACA,UAAAZ;AAAA,IACA,UAAAyqD;AAAA,IACA,UAAAjqD;AAAA,IACA,UAAAksD;AAAA,IACA,UAAAkP;AAAA,IACA,YAAAl5D;AAAA,IACA,UAAAkU;AAAA,IACA,WAAA0kD;AAAA,IACA,aAAA3jE;AAAA,IACA,UAAAqN,IAAW,CAAA;AAAA,IACX,SAAA5T;AAAA,IACA,SAAAye;AAAA,IACA,WAAAglB,IAAY,EAAE,aAAa,CAAA,EAAC;AAAA,EAAE,IAC5B8mC,GACE,CAACz2D,GAAO22D,CAAQ,IAAIr8D,EAASnL,EAAU,WAAW,OAAO,KAAK,GAC9D,CAACqD,GAAM08C,CAAO,IAAI50C,EAAS,IAAI,GAC/B,CAAC4F,GAAY02D,CAAa,IAAIt8D,EAAS,EAAE,GACzCwjD,IAAQ7yD,GAAA,GACR4rE,IAAmB5rE,GAAA,GACnB6rE,IAAoB7rE,GAAA,GAEpB8rE,IAAgBh6D;AAAA,IACpB,MAAMxQ,GAAOL,KAAW,IAAI,CAAC,OAAO,CAAC;AAAA,IACrC,CAACA,CAAO;AAAA,EAAA;AAGV,EAAA6U,GAAU,MAAM;AACd,QAAIjB,EAAS,SAAS,KAAKtN,GAAM;AAC/B,YAAMkc,IAAc5O,EAAS,KAAK,CAACpM,MAAMA,EAAE,OAAOlB,EAAK,EAAE;AACzD,MACEkc,KACAA,EAAY,qBAAqB,SAASlc,EAAK,oBAAoB,QAEnE08C,EAAQx/C,EAAUgf,CAAW,CAAC;AAAA,IAElC;AAAA,EACF,GAAG,CAAC5O,CAAQ,CAAC;AAEb,QAAMk3D,IAAiB,CAAC5pB,MAAU;AAChC,QAAIA,GAAO;AACT,YAAM1+B,IAAchf,EAAU09C,CAAK;AACnC,MAAA8B,EAAQxgC,CAAW;AAAA,IACrB;AAAA,EACF,GAEMqvC,IAAyBn9C,GAAY,MAAM;AAC/C,IAAAg2D,EAAc9Y,EAAM,QAAQ,KAAK;AAAA,EACnC,GAAG,CAAA,CAAE,GAEC39C,IAAkBS,GAAY,CAACq2D,MAAoB;AACvD,IAAAJ,EAAiB,UAAUI;AAAA,EAC7B,GAAG,CAAA,CAAE,GAEC72D,IAAmBQ,GAAY,CAACs2D,MAAqB;AACzD,IAAAJ,EAAkB,UAAUI;AAAA,EAC9B,GAAG,CAAA,CAAE,GAECC,IAAsBv2D,GAAY,MAAM;AAE5C,IAAAsuC,EAAQ,IAAI,GAEZ0nB,EAAc,EAAE,GAEZ9Y,EAAM,YACRA,EAAM,QAAQ,QAAQ,KAGpBgZ,EAAkB,WACpBA,EAAkB,QAAA,GAGhBD,EAAiB,WACnBA,EAAiB,QAAA;AAAA,EAErB,GAAG,CAAA,CAAE,GAECO,IAAU,MAAM;AACpB,YAAQ3kE,GAAA;AAAA,MACN,KAAKtD,EAAU,cAAc;AAC3B,eACE,gBAAA3E;AAAA,UAAC+W;AAAA,UAAA;AAAA,YACC,aAAa7F;AAAA,YACb,mBAAmBg7D;AAAA,YACnB,iBAAiBl5D;AAAA,YACjB,eAAelC;AAAA,YACf,aAAaoW;AAAA,YACb,YAAYslD;AAAA,YAEZ,UAAAl3D;AAAA,YACA,UAAUmC,GAAoBjC,CAAK;AAAA,YACnC,OAAAA;AAAA,YACA,aAAaxN,MAAS;AAAA,YACtB,YAAA0N;AAAA,YACA,iBAAAC;AAAA,YACA,kBAAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MAGN,KAAKjR,EAAU,cAAc;AAC3B,eACE,gBAAA3E;AAAA,UAACuX;AAAA,UAAA;AAAA,YACC,aAAarG;AAAA,YACb,mBAAmBg7D;AAAA,YACnB,iBAAiBl5D;AAAA,YACjB,eAAelC;AAAA,YACf,aAAaoW;AAAA,YACb,YAAYslD;AAAA,YAEZ,UAAAl3D;AAAA,YACA,UAAUmC,GAAoBjC,CAAK;AAAA,YACnC,OAAAA;AAAA,YACA,aAAaxN,MAAS;AAAA,YACtB,YAAA0N;AAAA,YACA,iBAAAC;AAAA,YACA,kBAAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MAGN,KAAKjR,EAAU,cAAc;AAC3B,eACE,gBAAA3E;AAAA,UAACwX;AAAA,UAAA;AAAA,YACC,aAAatG;AAAA,YACb,mBAAmBg7D;AAAA,YACnB,iBAAiBl5D;AAAA,YACjB,aAAakU;AAAA,YACb,YAAYslD;AAAA,YAEZ,UAAAl3D;AAAA,YACA,UAAUmC,GAAoBjC,CAAK;AAAA,YACnC,OAAAA;AAAA,YACA,aAAaxN,MAAS;AAAA,YACtB,YAAA0N;AAAA,YACA,iBAAAC;AAAA,YACA,kBAAAC;AAAA,UAAA;AAAA,QAAA;AAAA,MAGN;AACE,sCAAS,UAAA,kBAAA,CAAe;AAAA,IAAA;AAAA,EAE9B;AAEA,2BACGxU,IAAA,EAAiB,OAAO,EAAE,SAASmrE,GAAe,aAAAtkE,KACjD,UAAA;AAAA,IAAA,gBAAAlH,EAAC2iB,IAAA,EAAI,WAAU,2BACb,UAAA;AAAA,MAAA,gBAAA1jB,EAAC2jB,IAAA,EAAI,IAAG,QACN,UAAA,gBAAA5iB,EAAC8rE,MAAc,OAAO,EAAE,SAAS,eAAA,GAC/B,UAAA;AAAA,QAAA,gBAAA7sE,EAAC2rE,IAAA,EAAQ,WAAAC,GAAsB,aAAA3jE,EAAA,CAA0B;AAAA,QACzD,gBAAAjI;AAAA,UAACuQ;AAAA,UAAA;AAAA,YACC,QACE,gBAAAvQ;AAAA,cAACqQ;AAAA,cAAA;AAAA,gBACC,UAAAC;AAAA,gBACA,aAAArI;AAAA,cAAA;AAAA,YAAA;AAAA,YAGJ,WACE,gBAAAjI,EAAC+qE,IAAA,EAAc,UAAAhQ,GAAoB,aAAA9yD,EAAA,CAA0B;AAAA,YAE/D,cAAc,MAAMkkE,EAASxnE,EAAU,WAAW,OAAO,KAAK;AAAA,YAC9D,cAAc,MAAMwnE,EAASxnE,EAAU,WAAW,OAAO,KAAK;AAAA,YAE9D,UAAA,gBAAA3E;AAAA,cAACiB;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,SAAS0rE;AAAA,gBACT,WAAU;AAAA,gBACX,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED;AAAA,QAAA;AAAA,MACF,EAAA,CACF,EAAA,CACF;AAAA,MACA,gBAAA3sE,EAAC2jB,IAAA,EACC,UAAA,gBAAA5iB,EAAC,OAAA,EAAI,WAAU,gBACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,iCACb,UAAA;AAAA,UAAA,gBAAAf,EAAC,QAAA,EAAK,WAAU,+DACb,UAAA0O,EAAO,mBACV;AAAA,UACA,gBAAA1O;AAAA,YAACC,EAAK;AAAA,YAAL;AAAA,cACC,KAAKqzD;AAAA,cACL,MAAK;AAAA,cACL,aAAY;AAAA,cACZ,OAAO,EAAE,aAAa,OAAA;AAAA,cACtB,UAAUC;AAAA,YAAA;AAAA,UAAA;AAAA,QACZ,GACF;AAAA,QACA,gBAAAvzD;AAAA,UAACmQ;AAAA,UAAA;AAAA,YACC,WAAW;AAAA,YACX,WAAU;AAAA,YACV,SACE,gBAAAnQ,EAACoQ,IAAA,EAAQ,IAAG,0BAAyB,UAAA,cAAU;AAAA,YAGjD,UAAA,gBAAApQ;AAAA,cAACiB;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,MAAM,CAAC2W,GAAU,UAAU,UAAU,EAAE,KAAK,GAAG;AAAA,gBAC/C,QAAO;AAAA,gBACP,SAAS,CAAC1O,MAAMA,EAAE,gBAAA;AAAA,gBAEjB,UAAAwF,EAAO;AAAA,cAAA;AAAA,YAAA;AAAA,UACV;AAAA,QAAA;AAAA,MACF,EAAA,CACF,EAAA,CACF;AAAA,MACCq9D,GAAW9jE,CAAW;AAAA,IAAA,GACzB;AAAA,IACC2kE,EAAA;AAAA,IACA5kE,IACC,gBAAAhI;AAAA,MAACgqE;AAAA,MAAA;AAAA,QACC,MAAAhiE;AAAA,QACA,UAAAg1D;AAAA,QAKA,UAAA91C;AAAA,QACA,aAAAjf;AAAA,QACA,SAAAkY;AAAA,QACA,WAAAglB;AAAA,MAAA;AAAA,IAAA,IAGF,gBAAAnlC,EAAAqJ,GAAA,CAAA,CAAE;AAAA,EAAA,GAEN;AAEJ,GCnPMyjE,KAAiB1sE,GAAW,CAAC,EAAE,SAAAC,EAAA,GAAWE,MAAQ;AACtD,QAAM4G,IAAS9G,GAAS,YAAY,UAAU,CAAA,GAExC8gB,IAAkB9gB,GAAS,YAAY,EAAE,QAAQ,CAAA,GAAI,UAAU,GAAC,GAEhE,CAAC+gB,GAAWC,CAAY,IAAIvR,EAAS3I,CAAM,GAC3C,CAACma,GAAaC,CAAc,IAAIzR,EAASqR,CAAe,GACxDvC,IAAyBne,GAAO,IAAI;AAoB1C,MAjBA8V,GAAU,MAAM;AACd,UAAMoD,IAAYlB,GAAiBtR,GAAQga,CAAe;AAC1D,IAAAE,EAAa1H,EAAU,MAAM,GAC7B4H,EAAe5H,EAAU,QAAQ;AAAA,EACnC,GAAG,CAAA,CAAE,GAGL7Y,GAAoBP,GAAK,OAAO;AAAA,IAC9B,YAAY,OAAO;AAAA,MACjB,QAAQ6gB;AAAA,MACR,UAAUE;AAAA,IAAA;AAAA,EACZ,EACA,GAEE,CAACjhB,GAAS,YAAY,UAEN,OAAO,OAAO8G,CAAM,EACxB,WAAW,EAAG,QAAOiX;AAGrC,QAAMsD,IAAyB,CAAChJ,GAAWtR,MAAa;AACtD,UAAMuR,IAASvR,EAAS,UAAU,CAAA,GAC5BwR,IAAY,OAAO,OAAOF,CAAS,GAGnCG,wBAAuB,IAAA;AAC7B,IAAAF,EAAO,QAAQ,CAACtR,MAAU;AACxB,MAAAA,EAAM,QAAQ,QAAQ,CAACjD,MAAayU,EAAiB,IAAIzU,CAAQ,CAAC;AAAA,IACpE,CAAC;AAGD,UAAM0U,IAAkBF,EAAU;AAAA,MAChC,CAAC/R,MAAU,CAACgS,EAAiB,IAAIhS,EAAM,GAAG;AAAA,IAAA,GAItCkS,IAAQ;AAAA,MACZ,GAAGJ,EAAO,IAAI,CAACtR,OAAW;AAAA,QACxB,MAAM;AAAA,QACN,MAAMA;AAAA,QACN,UAAUA,EAAM,YAAY;AAAA,MAAA,EAC5B;AAAA,MACF,GAAGyR,EAAgB,IAAI,CAACjS,OAAW;AAAA,QACjC,MAAM;AAAA,QACN,MAAMA;AAAA,QACN,UAAUA,EAAM,YAAY;AAAA,MAAA,EAC5B;AAAA,IAAA;AAKJ,WAAO;AAAA,MACL,OAHkB9E,GAAOgX,GAAO,UAAU;AAAA,MAI1C,WAAWL;AAAA,IAAA;AAAA,EAEf,GAEMiJ,IAAmBD,EAAuBva,GAAQga,CAAe,GACjES,IAAeF,EAAuBN,GAAWE,CAAW,GAG5DO,IAAkB,CAACC,GAAWC,GAAWrH,MAAY;AAGzD,UAAMzB,IAAgB,CAAC,GAAIqI,EAAY,UAAU,CAAA,CAAG,GAC9ClI,IAAaH,EAAc,UAAU,CAAC3R,MAAMA,EAAE,OAAOoT,CAAO;AAElE,QAAItB,MAAe,GAAI;AAEvB,UAAM/R,IAAQ4R,EAAcG,CAAU,GAChC4I,IAAc3a,EAAM,UAAU,CAAA,GAE9B4a,IAAcD,EAAY,QAAQF,CAAS,GAC3CI,IAAcF,EAAY,QAAQD,CAAS;AAEjD,QAAIE,MAAgB,MAAMC,MAAgB,GAAI;AAG9C,UAAMC,IAAiB,CAAC,GAAGH,CAAW,GAChC,CAACI,CAAO,IAAID,EAAe,OAAOF,GAAa,CAAC;AACtD,IAAAE,EAAe,OAAOD,GAAa,GAAGE,CAAO,GAE7CnJ,EAAcG,CAAU,IAAI;AAAA,MAC1B,GAAG/R;AAAA,MACH,QAAQ8a;AAAA,IAAA,GAGVZ,EAAe;AAAA,MACb,GAAGD;AAAA,MACH,QAAQrI;AAAA,IAAA,CACT;AAAA,EACH,GAGMoJ,IAAqB,CAACC,GAAeC,MAAkB;AAE3D,UAAMN,IAAcL,EAAa,MAAM;AAAA,MACrC,CAACzI,MACEA,EAAK,SAAS,WAAWA,EAAK,KAAK,OAAOmJ,KAC1CnJ,EAAK,SAAS,WAAWA,EAAK,KAAK,QAAQmJ;AAAA,IAAA,GAG1CJ,IAAcN,EAAa,MAAM;AAAA,MACrC,CAACzI,MACEA,EAAK,SAAS,WAAWA,EAAK,KAAK,OAAOoJ,KAC1CpJ,EAAK,SAAS,WAAWA,EAAK,KAAK,QAAQoJ;AAAA,IAAA;AAGhD,QAAIN,MAAgB,MAAMC,MAAgB,GAAI;AAG9C,UAAMM,IAAiB,CAAC,GAAGZ,EAAa,KAAK,GACvC,CAACa,CAAS,IAAID,EAAe,OAAOP,GAAa,CAAC;AACxD,IAAAO,EAAe,OAAON,GAAa,GAAGO,CAAS;AAG/C,UAAMxJ,IAAgB,CAAC,GAAIqI,EAAY,UAAU,CAAA,CAAG,GAC9CpI,IAAgB,EAAE,GAAGkI,EAAA;AAE3B,IAAAoB,EAAe,QAAQ,CAACrJ,GAAMtE,MAAU;AACtC,UAAIsE,EAAK,SAAS,SAAS;AACzB,cAAMC,IAAaH,EAAc;AAAA,UAC/B,CAAC3R,MAAMA,EAAE,OAAO6R,EAAK,KAAK;AAAA,QAAA;AAE5B,QAAIC,MAAe,OACjBH,EAAcG,CAAU,IAAI;AAAA,UAC1B,GAAGH,EAAcG,CAAU;AAAA,UAC3B,UAAUvE;AAAA,QAAA,GAGZoE,EAAcG,CAAU,EAAE,QAAQ,QAAQ,CAAChV,MAAa;AACtD,UAAI8U,EAAc9U,CAAQ,MACxB8U,EAAc9U,CAAQ,IAAI;AAAA,YACxB,GAAG8U,EAAc9U,CAAQ;AAAA,YACzB,UAAUyQ;AAAA,UAAA;AAAA,QAGhB,CAAC;AAAA,MAEL,WAAWsE,EAAK,SAAS,SAAS;AAChC,cAAM/U,IAAW+U,EAAK,KAAK;AAC3B,QAAID,EAAc9U,CAAQ,MACxB8U,EAAc9U,CAAQ,IAAI;AAAA,UACxB,GAAG8U,EAAc9U,CAAQ;AAAA,UACzB,UAAUyQ;AAAA,QAAA;AAAA,MAGhB;AAAA,IACF,CAAC,GAGD0M,EAAe;AAAA,MACb,GAAGD;AAAA,MACH,QAAQrI;AAAA,IAAA,CACT,GACDoI,EAAanI,CAAa;AAAA,EAC5B,GAEMyxB,IAAQ,CAAChzB,GAAKgL,IAAQ,IAAOjI,IAAU,SAAS;AACpD,UAAM;AAAA,MACJ,OAAA6D;AAAA,MACA,OAAAjP;AAAA,MACA,OAAAsT,IAAQ;AAAA,MACR,IAAA1b;AAAA,MACA,KAAAD;AAAA,MACA,QAAAiX;AAAA,IAAA,IACEvG;AAEJ,QAAI,CADco1D,GAAep1D,GAAKgL,IAAQvB,IAAYja,CAAM,EAChD,QAAO;AAEvB,UAAM2M,IACJ,gBAAA9T;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,GAAGqP,GAAQC,CAAK,CAAC;AAAA,QAC5B,OAAO,EAAE,YAAY,OAAA;AAAA,QAEpB,UAAAgP,GAAmBsE,GAAOrE,GAAOtX,GAAKiX,GAAQhX,CAAE;AAAA,MAAA;AAAA,IAAA;AAKrD,WAAK,CAACyb,KAAS,CAACjI,KAAYxT,IAExB,gBAAAlH;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAEV,UAAA,gBAAAA,EAAC,SAAK,UAAA8T,EAAA,CAAQ;AAAA,MAAA;AAAA,MAHT,GAAG7M,CAAG,IAAI0b,IAAQ,QAAQ,SAAS;AAAA,IAAA,IAS1CjI,IAEA,gBAAA1a;AAAA,MAAC6f;AAAA,MAAA;AAAA,QAEC,MAAM,kBAAkBnF,CAAO;AAAA,QAC/B,OAAO/C;AAAA,QACP,OAAM;AAAA,QACN,YAAY,CAACmK,GAAWC,MACtBF,EAAgBC,GAAWC,GAAWrH,CAAO;AAAA,QAE/C,SAAO;AAAA,QAEN,UAAA5G;AAAA,MAAA;AAAA,MATI,GAAG7M,CAAG,IAAI0b,IAAQ,QAAQ,SAAS;AAAA,IAAA,IAgB5C,gBAAA3iB;AAAA,MAAC6f;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,OAAO,EAAE,MAAM,SAAS,KAAA5Y,GAAK,OAAAsX,GAAO,UAAU5G,EAAI,SAAA;AAAA,QAClD,OAAM;AAAA,QACN,YAAY,CAACmK,GAAWC,MACtBM,EAAmBP,GAAWC,CAAS;AAAA,QAEzC,SAAO;AAAA,QAEN,UAAAjO;AAAA,MAAA;AAAA,MATI,GAAG7M,CAAG,IAAI0b,IAAQ,QAAQ,SAAS;AAAA,IAAA;AAAA,EAY9C,GAGMD,IAAc,CAAC7b,GAAO8b,IAAQ,IAAOjI,IAAU,SACnDiwB,EAAM9jC,GAAO8b,GAAOjI,CAAO,GAGvBuI,IAAc,CAAC5b,GAAOsb,IAAQ,OAAU;AAC5C,UAAM5H,IACJ1T,EAAM,QACF;AAAA,MACA,CAACjD,OACEue,IAAQf,IAAeD,GAAkB,UAAUvd,CAAQ;AAAA,IAAA,EAE/D,OAAO,OAAO,KAAK,CAAA,GAElBmf,IACJ,gBAAAxiB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QAEV,OAAO,EAAE,YAAY,OAAA;AAAA,QAErB,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA;AAAA,YAAA,gBAAAf,EAACyd,MAAM,IAAG,aAAY,WAAU,QAC7B,YAAO,cACV;AAAA,YACA,gBAAAzd,EAAC,UAAA,EAAQ,UAAAqH,EAAM,MAAA,CAAM;AAAA,UAAA,GAIvB;AAAA,4BACC,OAAA,EACE,UAAA;AAAA,YAAA0T,EAAY,IAAI,CAAClU,MAAU6b,EAAY7b,GAAO8b,GAAOtb,EAAM,EAAE,CAAC;AAAA,YAC9D0T,EAAY,WAAW,uBACrB,OAAA,EAAI,WAAU,yBAAwB,UAAA,0BAAA,CAAuB;AAAA,UAAA,EAAA,CAElE;AAAA,QAAA;AAAA,MAAA;AAAA,MAjBK,SAAS1T,EAAM,EAAE,IAAIsb,IAAQ,QAAQ,SAAS;AAAA,IAAA;AAqBvD,WAAKA,IAUH,gBAAA3iB;AAAA,MAAC6f;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,OAAO;AAAA,UACL,MAAM;AAAA,UACN,IAAIxY,EAAM;AAAA,UACV,OAAOA,EAAM;AAAA,UACb,KAAKA,EAAM;AAAA,UACX,UAAUA,EAAM;AAAA,QAAA;AAAA,QAElB,OAAM;AAAA,QACN,YAAY,CAACya,GAAWC,MACtBM,EAAmBP,GAAWC,CAAS;AAAA,QAEzC,SAAO;AAAA,QAEN,UAAAwB;AAAA,MAAA;AAAA,MAfI,SAASlc,EAAM,EAAE;AAAA,IAAA,IATtB,gBAAArH,EAAC,SAAsC,WAAU,iBAC9C,eADO,SAASqH,EAAM,EAAE,UAE3B;AAAA,EAyBN,GAGMmc,IAA2B,MAAM;AACrC,UAAM,EAAE,OAAAzK,MAAU4I;AAElB,WACE,gBAAA3hB,EAAAqJ,GAAA,EACG,UAAA0P,EAAM,IAAI,CAACI,MACNA,EAAK,SAAS,UACT8J,EAAY9J,EAAK,MAAM,EAAK,IAE9BuJ,EAAYvJ,EAAK,MAAM,IAAO,IAAI,CAC1C,EAAA,CACH;AAAA,EAEJ,GAGMsK,IAAuB,MAAM;AACjC,UAAM,EAAE,OAAA1K,MAAU6I;AAElB,WACE,gBAAA5hB,EAAAqJ,GAAA,EACG,UAAA0P,EAAM,IAAI,CAACI,MACNA,EAAK,SAAS,UACT8J,EAAY9J,EAAK,MAAM,EAAI,IAE7BuJ,EAAYvJ,EAAK,MAAM,IAAM,IAAI,CACzC,EAAA,CACH;AAAA,EAEJ;AAEA,SACE,gBAAApY,EAAC,OAAA,EAAI,WAAU,4BACb,UAAA;AAAA,IAAA,gBAAAA,EAAC2iB,IAAA,EAAI,WAAU,YACb,UAAA;AAAA,MAAA,gBAAA1jB,EAAC2jB,IAAA,EAAI,IAAI,GACP,UAAA,gBAAA3jB,EAAC8U,MAAO,OAAM,uBAAsB,sCAAwB,EAAA,CAC9D;AAAA,MACA,gBAAA9U,EAAC2jB,MAAI,IAAI,GAAG,WAAU,gBACpB,UAAA,gBAAA5iB,EAAC+T,IAAA,EAAO,OAAM,mBAAkB,UAAA;AAAA,QAAA;AAAA,QACvBpG,EAAO;AAAA,QAAwB;AAAA,MAAA,EAAA,CAGxC,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IACA,gBAAA1O;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK4e;AAAA,QACL,WAAU;AAAA,QACV,OAAO;AAAA,UACL,WAAW;AAAA,UACX,WAAW;AAAA,UACX,WAAW;AAAA,UACX,UAAU;AAAA,QAAA;AAAA,QAGZ,UAAA,gBAAA7d,EAAC2iB,IAAA,EAAI,WAAU,cACb,UAAA;AAAA,UAAA,gBAAA1jB,EAAC2jB,IAAA,EAAI,IAAI,GAAG,OAAO,EAAE,UAAU,WAAA,GAC5B,UAAAH,EAAA,EAAyB,CAC5B;AAAA,UACA,gBAAAxjB,EAAC2jB,IAAA,EAAI,IAAI,GAAG,OAAO,EAAE,UAAU,WAAA,GAC5B,UAAAF,EAAA,EAAqB,CACxB;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAzjB,EAAC2e,MAAU,wBAAAC,EAAA,CAAgD;AAAA,EAAA,GAC7D;AAEJ,CAAC;AAEDkuD,GAAe,cAAc;ACnY7B,SAASE,GAAc,EAAE,SAAAhpE,IAAU,CAAA,GAAI,aAAAiE,GAAa,QAAA+b,IAAS,MAAM;AAAC,KAAK;AACvE,QAAM,CAAC7b,GAAMC,CAAO,IAAI0H,EAAS,EAAK,GAChCmU,IAAoBxjB,GAAO,IAAI;AAErC,MADIuD,GAAS,UAEX,OAAO,KAAKA,EAAQ,UAAU,EAAE,WAAW,KAC3CiE,MAAgBtD,EAAU,cAAc;AAExC,WAAO;AAET,QAAMmf,IAAa,CAACI,MAAgB;AAClC,UAAMxb,IAAUxD,EAAUlB,CAAO;AACjC,IAAA0E,EAAQ,WAAW,SAASwb,EAAY;AAExC,UAAMvL,IAASuL,EAAY,UAAU,UAAU,CAAA;AAC/C,IAAIvL,EAAO,WAAW,IACpBjQ,EAAQ,WAAW,CAAA,IAEnBA,EAAQ,WAAW;AAAA,MACjB,QAAAiQ;AAAA,MACA,UAAUuL,EAAY,UAAU,YAAY,CAAA;AAAA,IAAC,GAGjDxb,EAAQ,UAAU,IAClBsb,EAAOtb,CAAO;AAAA,EAChB;AAEA,SACE,gBAAA3H,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,IAAA,EAAS,KAAI,iBACZ,UAAA,gBAAA1O,EAACE,GAAA,EAAO,MAAK,MAAK,SAAQ,WAAU,SAAS,MAAMmH,EAAQ,EAAI,GAC5D,UAAA;AAAA,MAAAsG,EAAO;AAAA,MAAO;AAAA,IAAA,EAAA,CACjB,EAAA,CACF;AAAA,IACA,gBAAA1O;AAAA,MAAC4jB;AAAA,MAAA;AAAA,QACC,aAAA3b;AAAA,QACA,WAAW,EAAE,MAAAE,GAAM,SAAAC,EAAA;AAAA,QACnB,QAAQ0b;AAAA,QAER,UAAA,gBAAA9jB;AAAA,UAAC8sE;AAAA,UAAA;AAAA,YACC,KAAK7oD;AAAA,YACL,SAAS/e,EAAUlB,KAAW,CAAA,CAAE;AAAA,UAAA;AAAA,QAAA;AAAA,MAClC;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAEAgpE,GAAc,YAAY;AAAA,EACxB,SAAS9sE,EAAU;AAAA,EACnB,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,QAAQzE,EAAU;AACpB;AACA8sE,GAAc,eAAe;AAAA,EAC3B,SAAS,CAAA;AAAA,EACT,QAAQ,MAAM;AAAA,EAAC;AACjB;AC/CA,MAAM3T,KAAY,EAAE,cAAcnC,GAAA,GAE5B+V,KAAiB,CAACzjD,GAAYpiB,MAAa;AAC/C,QAAMD,IAASmxD,GAAqB9uC,GAAY,UAAU,CAAA,CAAE;AAC5D,SAAOgvC,GAAoBrxD,GAAQC,CAAQ;AAC7C,GAEM8lE,KAAU,CAAC,EAAE,YAAA1jD,IAAa,CAAA,GAAI,UAAApiB,IAAW,IAAI,OAAAykC,IAAQ,CAAA,QAAS;AAClE,MAAI,CAACriB,KAAc,OAAO,KAAKA,CAAU,EAAE,SAAS;AAClD,WAAO;AAGT,QAAMpI,IAAY6rD,GAAezjD,GAAYpiB,CAAQ,GAC/CkU,IAAevZ,GAAOqf,GAAW,OAAK9c,EAAE,QAAQ,KAAK,CAAA,GACrD6oE,IAAethC,EAAM,IAAI,CAAAgB,MAAKA,EAAE,KAAK,IAAI,GACzCugC,IAAkB9xD,EAAa;AAAA,IACnC,CAAAhX,MAAK,CAAC6oE,EAAa,SAAS7oE,EAAE,GAAG;AAAA,EAAA;AAGnC,2BACG,SAAA,EACC,UAAA;AAAA,IAAA,gBAAAtE,EAAC,OAAA,EAAI,WAAU,eAAc,UAAA,6EAG7B;AAAA,IACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,eAAc,UAAA,+EAG7B;AAAA,IACA,gBAAAA,EAAC62D,IAAA,EAAS,OAAOuW,EAAA,CAAiB;AAAA,EAAA,GACpC;AAEJ,GAEMC,KAAe,CAAC,EAAE,SAAAhtE,GAAS,QAAA2jB,QAAa;AAC5C,QAAM,EAAE,YAAAwF,GAAY,UAAApiB,EAAA,IAAa/G,GAC3B,CAACqrC,CAAI,IAAI57B,EAAS0Z,GAAY,GAAG,QAAQ,EAAE,GAC3CgwC,IAAmB/4D,GAAO,IAAI,GAC9B,CAACg5D,GAAmBC,CAAoB,IAAI5pD,EAAS,IAAI,GACzD,CAAC+7B,GAAO8tB,CAAQ,IAAI7pD;AAAA,IACxB8oD,GAAcltB,EAAK,SAAS,IAAI,OAAO,KAAKuhC,GAAezjD,GAAYpiB,CAAQ,CAAC,CAAC;AAAA,EAAA,GAE7E,CAAC0kC,GAAOguB,CAAQ,IAAIhqD,EAAS47B,EAAK,SAAS,EAAE,GAC7C,CAAC4hC,GAASC,CAAU,IAAIz9D,EAAS,EAAK,GAEtC+T,IAASzN,GAAY,MAAM;AAC/B,QAAIqjD,GAAmB;AACrB,YAAM+T,IAAO/T,EAAkB,SAAA;AAC/B,MAAAz1C,EAAO,EAAE,MAAAwpD,GAAM;AAAA,IACjB;AAAA,EACF,GAAG,CAAC/T,GAAmBz1C,CAAM,CAAC;AAE9B,EAAAzN,GAAU,MAAM;AACd,IAAI+2D,MACFzpD,EAAA,GACA0pD,EAAW,EAAK;AAAA,EAEpB,GAAG,CAACD,GAASzpD,CAAM,CAAC;AAEpB,QAAM+1C,IAAgBxjD,GAAY,CAAAssD,MAAW;AAC3C,IAAA/I,EAAS,CAAAW,MAAOmT,GAAiB/K,GAASpI,CAAG,CAAC,GAC9CiT,EAAW,EAAI;AAAA,EACjB,GAAG,CAAA,CAAE,GAECxT,IAAgB3jD,GAAY,CAAAssD,MAAW;AAC3C,IAAA5I,EAAS,CAAAG,MAAOyT,GAAiBhL,GAASzI,CAAG,CAAC,GAC9CsT,EAAW,EAAI;AAAA,EACjB,GAAG,CAAA,CAAE,GAECtW,IAAY7gD,GAAY,CAAArD,MAAU;AACtC,IAAA+mD;AAAA,MAAS,CAAAG,MACPC;AAAA,QACE;AAAA,UACE,GAAGnnD;AAAA,UACH,UAAU;AAAA,UACV,WAAW,EAAE,MAAMg5B,GAAW,YAAA;AAAA,UAC9B,OAAO;AAAA,QAAA;AAAA,QAETkuB;AAAA,MAAA;AAAA,IACF,GAEFsT,EAAW,EAAI;AAAA,EACjB,GAAG,CAAA,CAAE,GAECpT,IAAU,CAAClnD,GAAMgM,MAAY;AACjC,QAAIw6C,GAAmB;AACrB,YAAMW,IAAen7C,EAAQ,gBAAA,GACvBo7C,IAAkBb,EAAiB,QAAQ,sBAAA;AACjD,UAAI1sB,IAAW;AAAA,QACb,GAAGstB,EAAa,IAAIC,EAAgB;AAAA,QACpC,GAAGD,EAAa,IAAIC,EAAgB;AAAA,MAAA;AAEtC,MAAAvtB,IAAW2sB,EAAkB,QAAQ3sB,CAAQ;AAC7C,YAAMooB,IAAUyD,GAAiB,EAAE,OAAO1lD,GAAM,UAAA65B,GAAU;AAC1D,MAAA6sB,EAAS,CAAAW,MAAOA,EAAI,OAAOpF,CAAO,CAAC;AAAA,IACrC;AAAA,EACF,GAEM,CAAA,EAAG10C,CAAI,IAAIC,GAAQ;AAAA,IACvB,QAAQ;AAAA,IACR,MAAM,CAACtH,GAAM8F,MAAY;AACvB,MAAAk7C,EAAQhhD,GAAM8F,CAAO;AAAA,IACvB;AAAA,IACA,SAAS,CAAAA,OACA,EAAE,QAAQA,EAAQ,OAAA,GAAU,SAASA,EAAQ,UAAQ;AAAA,EAC9D,CACD;AAED,SAAA1I,GAAU,MAAM;AACd,UAAMo3D,IAAWnkD,GAAY,GAAG,QAAQ,CAAA;AACxC,IAAI,OAAO,KAAKmkD,CAAQ,EAAE,WAAW,MACrChU;AAAA,MACEf;AAAA,QACE+U,EAAS,SAAS,CAAA;AAAA,QAClB,OAAO,KAAKV,GAAezjD,GAAYpiB,CAAQ,CAAC;AAAA,MAAA;AAAA,IAClD,GAEF0yD,EAAS6T,EAAS,SAAS,EAAE;AAAA,EAC/B,GAAG,CAACnkD,CAAU,CAAC,qBAGZ,OAAA,EAAI,KAAKhJ,GAAM,WAAU,WACxB,4BAACg6C,IAAA,EACC,UAAA;AAAA,IAAA,gBAAAx6D,EAAC,OAAA,EAAI,WAAU,qBAAoB,KAAKw5D,GACtC,UAAA,gBAAAx5D;AAAA,MAACy6D;AAAA,MAAA;AAAA,QACC,OAAA5uB;AAAA,QACA,OAAAC;AAAA,QACA,WAAAmrB;AAAA,QACA,eAAA2C;AAAA,QACA,eAAAG;AAAA,QACA,QAAQL;AAAA,QACR,gBAAgBgB,GAAe;AAAA,QAAA,WAC/BrB;AAAAA,QACA,eAAe,CAAC,UAAU,WAAW;AAAA,QACrC,SAAO;AAAA,QAEP,4BAACsB,IAAA,CAAA,CAAS;AAAA,MAAA;AAAA,IAAA,GAEd;AAAA,IACA,gBAAA36D,EAACktE,IAAA,EAAQ,YAAA1jD,GAAwB,UAAApiB,GAAoB,OAAAykC,EAAA,CAAc;AAAA,EAAA,EAAA,CACrE,EAAA,CACF;AAEJ;AAEAwhC,GAAa,YAAY;AAAA,EACvB,SAASntE,EAAU,OAAO;AAAA,EAC1B,QAAQA,EAAU,KAAK;AACzB;AC/JA,SAAS0tE,GAAW,EAAE,SAAA5pE,IAAU,CAAA,GAAI,aAAAiE,GAAa,QAAA+b,IAAS,MAAM;AAAC,KAAK;AACpE,QAAM,CAAC7b,GAAMC,CAAO,IAAI0H,EAAS,EAAK;AAEtC,MADI9L,GAAS,UAEX,OAAO,KAAKA,EAAQ,UAAU,EAAE,WAAW,KAC3CiE,MAAgBtD,EAAU,cAAc;AAExC,WAAO;AAET,QAAMmf,IAAa,CAAC,EAAE,MAAA0pD,QAAW;AAC/B,UAAM9kE,IAAUxD,EAAUlB,KAAW,EAAE;AACvC,QAAI,EAAE,OAAA6nC,MAAU2hC;AAChB,UAAMK,IAAW,EAAE,GAAGL,EAAA;AACtB,IAAI9kE,EAAQ,eACNmjC,EAAM,WAAW,IACnB,OAAOnjC,EAAQ,WAAW,KAE1BmjC,IAAQA,EAAM,IAAI,CAAC54B,MAAS;AAC1B,UAAIA,EAAK,SAAStO,EAAU,WAAW,SAAS;AAC9C,cAAM,EAAE,OAAA4Z,GAAO,GAAGuvD,EAAA,IAAa76D,EAAK;AACpC,eAAO,EAAE,GAAGA,GAAM,MAAM66D,EAAA;AAAA,MAC1B;AACA,aAAO76D;AAAA,IACT,CAAC,GACD46D,EAAS,QAAQhiC,GACjB,OAAO,OAAOnjC,EAAQ,YAAY,EAAE,GAAG,EAAE,MAAMmlE,EAAA,GAAY,IAE7DnlE,EAAQ,UAAU,IAClBsb,EAAOtb,CAAO;AAAA,EAElB;AAEA,SACE,gBAAA3H,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,IAAA,EAAS,KAAI,aACZ,UAAA,gBAAA1O,EAACE,IAAA,EAAO,MAAK,MAAK,SAAQ,WAAU,SAAS,MAAMmH,EAAQ,EAAI,GAC7D,UAAA;AAAA,MAAA,gBAAApI,EAAC+U,IAAA,EAAI,IAAE,GAAA,CAAC;AAAA,MAAE;AAAA,MAAErG,EAAO;AAAA,MAAa;AAAA,IAAA,EAAA,CAClC,EAAA,CACF;AAAA,sBACCioD,IAAA,EAAc,aAAA1uD,GAA0B,WAAW,EAAE,MAAAE,GAAM,SAAAC,KAC1D,UAAA,gBAAApI,EAACqtE,IAAA,EAAa,SAASnoE,EAAUlB,KAAW,CAAA,CAAE,GAAG,QAAQ8f,GAAY,EAAA,CACvE;AAAA,EAAA,GACF;AAEJ;AAEA8pD,GAAW,YAAY;AAAA,EACrB,SAAS1tE,EAAU;AAAA,EACnB,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,QAAQzE,EAAU;AACpB;AACA0tE,GAAW,eAAe;AAAA,EACxB,SAAS,CAAA;AAAA,EACT,QAAQ,MAAM;AAAA,EAAC;AACjB;ACzDA,MAAMvU,KAAY,EAAE,cAAcnC,GAAA,GAE5B6W,KAAW,CAAC,EAAE,YAAAvkD,GAAY,mBAAAyvC,QAAwB;AACtD,QAAMO,IAAmB/4D,GAAO,IAAI,GAC9B,GAAGi5D,CAAoB,IAAI5pD,EAAS,IAAI,GACxC,CAAC6uB,GAAUC,CAAW,IAAI9uB;AAAA,IAAS,MACvCkpD,GAAkB,EAAE,YAAAxvC,GAAY,mBAAAyvC,GAAmB;AAAA,EAAA,GAE/C,CAACptB,GAAA,EAAS+tB,CAAa,IAAIC,GAAcl7B,EAAS,KAAK,GACvD,CAACmN,KAASiuB,CAAa,IAAIC,GAAcr7B,EAAS,SAAS,EAAE;AAEnE,SAAApoB,GAAU,MAAM;AACd,IAAAqoB,EAAYo6B,GAAkB,EAAE,YAAAxvC,GAAY,mBAAAyvC,EAAA,CAAmB,CAAC;AAAA,EAClE,GAAG,CAACzvC,GAAYyvC,CAAiB,CAAC,GAGhC,gBAAAj5D,EAAC,OAAA,EAAI,WAAU,WACb,UAAA,gBAAAA,EAACw6D,IAAA,EACC,UAAA,gBAAAx6D,EAAC,OAAA,EAAI,WAAU,qBAAoB,KAAKw5D,GACtC,UAAA,gBAAAx5D;AAAA,IAACy6D;AAAA,IAAA;AAAA,MACC,OAAA5uB;AAAA,MACA,OAAOC,KAAS,CAAA;AAAA,MAChB,eAAA8tB;AAAA,MACA,eAAAG;AAAA,MACA,QAAQL;AAAA,MACR,WAAAL;AAAA,MACA,SAAO;AAAA,MAEP,4BAACsB,IAAA,CAAA,CAAS;AAAA,IAAA;AAAA,EAAA,EACZ,CACF,GACF,GACF;AAEJ;AAEAoT,GAAS,YAAY;AAAA,EACnB,YAAY7tE,EAAU,OAAO;AAAA,EAC7B,mBAAmBA,EAAU,OAAO;AACtC;AC1CA,MAAM8tE,KAAgB,CAAC,EAAE,SAAAhqE,QAAc;AACrC,QAAM,CAACmE,GAAMC,CAAO,IAAI0H,EAAS,EAAK,GAChC0Z,IAAaxlB,EAAQ,cAAc,CAAA,GACnCi1D,IAAoBj1D,EAAQ,sBAAsB,CAAA;AAGxD,MADIA,GAAS,UACT,OAAO,KAAKi1D,KAAqB,CAAA,CAAE,EAAE,SAAS,EAAG,QAAO;AAE5D,QAAMgV,IACH,OAAO,KAAKhV,EAAkB,QAAQ,CAAA,CAAE,EAAE,SAAS,KAClDA,EAAkB,MAAM,UAAU,SAAS,KAC7C,IACIiV,IACH,OAAO,KAAKjV,EAAkB,cAAc,CAAA,CAAE,EAAE,SAAS,KACxDA,EAAkB,YAAY,OAAO,SAAS,KAChD;AAEF,SAAI,CAACgV,KAAW,CAACC,IAAsB,OAGrC,gBAAAntE,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ,EAACyP,IAAA,EAAS,KAAI,WACZ,UAAA,gBAAA1O,EAACE,IAAA,EAAO,MAAK,MAAK,SAAQ,WAAU,SAAS,MAAMmH,EAAQ,EAAI,GAC7D,UAAA;AAAA,MAAA,gBAAApI,EAAC+U,IAAA,EAAI,IAAE,GAAA,CAAC;AAAA,MAAE;AAAA,IAAA,EAAA,CACZ,EAAA,CACF;AAAA,sBACC4hD,IAAA,EAAc,WAAW,EAAE,MAAAxuD,GAAM,SAAAC,KAChC,UAAA,gBAAApI;AAAA,MAAC+tE;AAAA,MAAA;AAAA,QACC,YAAAvkD;AAAA,QACA,mBAAAyvC;AAAA,MAAA;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GACF;AAEJ;AAEA+U,GAAc,YAAY;AAAA,EACxB,SAAS9tE,EAAU,OAAO;AAC5B;ACnCA,MAAMiuE,KAAmB,CAAC,EAAE,SAAAnqE,GAAS,SAAAsZ,GAAS,MAAAhK,QAAW;AACvD,QAAM,CAAC86D,GAAWC,CAAY,IAAIv+D,EAAS,EAAK;AAGhD,SADI9L,GAAS,UAEX,CAAC;AAAA,IACCW,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,EACxB,SAASX,EAAQ,YAAY,KAAK,IAE7B,OAqBP,gBAAAjD;AAAA,IAAC8Q;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,MAAAyB;AAAA,MACA,SAAAgK;AAAA,MACA,SAvBiB,YAAY;AAC/B,YAAI;AACF,UAAA+wD,EAAa,EAAI;AAEjB,gBAAM1mD,IAAW,MAAMwjD,GAAgB,aAAa;AAAA,YAClD,IAAInnE,EAAQ;AAAA,YACZ,OAAOA,EAAQ,YAAY;AAAA,YAC3B,eAAe;AAAA,UAAA,CAChB;AAED,gBAAMyyB,GAAuB9O,CAAQ;AAAA,QACvC,SAASG,GAAO;AACd,kBAAQ,MAAM,yBAAyBA,CAAK;AAAA,QAC9C,UAAA;AACE,UAAAumD,EAAa,EAAK;AAAA,QACpB;AAAA,MACF;AAAA,MAQI,UAAUD;AAAA,MAET,UAAA;AAAA,QAAAA,IAAY1/D,EAAO,YAAYA,EAAO;AAAA,QAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGxD;AAEAy/D,GAAiB,YAAY;AAAA,EAC3B,SAASjuE,EAAU;AAAA,EACnB,SAASA,EAAU;AAAA,EACnB,MAAMA,EAAU;AAClB;AAEAiuE,GAAiB,eAAe;AAAA,EAC9B,SAAS,CAAA;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AACR;AC9DA,SAASG,KAAiB;AACxB,2BACG,OAAA,EACC,UAAA;AAAA,IAAA,gBAAAtuE,EAACwO,MAAgB,MAAMF,IAAW,MAAI,IAAC,MAAK,MAAK;AAAA,IACjD,gBAAAtO,EAAC,OAAE,UAAA,aAAA,CAAU;AAAA,EAAA,GACf;AAEJ;ACHA,MAAMuuE,KAAe,CAAC,EAAE,MAAApmE,GAAM,SAAA4iC,GAAS,YAAA0yB,GAAY,SAAAp9D,GAAS,aAAA4H,QAAkB;AAC5E,QAAM,CAAC+qB,GAAS+L,CAAU,IAAIjvB,EAAS,EAAK;AAE5C,MACE,CAAC;AAAA,IACCnL,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,EACxB,SAASsD,CAAW;AAEtB,WAAO;AAET,QAAMsM,IAAc,MAAM;AACxB,IAAAw2B,EAAA;AAAA,EACF,GAEMk+B,IAAmB,CAACE,GAAU5Z,MAAO;AACzC,IAAAkO,EAAW0L,GAAU5Z,CAAE;AAAA,EACzB;AAEA,SACE,gBAAAxuD;AAAA,IAACuI;AAAA,IAAA;AAAA,MACC,UAAQ;AAAA,MACR,MAAAnB;AAAA,MACA,QAAQoM;AAAA,MACR,YAAU;AAAA,MACV,UAAS;AAAA,MAET,UAAA;AAAA,QAAA,gBAAAvU,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,4BAACA,EAAM,OAAN,EAAY,UAAA,oBAAA,CAAiB,EAAA,CAChC;AAAA,QACA,gBAAAtJ;AAAA,UAACsJ,EAAM;AAAA,UAAN;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,QAAQ,qBAAA;AAAA,YAEhB,UAAA0pB,IACC,gBAAAhzB,EAAC,OAAA,EAAI,WAAU,gEACb,UAAA,gBAAAA,EAACsuE,IAAA,EAAe,EAAA,CAClB,IAEA,gBAAAtuE,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA,gBAAAA;AAAA,cAACmoE;AAAA,cAAA;AAAA,gBACC,aAAAlgE;AAAA,gBACA,MAAM5H;AAAA,gBACN,YAAY4oE;AAAA,gBACZ,KAAI;AAAA,cAAA;AAAA,YAAA,EACN,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAsF,GAAa,YAAY;AAAA,EACvB,MAAMruE,EAAU,KAAK;AAAA,EACrB,SAASA,EAAU,KAAK;AAAA,EACxB,YAAYA,EAAU;AAAA,EACtB,SAASA,EAAU;AAAA,EACnB,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AACL;AAEA4pE,GAAa,eAAe,EAAE,SAAS,CAAA,GAAI,YAAY,MAAM;AAAC,EAAA;ACjE9D,MAAMC,KAAgB,CAAC,EAAE,SAAAxqE,GAAS,aAAAiE,GAAa,YAAAw1D,QAAiB;AAC9D,QAAM,CAACt1D,GAAMC,CAAO,IAAI0H,EAAS,EAAK;AAEtC,MACE,CAAC;AAAA,IACCnL,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,EACxB,SAASsD,CAAW;AAEtB,WAAO;AAET,MAAIjE,GAAS;AACX,WACE,gBAAAjD,EAACE,GAAA,EAAO,SAAS,MAAM;AAAA,IAAC,GAAG,MAAK,MAAK,SAAQ,WAAU,UAAQ,IAC5D,UAAA;AAAA,MAAAyN,EAAO;AAAA,MAAkB;AAAA,IAAA,GAC5B;AAGJ,QAAM+/D,IAAiB,CAACtF,GAAU5Z,MAAO;AACvC,IAAAnnD,EAAQ,EAAK,GACbq1D,EAAW0L,GAAU5Z,CAAE;AAAA,EACzB;AAEA,SACE,gBAAAxuD,EAAAsI,GAAA,EACE,UAAA;AAAA,IAAA,gBAAArJ;AAAA,MAACmQ;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,QACX,WAAU;AAAA,QACV,SAAS,gBAAAnQ,EAACoQ,IAAA,EAAQ,IAAIkI,MAAQ,UAAA,sBAAkB;AAAA,QAEhD,UAAA,gBAAAvX,EAACE,GAAA,EAAO,SAAS,MAAMmH,EAAQ,CAACD,CAAI,GAAG,MAAK,MAAK,SAAQ,WACtD,UAAA;AAAA,UAAAuG,EAAO;AAAA,UAAkB;AAAA,QAAA,EAAA,CAC5B;AAAA,MAAA;AAAA,IAAA;AAAA,IAEDvG,KACC,gBAAAnI;AAAA,MAACuuE;AAAA,MAAA;AAAA,QACC,YAAYE;AAAA,QACZ,MAAMtmE,KAAQ;AAAA,QACd,SAAS,MAAMC,EAAQ,EAAK;AAAA,QAC5B,SAASpE;AAAA,QACT,aAAAiE;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GAEJ;AAEJ;AAEAumE,GAAc,YAAY;AAAA,EACxB,SAAStuE,EAAU,OAAO;AAAA,EAC1B,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,YAAYzE,EAAU;AACxB;AAEAsuE,GAAc,eAAe,EAAE,YAAY,MAAM;AAAC,EAAA;ACtDlD,SAASE,GAAa5pE,GAAO;AAC3B,QAAM,EAAE,OAAAoB,GAAO,SAAAlC,GAAS,UAAA2qE,EAAA,IAAa7pE;AACrC,MACEd,MACC,OAAOA,EAAQ,aAAe,OAC7BA,EAAQ,eAAekC,EAAM,QAC7BlC,EAAQ;AAEV,WAAO;AAGT,QAAM4qE,IAAe,MAAM;AACzB,UAAMC,IAAW3pE,EAAUlB,CAAO;AAClC,QAAI8qE,IAAa9qE;AACjB,UAAM+qE,IAAShnB,GAAQ/jD,GAASkC,CAAK;AACrC,QAAI6oE,EAAO,CAAC,GAAG;AACb,MAAAD,EAAW,aAAaC,EAAO,CAAC,GAChCD,EAAW,qBAAqB5oE,EAAM,oBACtC4oE,EAAW,WAAW5oE,EAAM,YAAY,CAAA,GACxC4oE,EAAW,UAAU;AAGrB,YAAME,IAAe7lB,GAAe0lB,GAAUC,CAAU;AACxD,UAAIE,EAAa,CAAC,GAAG;AACnB,QAAAF,IAAaE,EAAa,CAAC;AAG3B,cAAM1zD,IAAevZ;AAAAA,UACnB,OAAO,OAAO+sE,EAAW,WAAW,MAAM;AAAA,UAC1C,CAAC,YAAY,aAAa;AAAA,QAAA,GAItBp2D,IAAY8C,GAAeF,CAAY,GACvC3B,IAAYlB,GAAiBC,GAAWo2D,EAAW,QAAQ;AAEjE,QAAAA,EAAW,WAAW,SAASn1D,EAAU,QACzCm1D,EAAW,WAAWn1D,EAAU;AAAA,MAClC;AAAA,IACF;AACE,MAAAm1D,IAAaC,EAAO,CAAC;AAEvB,IAAAJ,EAASG,CAAU;AAAA,EACrB;AAEA,SACE,gBAAA9uE,EAACyP,IAAA,EAAS,KAAI,eACZ,UAAA,gBAAA1O,EAACE,GAAA,EAAO,MAAK,MAAK,SAAQ,WAAU,SAAS,MAAM2tE,KAChD,UAAA;AAAA,IAAAlgE,EAAO;AAAA,IAAe;AAAA,EAAA,EAAA,CACzB,EAAA,CACF;AAEJ;AAEAggE,GAAa,YAAY;AAAA,EACvB,OAAOxuE,EAAU;AAAA,EACjB,SAASA,EAAU;AAAA,EACnB,UAAUA,EAAU;AACtB;AACAwuE,GAAa,eAAe;AAAA,EAC1B,OAAO,CAAA;AAAA,EACP,SAAS,CAAA;AAAA,EACT,UAAU,MAAM;AAAA,EAAC;AACnB;AC3DA,MAAMO,KAAW,CAAC;AAAA,EAChB,SAAAjrE;AAAA,EACA,aAAAiE;AAAA,EACA,OAAA/B;AAAA,EACA,UAAAyoE;AAAA,EACA,YAAAlR;AAAA,EACA,aAAAyR;AAAA,EACA,UAAAxrE;AACF,MAAM;AACJ,QAAM,EAAE,cAAAqkC,GAAc,gBAAAonC,GAAgB,mBAAAhlC,EAAA,IAAsBjC,GAAA,GACtD,CAAC/qB,GAAYiyD,CAAa,IAAIt/D,EAAS,EAAK,GAE5Cu/D,IAAqB,MAAM;AAC/B,UAAMC,IAAiB,CAACnyD;AACxB,IAAAiyD,EAAcE,CAAc,GAC5BJ,EAAYI,CAAc;AAAA,EAC5B;AAEA,MACE,CAAC;AAAA,IACC3qE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,EACxB,SAASsD,CAAW;AAEtB,WAAO;AAET,QAAM6jB,IAAUxrB,GAASoD,GAAU,EAAI;AAEvC,SAAIuE,MAAgBtD,EAAU,cAAc,UACnCmnB,IACL,gBAAA9rB,EAAC6sE,IAAA,EAAc,WAAU,aACvB,UAAA,gBAAA7sE,EAAC0uE,IAAA,EAAa,OAAAxoE,GAAc,SAAAlC,GAAkB,UAAA2qE,EAAA,CAAoB,EAAA,CACpE,IACE,OAIJ,gBAAA5tE,EAAC8rE,IAAA,EAAc,WAAU,oBACtB,UAAA;AAAA,IAAA1iC,KACC,gBAAAppC;AAAA,MAACE;AAAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,SAASkuE;AAAA,QACT,OAAOpnC,IAAe,sBAAsB;AAAA,QAE3C,UAAA;AAAA,UAAAr5B,EAAO;AAAA,UAAY;AAAA,UACnBq5B,IAAe,kBAAkB;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGtC,gBAAAhnC;AAAA,MAACE;AAAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,SAASouE;AAAA,QACT,OAAOlyD,IAAa,wBAAwB;AAAA,QAC5C,OAAO,EAAE,UAAU,OAAA;AAAA,QAElB,UAAA;AAAA,UAAAA,IAAazO,EAAO,aAAaA,EAAO;AAAA,UAAc;AAAA,UACtDyO,IAAa,aAAa;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAE5B2O,KACC,gBAAA9rB;AAAA,MAACgtE;AAAA,MAAA;AAAA,QACC,SAAAhpE;AAAA,QACA,aAAAiE;AAAA,QACA,QAAQ0mE;AAAA,MAAA;AAAA,IAAA;AAAA,IAGXhqE,EAAU,cAAc,WAAWmnB,KAClC,gBAAA9rB;AAAA,MAAC4tE;AAAA,MAAA;AAAA,QACC,SAAA5pE;AAAA,QACA,aAAAiE;AAAA,QACA,QAAQ0mE;AAAA,MAAA;AAAA,IAAA;AAAA,IAGX7iD,KAAW,gBAAA9rB,EAACguE,IAAA,EAAc,SAAAhqE,EAAA,CAAkB;AAAA,IAC7C,gBAAAhE,EAACmuE,MAAiB,SAAAnqE,GAAkB;AAAA,IACpC,gBAAAhE;AAAA,MAACuvE;AAAAA,MAAA;AAAA,QACC,SAAAvrE;AAAA,QACA,YAAAy5D;AAAA,QACA,aAAAx1D;AAAA,MAAA;AAAA,IAAA;AAAA,IAED6jB,KACC,gBAAA9rB,EAAC0uE,IAAA,EAAa,OAAAxoE,GAAc,SAAAlC,GAAkB,UAAA2qE,EAAA,CAAoB;AAAA,EAAA,GAGtE;AAEJ;AAEAM,GAAS,YAAY;AAAA,EACnB,SAAS/uE,EAAU,OAAO;AAAA,EAC1B,aAAaA,EAAU,MAAM;AAAA,IAC3ByE,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,IACxBA,EAAU,cAAc;AAAA,EAAA,CACzB,EAAE;AAAA,EACH,OAAOzE,EAAU,OAAO;AAAA,EACxB,UAAUA,EAAU;AAAA,EACpB,YAAYA,EAAU;AAAA,EACtB,aAAaA,EAAU;AAAA,EACvB,UAAUA,EAAU;AACtB;AAEA+uE,GAAS,eAAe;AAAA,EACtB,UAAU,MAAM;AAAA,EAAC;AAAA,EACjB,YAAY,MAAM;AAAA,EAAC;AAAA,EACnB,aAAa,MAAM;AAAA,EAAC;AAAA,EACpB,UAAU;AACZ;ACrHA,MAAMO,KAAkB,CAAC1qE,MAAU;AACjC,QAAM,EAAE,MAAAqD,GAAM,MAAAH,GAAM,QAAAqhB,EAAA,IAAWvkB;AAC/B,MAAI,CAACqD,EAAM,QAAO;AAClB,QAAM;AAAA,IACJ,oBAAoB8wD;AAAA,IACpB,YAAAzvC;AAAA,IACA,YAAAimD;AAAA,IACA,UAAAvW;AAAA,EAAA,IACElxD;AACJ,MAAI,OAAO,KAAKixD,KAAqB,CAAA,CAAE,EAAE,SAAS,EAAG,QAAO;AAE5D,QAAMgV,IACH,OAAO,KAAKhV,EAAkB,QAAQ,CAAA,CAAE,EAAE,SAAS,KAClDA,EAAkB,MAAM,UAAU,SAAS,KAC7C,IACIiV,IACH,OAAO,KAAKjV,EAAkB,cAAc,CAAA,CAAE,EAAE,SAAS,KACxDA,EAAkB,YAAY,OAAO,SAAS,KAChD;AAEF,SAAI,CAACgV,KAAW,CAACC,IAEb,gBAAAntE,EAACuI,KAAM,UAAQ,IAAC,MAAAnB,GAAY,MAAK,MAAK,QAAQkhB,GAC5C,UAAA;AAAA,IAAA,gBAAArpB,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,UAAA,gBAAAtJ,EAACsJ,EAAM,OAAN,EAAa,UAAA,GAAGmmE,CAAU,YAAA,CAAY,GACzC;AAAA,IACA,gBAAAzvE,EAACsJ,EAAM,MAAN,EAAW,UAAA,sBAAA,CAAmB;AAAA,EAAA,GACjC,IAKF,gBAAAtJ,EAAC0vE,IAAA,EAAU,QAAO,iBAAgB,QAAO,QACvC,UAAA,gBAAA1vE,EAAC,OAAA,EAAI,WAAU,uBACb,UAAA,gBAAAe,EAAC6lC,IAAA,EAAK,SAAQ,QACZ,UAAA;AAAA,IAAA,gBAAA7lC,EAAC6lC,GAAK,QAAL,EAAY,WAAU,gBACpB,UAAA;AAAA,MAAA,GAAG6oC,CAAU;AAAA,MACd,gBAAAzvE;AAAA,QAACiB;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,WAAU;AAAA,UACV,SAASooB;AAAA,UAER,UAAA3a,EAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IACV,GACF;AAAA,IACA,gBAAA1O,EAAC4mC,GAAK,MAAL,EACC,UAAA,gBAAA5mC,EAAC,OAAA,EAAI,WAAU,WACb,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,eACb,UAAA,gBAAAA;AAAA,MAAC+tE;AAAA,MAAA;AAAA,QACC,YAAAvkD;AAAA,QACA,mBAAAyvC;AAAA,QACA,UAAAC;AAAA,MAAA;AAAA,IAAA,EACF,CACF,GACF,EAAA,CACF;AAAA,EAAA,EAAA,CACF,GACF,GACF;AAEJ;AAEAsW,GAAgB,YAAY;AAAA,EAC1B,MAAMtvE,EAAU,KAAK;AAAA,EACrB,MAAMA,EAAU,MAAM;AAAA,IACpB,oBAAoBA,EAAU;AAAA,IAC9B,YAAYA,EAAU;AAAA,IACtB,YAAYA,EAAU;AAAA,IACtB,UAAUA,EAAU;AAAA,EAAA,CACrB,EAAE;AAAA,EACH,QAAQA,EAAU,KAAK;AACzB;AC3EA,MAAMyvE,KAAW,CAAA7qE,MAAS;AACxB,QAAM,EAAE,SAAAzE,GAAS,YAAAuvE,EAAA,IAAe9qE;AAChC,SAAI,OAAO,KAAKzE,CAAO,EAAE,SAAS,IAAU,OACrC,gBAAAL,EAACs5D,IAAA,EAAQ,SAAAj5D,GAAkB,QAAQuvE,EAAA,CAAY;AACxD;AAEAD,GAAS,YAAY;AAAA,EACnB,SAASzvE,EAAU,OAAO;AAAA,EAC1B,YAAYA,EAAU,KAAK;AAC7B;ACRO,SAAS2vE,GAAcC,GAAS;AACrC,SAAO,MAAMC,WAAmBD,EAAQ;AAAA,IACtC,OAAO,WAAW5pE,GAAO8pE,GAAa;AACpC,YAAM5oE,IAAWlB,KAASA,EAAM,WAAWhB,EAAUgB,EAAM,QAAQ,IAAI,CAAA,GACjEgoC,IACJhoC,KAASA,EAAM,qBACXhB,EAAUgB,EAAM,kBAAkB,IAClC,CAAA;AACN,aAAO,IAAI6pE,GAAW;AAAA,QACpB,kBAAkB,KAAK,oBAAqB7pE,KAASA,EAAM;AAAA,QAC3D,cAAcvB,EAAU,YAAY;AAAA,QACpC,YAAYqrE;AAAA,QACZ,UAAA5oE;AAAA,QACA,YAAY8mC;AAAA,QACZ,oBAAoBA;AAAA,QACpB,WAAWhoC,GAAO;AAAA,QAClB,aAAaA,GAAO;AAAA,QACpB,SAAS;AAAA,MAAA,CACV;AAAA,IACH;AAAA,IAEA,YAAY;AACV,aAAO,MAAM,UAAU;AAAA,QACrB,kBAAkB,KAAK;AAAA,QACvB,cAAcvB,EAAU,YAAY;AAAA,QACpC,YAAY,KAAK;AAAA,QACjB,UAAU,KAAK;AAAA,QACf,YAAY,KAAK;AAAA,QACjB,oBAAoB,KAAK;AAAA,MAAA,CAC1B;AAAA,IACH;AAAA,IAEA,IAAI,iBAAiB;AACnB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,eAAesrE,GAAgB;AACjC,WAAK,mBAAmBA;AAAA,IAC1B;AAAA,IAEA,IAAI,WAAW;AACb,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,SAASC,GAAU;AACrB,WAAK,YAAYA;AAAA,IACnB;AAAA,IAEA,IAAI,aAAa;AACf,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,WAAWC,GAAY;AACzB,WAAK,cAAcA;AAAA,IACrB;AAAA,EAAA;AAEJ;AC/CO,SAASC,GAAcN,GAAS9zB,GAAWq0B,GAAS;AACzD,SAAO,MAAMC,WAAmBR,EAAQ;AAAA,IACtC,OAAO,WAAWS,GAAcrqE,GAAOupC,GAAa;AAClD,YAAMroC,IAAWlB,KAASA,EAAM,WAAWhB,EAAUgB,EAAM,QAAQ,IAAI,CAAA,GACjEgoC,IACJhoC,KAASA,EAAM,qBACXhB,EAAUgB,EAAM,kBAAkB,IAClC,CAAA;AACN,aAAO,IAAIoqE,GAAW;AAAA,QACpB,eAAeC;AAAA,QACf,MAAMrqE,EAAM;AAAA,QACZ,kBAAkB,KAAK,oBAAqBA,KAASA,EAAM;AAAA,QAC3D,aAAaoqE,GAAW,mBAAmBpqE,GAAOupC,CAAW;AAAA,QAC7D,MAAM,OAAOvpC,EAAM,KAAK;AAAA,QACxB,WAAW81C,EAAU,KAAA;AAAA,QACrB,UAAA50C;AAAA,QACA,YAAY6mC,GAAYC,CAAQ;AAAA,QAChC,oBAAoBA;AAAA,QACpB,eAAehoC;AAAA,QACf,UAAU;AAAA,QACV,aAAa,CAAA;AAAA,QACb,OAAO,CAAA;AAAA,QACP,UAAU,CAAA;AAAA,QACV,UAAUgoC;AAAA,MAAA,CACX;AAAA,IACH;AAAA,IAEA,YAAY;AACV,aAAO,MAAM,UAAU;AAAA,QACrB,MAAM,KAAK;AAAA,QACX,UAAU;AAAA,QACV,WAAWvpC,EAAU,YAAY;AAAA,QACjC,eAAe,KAAK;AAAA,QACpB,kBAAkB,KAAK;AAAA;AAAA,QACvB,UAAU,KAAK;AAAA,QACf,YAAY,KAAK;AAAA,QACjB,oBAAoB,KAAK;AAAA,QACzB,WAAW,KAAK;AAAA,QAChB,aAAa,KAAK;AAAA,QAClB,OAAO,KAAK;AAAA,QACZ,aAAa,KAAK,eAAe,CAAA;AAAA,QACjC,UAAU,KAAK,SAAS,IAAI,CAACsyB,MAAMA,EAAE,WAAW;AAAA,MAAA,CACjD;AAAA,IACH;AAAA,IAEA,qBAAqB;AACnB,YAAMu5C,IAAO;AACb,UAAI,KAAK,UAAU,SAAS,WAAW,GAAG;AACxC,cAAMC,IAAWz0B,EAAU,WAAA;AAC3B,QAAAy0B,EAAS,iBAAiBD,GAC1B,KAAK,UAAU,SAAS,KAAKC,CAAQ;AAAA,MACvC;AACA,aAAO,KAAK,UAAU,SAAS;AAAA,QAC7B,CAAC/wC,MAAO,CAACA,EAAG,eAAe,QAAQ8wC,CAAI;AAAA,MAAA;AAAA,IAE3C;AAAA,IAEA,qBAAqB;AACnB,YAAMA,IAAO;AACb,UAAIr4C,IAAS,CAAA;AACb,kBAAK,mBAAA,EAAqB,QAAQ,CAACu4C,MAAQ;AACzC,cAAMC,IAAOD,EAAI,SAAS;AAAA,UACxB,CAAChxC,MAAO,CAACA,EAAG,eAAe,QAAQ8wC,CAAI;AAAA,QAAA;AAEzC,QAAAr4C,IAAS,CAAC,GAAGA,GAAQ,GAAGw4C,CAAI;AAAA,MAC9B,CAAC,GACMx4C;AAAA,IACT;AAAA,IAEA,oBAAoB;AAClB,YAAMq4C,IAAO;AACb,UAAIr4C,IAAS,CAAA;AACb,kBAAK,mBAAA,EAAqB,QAAQ,CAACy4C,MAAQ;AACzC,cAAMC,IAAMD,EAAI,SAAS;AAAA,UACvB,CAAClxC,MAAO,CAACA,EAAG,eAAe,QAAQ8wC,CAAI;AAAA,QAAA;AAEzC,QAAAr4C,IAAS,CAAC,GAAGA,GAAQ,GAAG04C,CAAG;AAAA,MAC7B,CAAC,GACM14C;AAAA,IACT;AAAA,IAEA,OAAO,mBAAmBjyB,GAAOupC,GAAa;AAC5C,aAAKA,IAGE,GAAGA,EAAY,QAAQ,IAAIvpC,EAAM,YAAY,GAClD,SAASupC,EAAY,SAASvpC,EAAM,IAAI,KAAK,GAAG,EAAE,IAAI,CACxD,KAJS,OAAOA,EAAM,KAAK;AAAA,IAK7B;AAAA,IAEA,UAAUupC,GAAa18B,IAAS,IAAI;AAClC,YAAMsiB,IAAO,MAAM,UAAA,GACby7C,IAAQ,OAAO,OAAOz7C,GAAMtiB,CAAM;AACxC,aAAA+9D,EAAM,cAAcR,GAAW;AAAA,QAC7BQ,EAAM;AAAA,QACNrhC;AAAA,MAAA,GAEFqhC,EAAM,YAAY90B,EAAU,KAAA,GAC5B80B,EAAM,aAAa,IACnBA,EAAM,WAAW,IACVA;AAAA,IACT;AAAA,IAEA,OAAO,qBAAqBzwE,GAASkwE,GAAc9gC,GAAa;AAC9D,YAAMtX,IAASjzB,EAAU7E,EAAQ,UAAU,GACrC0S,IAAS;AAAA,QACb,eAAew9D;AAAA,QACf,YAAYQ,GAAgB54C,CAAM;AAAA,MAAA,GAE9B9C,IAAOh1B,EAAQ,UAAUovC,GAAa18B,CAAM;AAClD,aAAAsiB,EAAK,SAAS,EAAE,IAAIh1B,EAAQ,IAAI,aAAaA,EAAQ,YAAA,GAC9Cg1B;AAAA,IACT;AAAA,IAEA,IAAI,YAAY;AACd,aAAO1wB,EAAU,YAAY;AAAA,IAC/B;AAAA,IAEA,IAAI,OAAO;AACT,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,KAAKQ,GAAM;AACb,WAAK,QAAQA;AAAA,IACf;AAAA,IAEA,IAAI,QAAQ;AACV,aAAQ,KAAK,iBAAiB,KAAK,cAAc,SAAU;AAAA,IAC7D;AAAA,IAEA,IAAI,OAAO;AACT,aAAQ,KAAK,iBAAiB,KAAK,cAAc,QAAS;AAAA,IAC5D;AAAA,IAEA,IAAI,gBAAgB;AAClB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,cAAce,GAAO;AACvB,WAAK,iBAAiBA;AAAA,IACxB;AAAA,IAEA,IAAI,YAAY;AACd,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,UAAU8qE,GAAW;AACvB,WAAK,cAAcA;AAAA,IACrB;AAAA,IAEA,IAAI,WAAW;AACb,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,SAAS5pE,GAAU;AACrB,WAAK,YAAYA,KAAY,CAAA;AAAA,IAC/B;AAAA,IAEA,IAAI,aAAa;AACf,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,WAAWoiB,GAAY;AACzB,WAAK,cAAcA;AAAA,IACrB;AAAA,IAEA,IAAI,mBAAmB;AACrB,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,iBAAiBynD,GAAgB;AACnC,WAAK,oBAAoBA;AAAA,IAC3B;AAAA,IAEA,IAAI,SAAS9iD,GAAU;AACrB,WAAK,YAAaA,KAAYA,EAAS,IAAI,CAAC8I,MAAM,IAAIo5C,EAAQp5C,CAAC,CAAC,KAAM,CAAA;AAAA,IACxE;AAAA,IAEA,IAAI,WAAW;AACb,aAAO,KAAK,aAAa,CAAA;AAAA,IAC3B;AAAA,IAEA,IAAI,WAAWi6C,GAAW;AACxB,WAAK,cAAcA;AAAA,IACrB;AAAA,IAEA,IAAI,aAAa;AACf,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,OAAO;AACT,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,IAAI,KAAK54D,GAAM;AACb,WAAK,QAAQA;AAAA,IACf;AAAA,IAEA,QAAQ;AACN,aAAO,GAAG,KAAK,WAAW,QAAQ,KAAK,IAAI;AAAA,IAC7C;AAAA,IAEA,aAAa;AACX,aAAO,KAAK;AAAA,IACd;AAAA,IAEA,cAAc64D,GAAY;AACxB,WAAK,cAAcA;AAAA,IACrB;AAAA,IAEA,IAAI,kBAAkB;AACpB,aAAO,CAACC,GAAQ,IAAI,MAAM,KAAK,SAAS,KAAK;AAAA,IAC/C;AAAA,IAEA,cAAc;AAEZ,UAAI,CADc,CAAC,EAAE,KAAK,QAAQ,KAAK,KAAK,WAAW,IACvC,QAAO;AAEvB,YAAMjqE,IAAS,KAAK,YAAY,UAAU,CAAA,GACpCC,IAAW,KAAK,YAAY,CAAA,GAC5BuR,IAASvR,EAAS,UAAU,CAAA,GAC5B4S,IAAe5S,EAAS,YAAY,CAAA,GAGpC0T,IAAeD,GAAyB1T,GAAQwR,CAAM;AAG5D,iBAAWQ,KAAQ2B;AACjB,YAAI3B,EAAK,SAAS,SAAS;AACzB,gBAAMouB,IAAmBvtB,EAAab,EAAK,EAAE;AAC7C,cAAIouB,KAAoBA,EAAiB,MAAM,SAAS,GAAG;AACzD,kBAAM,CAACnD,CAAS,IAAIZ,GAAyB+D,GAAkBpgC,CAAM;AACrE,gBAAI,CAACi9B,EAAW;AAAA,UAClB;AAEA,qBAAW6F,KAAa9wB,EAAK,QAAQ;AACnC,kBAAMtS,IAAQojC,EAAU;AACxB,gBAAIpjC,EAAM,aAAa,SAAS,GAAG;AACjC,oBAAM,CAACu9B,CAAS,IAAIZ,GAAyB38B,GAAOM,CAAM;AAC1D,kBAAI,CAACi9B,EAAW;AAAA,YAClB;AAEA,gBACE,CAAC,KAAK;AAAA,cACJv9B,EAAM;AAAA,cACNA;AAAA,cACA,CAACtC,GAAGD,MAAM;AACR,sBAAM,CAAC+sE,CAAO,IAAIpuC,GAA0B1+B,GAAGD,GAAG6C,CAAM;AACxD,uBAAOkqE;AAAA,cACT;AAAA,YAAA;AAGF,qBAAO;AAAA,UAEX;AAAA,QACF,OAAO;AACL,gBAAMxqE,IAAQsS,EAAK;AACnB,cAAItS,EAAM,aAAa,SAAS,GAAG;AACjC,kBAAM,CAACu9B,CAAS,IAAIZ,GAAyB38B,GAAOM,CAAM;AAC1D,gBAAI,CAACi9B,EAAW;AAAA,UAClB;AAEA,cACE,CAAC,KAAK;AAAA,YACJv9B,EAAM;AAAA,YACNA;AAAA,YACA,CAACtC,GAAGD,MAAM;AACR,oBAAM,CAAC+sE,CAAO,IAAIpuC,GAA0B1+B,GAAGD,GAAG6C,CAAM;AACxD,qBAAOkqE;AAAA,YACT;AAAA,UAAA;AAGF,mBAAO;AAAA,QAEX;AAGF,aAAO;AAAA,IACT;AAAA,IAEA,eAAenzD,GAAQrX,GAAOyqE,GAAiB;AAC7C,iBAAW/sE,KAAK2Z,KAAU;AACxB,aACG3Z,EAAE,aAAa,MAAQA,EAAE,aAAa,WACvC,CAACkV,EAAW,QAAQA,EAAW,SAAS,EAAE,SAASlV,EAAE,IAAI,KAGrD+sE,EAAgB/sE,GAAGsC,CAAK,GAAG;AAC7B,gBAAMxF,IAAQkD,EAAE;AAKhB,cAHElD,KAAU,QAEVA,EAAM,SAAA,EAAW,KAAA,MAAW,GACd,QAAO;AAAA,QACzB;AAGJ,aAAO;AAAA,IACT;AAAA,EAAA;AAEJ;ACnTO,SAASkwE,GAAczB,GAAS;AACrC,SAAO,MAAM0B,WAAmB1B,EAAQ;AAAA;AAAA;AAAA;AAAA,IAItC,OAAO,WAAW5pE,GAAO;AACvB,YAAMkB,IAAWlB,KAASA,EAAM,WAAWhB,EAAUgB,EAAM,QAAQ,IAAI,CAAA,GACjEgoC,IACJhoC,KAASA,EAAM,qBACXhB,EAAUgB,EAAM,kBAAkB,IAClC,CAAA;AACN,aAAO,IAAIsrE,GAAW;AAAA,QACpB,kBAAkB,KAAK,oBAAqBtrE,KAASA,EAAM;AAAA,QAC3D,UAAAkB;AAAA,QACA,YAAY6mC,GAAYC,CAAQ;AAAA,QAChC,gBAAgBA,EAAS,kBAAkB,CAAA;AAAA,QAC3C,eAAehoC;AAAA,QACf,oBAAoBgoC;AAAA,QACpB,OAAO,CAAA;AAAA,QACP,UAAUA;AAAA,MAAA,CACX;AAAA,IACH;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO,UAAU/f,GAAU;AACzB,YAAMsjD,IAAiBvsE,EAAUipB,CAAQ;AACzC,aAAAsjD,EAAe,IAAI,CAACC,OAElBA,EAAY,aAAaX,GAAgBW,EAAY,UAAU,GACxDA,EACR,GACMD;AAAA,IACT;AAAA,IAEA,YAAY;AACV,aAAO,MAAM,UAAU;AAAA,QACrB,WAAW9sE,EAAU,YAAY;AAAA,QACjC,eAAe,KAAK;AAAA,QACpB,kBAAkB,KAAK;AAAA,QACvB,UAAU,KAAK;AAAA,QACf,YAAY,KAAK;AAAA,QACjB,oBAAoB,KAAK;AAAA,QACzB,OAAO,KAAK;AAAA,MAAA,CACb;AAAA,IACH;AAAA,EAAA;AAEJ;ACpDA,SAASgtE,GAAuB7sE,GAAO;AACrC,QAAMutB,IAAYvtB,EAAM;AACxB,SAAKA,EAAM,OAET,gBAAA/D;AAAA,IAACuI;AAAA,IAAA;AAAA,MACC,UAAQ;AAAA,MACR,iBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,MAAMxE,EAAM;AAAA,MACZ,QAAQA,EAAM;AAAA,MAEd,UAAA;AAAA,QAAA,gBAAA9E,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,UAAA,gBAAAtJ,EAACsJ,EAAM,OAAN,EACE,UAAAxE,EAAM,MAAA,CACT,EAAA,CACF;AAAA,QACA,gBAAA9E,EAACsJ,EAAM,MAAN,EACE,UAAA+oB,EAAA,CACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,sBAhBsB,QAAA,CAAA,CAAK;AAmBjC;AAEAs/C,GAAuB,YAAY;AAAA,EACjC,MAAMzxE,EAAU;AAAA,EAChB,WAAWA,EAAU,UAAU;AAAA,IAC7BA,EAAU;AAAA,IACVA,EAAU;AAAA,EAAA,CACX;AAAA,EACD,OAAOA,EAAU,UAAU;AAAA,IACzBA,EAAU;AAAA,IACVA,EAAU;AAAA,EAAA,CACX;AAAA,EACD,QAAQA,EAAU;AACpB;AAEAyxE,GAAuB,eAAe;AAAA,EACpC,MAAM;AAAA,EACN,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ,MAAM;AAAA,EAAC;AACjB;ACvCA,MAAMC,KAAkB,CAAC9sE,MAAU;AACjC,QAAM,EAAE,SAAA+sE,GAAS,UAAAp9C,EAAA,IAAa3vB;AAC9B,MAAI,CAAC+sE,EAAS,QAAO;AACrB,QAAMpsE,IACJ,gBAAAzF,EAAC0jB,IAAA,EACC,UAAA,gBAAA3iB,EAAC4iB,MAAI,IAAI,IAAI,OAAO,EAAE,YAAY,QAAQ,WAAW,UAAU,UAAU,WACtE,UAAA;AAAA,IAAAkuD,EAAQ;AAAA,IAAM;AAAA,IAAGA,EAAQ;AAAA,IAAK;AAAA,EAAA,EAAA,CACjC,KAHO,eAIT;AAGF,EAAAA,EAAQ,aAAaA,EAAQ;AAC7B,QAAM39B,IACJ,gBAAAl0C;AAAA,IAAC0xC;AAAA,IAAA;AAAA,MACC,SAASmgC;AAAA,MACT,UAAUp9C;AAAA,MACV,WAAW,CAAA;AAAA,MACX,OAAOo9C,EAAQ,MAAM;AAAA,MACrB,WAAW;AAAA,MACX,YAAU;AAAA,MACV,UAAQ;AAAA,MACR,QAAQ,MAAM;AAAA,MAAC;AAAA,IAAA;AAAA,EAAA;AAGnB,2BACG,OAAA,EAAI,OAAO,EAAE,QAAQ,UAAW,UAAA;AAAA,IAAApsE;AAAA,IAAOyuC;AAAA,EAAA,GAAa;AAEzD;AAEA09B,GAAgB,YAAY,EAAE,SAAS1xE,EAAU,QAAQ,UAAUA,EAAU,KAAA;AAC7E0xE,GAAgB,eAAe,EAAE,SAAS,CAAA,GAAI,UAAU,MAAM;AAAC,EAAA;;;;ACjC/D,SAASE,GAAgBC,GAAKC,GAAM;AAClC,QAAM5qE,IAAW,CAAA,GACX6qE,IAAKF,GAAK,OAAO,CAAA7oE,MAAK8oE,MAAS9oE,EAAE,EAAE;AAEzC,MAAI+oE,GAAI,WAAW,KAAK,CAACA,EAAG,CAAC,EAAE;AAC7B,WAAO7qE;AAGT,QAAM,EAAE,YAAAoiB,GAAY,WAAW0mD,MAAa+B,EAAG,CAAC,EAAE,SAC5CC,IAAUxiD,KAAKwgD,CAAQ;AAE7B,SAAKgC,KAILA,EAAQ,QAAQ,CAAAC,MAAO;AACrB,UAAMC,IAAM5oD,EAAW,OAAO2oD,EAAI,KAAK,GAAG,OAAO;AAAA,MAC/C,CAAA/rE,MAASA,EAAM,UAAU+rE,EAAI;AAAA,IAAA;AAE/B,QAAIC;AACF,cAAQA,EAAI,MAAA;AAAA,QACV,KAAK34D,EAAW,kBAAkB;AAChC,gBAAM8E,IACJwN,GAAQqmD,EAAI,eAAeA,EAAI,YAAY,GAAG,SAAS;AACzD,UAAAhrE,EAAS+qE,EAAI,GAAG,IAAI,GAAGC,EAAI,KAAK,IAAI7zD,CAAK;AACzC;AAAA,QACF;AAAA,QACA,KAAK9E,EAAW;AAAA,QAChB,KAAKA,EAAW;AAAA,QAChB,KAAKA,EAAW;AACd,UAAArS,EAAS+qE,EAAI,GAAG,IAAIC,EAAI;AACxB;AAAA,QACF;AACE,UAAAhrE,EAAS+qE,EAAI,GAAG,IAAI;AAAA,MAAA;AAAA,EAG5B,CAAC,GACM/qE;AACT;ACxBA,MAAqBirE,WAAgBhgD,GAAU;AAAA,EAC7C,YAAYvtB,GAAO;AACjB,UAAMA,CAAK,GACX,KAAK,QAAQ,EAAE,WAAW,CAAA,GAAI,aAAa,WAAW,YAAY,GAAA,GAClE,KAAK,UAAU,KAAK,QAAQ,KAAK,IAAI,GACrC,KAAK,cAAc,KAAK,YAAY,KAAK,IAAI,GAC7C,KAAK,cAAc,KAAK,YAAY,KAAK,IAAI,GAC7C,KAAK,mBAAmB,KAAK,iBAAiB,KAAK,IAAI,GACvD,KAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI,GACjD,KAAK,aAAa,KAAK,WAAW,KAAK,IAAI,GAC3C,KAAK,YAAY,KAAK,UAAU,KAAK,IAAI;AAAA,EAC3C;AAAA,EAEA,oBAAoB;AAClB,UAAM,EAAE,WAAAsjE,MAAc,KAAK;AAC3B,IAAIA,KACF,KAAK,YAAYljE,EAAUkjE,CAAS,CAAC;AAAA,EAEzC;AAAA,EAEA,mBAAmB3pB,GAAW;AAC5B,UAAM,EAAE,WAAA2pB,MAAc,KAAK;AAC3B,IAAIA,MAAc3pB,EAAU,aAC1B,KAAK,YAAYv5C,EAAUkjE,CAAS,CAAC;AAAA,EAEzC;AAAA,EAEA,cAAc1oC,GAAI;AAChB,UAAM,EAAE,aAAAs+B,GAAa,WAAAoK,EAAA,IAAc,KAAK,OAClC,EAAE,KAAAr2C,MAAQ,KAAK;AACrB,QAAIiO,KAAYooC,KAAa,CAAA,GAAI;AAAA,MAC/B,CAACH,MAAMtlE,GAAY,CAACslE,EAAE,MAAMA,EAAE,EAAE,CAAC,MAAMjK;AAAA,IAAA;AAEzC,IAAIh+B,KAAYA,EAASjO,CAAG,MAC1BiO,IAAWN,GACX,KAAK,YAAY0oC,CAAS;AAAA,EAE9B;AAAA,EAEA,YAAYA,GAAW;AACrB,SAAK,SAAS,EAAE,WAAAA,GAAW;AAAA,EAC7B;AAAA,EAEA,UAAUQ,GAAY;AACpB,SAAK,SAAS,EAAE,YAAAA,GAAY;AAAA,EAC9B;AAAA,EAEA,QAAQ71D,GAAQ;AACd,UAAM,EAAE,WAAAq1D,MAAc,KAAK;AAC3B,SAAK,SAAS;AAAA,MACZ,WAAWljE,EAAUkjE,CAAS;AAAA,MAC9B,aAAazlE,GAAY,CAACoQ,EAAO,MAAMA,EAAO,EAAE,CAAC;AAAA,IAAA,CAClD;AAAA,EACH;AAAA,EAEA,YAAYA,GAAQ;AAClB,UAAM,EAAE,UAAAjC,MAAa,KAAK;AAC1B,IAAAA,EAASiC,CAAM;AAAA,EACjB;AAAA,EAEA,iBAAiBA,GAAQ;AACvB,UAAM,EAAE,YAAA0qD,GAAY,WAAA2K,GAAW,KAAAr2C,GAAK,MAAA/pB,EAAA,IAAS,KAAK,OAE5C2jC,IAAOzmC,EAAUkjE,EAAU,KAAK,CAACH,MAAMA,EAAE,OAAOl1D,EAAO,EAAE,CAAC;AAEhE,IAAIgf,MAAQ,wBACV/pB,EAAK,sBAAsB2jC,EAAK5Z,CAAG,GACnC0rC,EAAW/R,GAAYhmD,MAAiBsC,GAAM,EAAE,QAAQ,IAAA,CAAK,CAAC,KAE9Dy1D,EAAW9xB,EAAK5Z,CAAG,GAAG,MAAM;AAAA,IAAC,CAAC;AAAA,EAElC;AAAA,EAEA,WAAWhf,GAAQ;AACjB,UAAM,EAAE,MAAA/K,GAAM,WAAAogE,EAAA,IAAc,KAAK,OAC3Be,IAAWf,EAAU,KAAK,CAACH,MAAMA,EAAE,OAAOl1D,EAAO,EAAE,GAEnDq2D,IAAalkE,EAAUikE,EAAS,kBAAkB;AACxD,IAAAC,EAAW,QAAQD,EAAS,mBAAmB,OAC/CC,EAAW,cAAcD,EAAS,eAAe,IACjDC,EAAW,WAAWD,EAAS,YAAY,CAAA;AAE3C,UAAME,IAAO,gCAAgC;AAAA,MAC3C,KAAK,UAAUD,CAAU;AAAA,IAAA,CAC1B;AACD,IAAAhwC,GAAa;AAAA,MACX,UAAUiwC;AAAA,MACV,MAAM,GAAGD,EAAW,KAAK,IAAIphE,EAAK,KAAK,IAAImhE,EAAS,IAAI;AAAA,IAAA,CACzD;AAAA,EACH;AAAA,EAEA,SAAS;AACP,UAAM,EAAE,aAAAnL,GAAa,WAAAoK,GAAW,YAAAQ,EAAA,IAAe,KAAK;AACpD,QAAIR,EAAU,SAAS,EAAG,QAAO;AACjC,UAAM,EAAE,MAAApgE,GAAM,KAAA+pB,GAAK,OAAA+rC,EAAA,IAAU,KAAK,OAE5BnvC,IAAU,CAAA,GACVqR,KACHooC,KAAa,CAAA,GAAI;AAAA,MAChB,CAACH,MAAMtlE,GAAY,CAACslE,EAAE,MAAMA,EAAE,EAAE,CAAC,MAAMjK;AAAA,IAAA,KACpC,CAAA,GACDp2D,IACHo4B,KAAYA,EAASjO,CAAG,KAAKiO,EAASjO,CAAG,EAAE,kBAAmB,CAAA;AAEjE,IAAIiO,EAAS,QACXrR,EAAQ,KAAK;AAAA,MACX,SAASqR;AAAA,MACT,MAAMvmB,EAAW;AAAA,MACjB,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,OAAO;AAAA,IAAA,CACR,GAGHumB,EAASjO,CAAG,IAAIiO,EAASjO,CAAG,KAAK,CAAA,GACjCiO,EAASjO,CAAG,EAAE,SAASiO,EAASjO,CAAG,EAAE,UAAU,CAAA,GAC3CA,MAAQ,eACViO,EAAS,qBAAqB,EAAE,gBAAgBp4B,EAAA,IAEhDo4B,EAAS,aAAaA,EAAS;AAGjC,UAAMkU,IACJ,gBAAAl0C;AAAA,MAAC0xC;AAAA,MAAA;AAAA,QACC,SAAS1R,KAAY,CAAA;AAAA,QACrB,UAAU,KAAK;AAAA,QACf,WAAWrR;AAAA,QACX,OAAOqR,EAAS,QAAQ;AAAA,QACxB,WAAS;AAAA,QACT,YAAY;AAAA,MAAA;AAAA,IAAA,GAIVsyC,IAAM1J,IAAa,OACvB,gBAAA7nE,EAAC4iB,IAAA,EAAI,IAAI,GACP,UAAA;AAAA,MAAA,gBAAA3jB,EAAC,OAAE,UAAA,qCAAA,CAAkC;AAAA,MACpCooE,EAAU,IAAI,CAAC5K,GAAKjkD,MACnB,gBAAAvZ;AAAA,QAACs9D;AAAA,QAAA;AAAA,UAEC,MAAAt1D;AAAA,UACA,UAAU,EAAE,OAAA81D,GAAO,YAAY,KAAK,WAAA;AAAA,UACpC,WAAW,GAAGvkD,CAAG,IAAIykD,CAAW;AAAA,UAChC,KAAAR;AAAA,UACA,KAAAzrC;AAAA,UACA,UAAU,KAAK;AAAA,UACf,YAAY,KAAK;AAAA,UACjB,QAAQ,KAAK;AAAA,QAAA;AAAA,QARRpvB,GAAY,CAAC66D,EAAI,MAAMA,EAAI,EAAE,CAAC;AAAA,MAAA,CAUtC;AAAA,IAAA,GACH,GAGI+U,IAAa3J,IAAa,KAAK,GAC/B4J,IAAW5J,IACb,iCACA;AAEJ,WACE,gBAAA7nE,EAAC2iB,IAAA,EAAI,WAAU,OACZ,UAAA;AAAA,MAAA4uD;AAAA,MACD,gBAAAvxE,EAAC4iB,IAAA,EAAI,IAAI4uD,GACP,UAAA;AAAA,QAAA,gBAAAxxE,EAAC,OAAA,EAAI,OAAO,EAAE,QAAQ,cACpB,UAAA;AAAA,UAAA,gBAAAf,EAAC,OAAA,EAAI,OAAO,EAAE,OAAO,WACnB,UAAA,gBAAAA;AAAA,YAACmT;AAAA,YAAA;AAAA,cACC,KARAy1D,IAAa,kBAAkB;AAAA,cAS/B,SAAS,KAAK;AAAA,cACd,SAAS,CAACA;AAAA,cACV,IAAI4J;AAAA,cACJ,OAAM;AAAA,cACN,IAAG;AAAA,cACH,MAAK;AAAA,YAAA;AAAA,UAAA,GAET;AAAA,4BACC/0D,IAAA,EAAM,IAAG,WAAU,MAAK,QAAO,UAAA,qDAAA,CAEhC;AAAA,QAAA,GACF;AAAA,QACA,gBAAAzd,EAAC,SAAI,OAAO,EAAE,OAAO,QAAQ,WAAW,OAAA,GAAW,UAAAk0C,EAAA,CAAa;AAAA,MAAA,EAAA,CAClE;AAAA,IAAA,GACF;AAAA,EAEJ;AACF;AAEAm+B,GAAQ,YAAY;AAAA,EAClB,MAAMnyE,EAAU;AAAA,EAChB,WAAWA,EAAU;AAAA,EACrB,YAAYA,EAAU;AAAA,EACtB,UAAUA,EAAU;AAAA,EACpB,OAAOA,EAAU;AAAA,EACjB,KAAKA,EAAU,MAAM,CAAC,sBAAsB,YAAY,CAAC;AAC3D;AAEAmyE,GAAQ,eAAe;AAAA,EACrB,MAAM,CAAA;AAAA,EACN,WAAW,CAAA;AAAA,EACX,YAAY,MAAM;AAAA,EAAC;AAAA,EACnB,UAAU,MAAM;AAAA,EAAC;AAAA,EACjB,KAAK;AAAA,EACL,OAAO;AACT;ACnNA,MAAqBI,WAAqB5tE,GAAM,UAAU;AAAA,EACxD,YAAYC,GAAO;AACjB,UAAMA,CAAK,GACX,KAAK,QAAQ,EAAE,WAAW,GAAC,GAC3B,KAAK,cAAc,KAAK,YAAY,KAAK,IAAI,GAC7C,KAAK,eAAe,KAAK,aAAa,KAAK,IAAI,GAC/C,KAAK,mBAAmB,KAAK,iBAAiB,KAAK,IAAI,GACvD,KAAK,cAAc,KAAK,YAAY,KAAK,IAAI,GAC7C,KAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AAAA,EACrD;AAAA,EAEA,mBAAmB25C,GAAW;AAC5B,UAAM,EAAE,SAAAp+C,GAAS,WAAA8/B,EAAA,IAAc,KAAK;AACpC,KACGA,MAAcse,EAAU,aAAate,KACtC9/B,EAAQ,OAAOo+C,EAAU,QAAQ,OAEjC,KAAK,eAAA;AAAA,EAET;AAAA,EAEA,aAAa2pB,GAAW;AACtB,SAAK,SAAS,EAAE,WAAAA,GAAW;AAAA,EAC7B;AAAA,EAEA,iBAAiB;AACf,UAAM,EAAE,SAAAsK,GAAS,WAAAC,GAAW,SAAAtyE,EAAA,IAAY,KAAK;AAC7C,IAAAqyE,EAAQC,CAAS,EAAEtyE,EAAQ,EAAE,EAAE,KAAK,CAAAmuC,MAAU;AAC5C,OAACA,EAAO,aAAa,CAAA,GAAI;AAAA,QAAI,CAAAy5B,MAC3B,OAAO,OAAOA,GAAG,EAAE,aAAaA,EAAE,YAAY;AAAA,MAAA,GAEhD,KAAK,SAAS,EAAE,WAAWz5B,EAAO,WAAW;AAAA,IAC/C,CAAC;AAAA,EACH;AAAA,EAEA,cAAc;AACZ,SAAK,MAAM,QAAA;AAAA,EACb;AAAA,EAEA,iBAAiB26B,GAAU5Z,GAAI;AAC7B,SAAK,MAAM,WAAW4Z,GAAU5Z,CAAE;AAAA,EACpC;AAAA,EAEA,YAAY4Z,GAAU;AACpB,SAAK,MAAM,SAAS,EAAE,IAAIA,EAAS,GAAA,GAAM,KAAK,cAAc;AAAA,EAC9D;AAAA,EAEA,SAAS;AACP,UAAM,EAAE,WAAAhpC,MAAc,KAAK,OACrB,EAAE,WAAAioC,MAAc,KAAK;AAC3B,WAAIA,EAAU,SAAS,IAAU,OAE/B,gBAAArnE;AAAA,MAACuI;AAAA,MAAA;AAAA,QACC,UAAQ;AAAA,QACR,UAAS;AAAA,QACT,iBAAgB;AAAA,QAChB,MAAM62B;AAAA,QACN,QAAQ,MAAM,KAAK,YAAA;AAAA,QAEnB,UAAA;AAAA,UAAA,gBAAAngC,EAACsJ,EAAM,QAAN,EAAa,aAAW,IACvB,4BAACA,EAAM,OAAN,EAAY,UAAA,UAAA,CAAO,EAAA,CACtB;AAAA,UACA,gBAAAtJ,EAACsJ,EAAM,MAAN,EAAW,OAAO,EAAE,UAAU,OAAA,GAC7B,UAAA,gBAAAtJ,EAAC,OAAA,EAAI,WAAU,aACb,UAAA,gBAAAA;AAAA,YAACqyE;AAAA,YAAA;AAAA,cACC,WAAAjK;AAAA,cACA,YAAY,KAAK;AAAA,cACjB,UAAU,KAAK;AAAA,cACf,KAAI;AAAA,YAAA;AAAA,UAAA,GAER,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAqK,GAAa,YAAY;AAAA,EACvB,WAAWvyE,EAAU,KAAK;AAAA,EAC1B,SAASA,EAAU,KAAK;AAAA,EACxB,YAAYA,EAAU;AAAA,EACtB,SAASA,EAAU;AAAA,EACnB,SAASA,EAAU,KAAK;AAAA,EACxB,WAAWA,EAAU,OAAO;AAAA,EAC5B,UAAUA,EAAU,KAAK;AAC3B;AAEAuyE,GAAa,eAAe,EAAE,SAAS,CAAA,GAAI,YAAY,MAAM;AAAC,EAAA;ACzF9D,MAAM3nB,KAAM,IAAIC,GAAI,EAAE,WAAW,IAAM,QAAQ,IAAO,GAChD6nB,KAAW9nB,GAAI,QAAQ+nB,EAAU,GAK1BC,KAAgB,CAACxxC,MACvBA,IACEsxC,GAAStxC,CAAK,IADF,IAORyxC,KAAsB,MAAMH,GAAS,QAKrCI,KAAgB,CAACC,GAAoBC,GAAS5+C,OACjDA,KAAU,CAAA,GAAI;AAAA,EAAI,CAAC1G,MACzBA,MAAM,MAAMA,MAAM,SACd,KACAnC,GAAewnD,GAAoBC,GAAStlD,CAAC;AAAA,GCR/CulD,KAAgB,CAAC,EAAE,SAAAnvE,GAAS,SAAAsZ,GAAS,MAAAhK,GAAM,MAAAkmB,QAAW;AAC1D,MAAI,CAACx1B;AACH,mBAAQ,MAAM,2CAA2C,GAClD;AAIT,MAAI,CADY8uE,GAAc9uE,CAAO;AAEnC,mBAAQ,MAAM,2BAA2B+uE,IAAqB,GACvD;AAGT,QAAM,EAAE,qBAAAK,GAAqB,MAAA7tC,GAAM,QAAAjR,IAAS,CAAA,MAAOtwB,GAE7CqnB,IAAQ9Y;AAAA,IACZ,MAAM+Y,GAAS8nD,CAAmB;AAAA,IAClC,CAACA,CAAmB;AAAA,EAAA;AAEtB,MAAI,CAAC/nD,KAASA,EAAM,WAAW;AAC7B,mBAAQ;AAAA,MACN,UAAU+nD,CAAmB;AAAA,IAAA,GAExB;AAGT,QAAMC,IAAW9gE;AAAA,IACf,MAAMwZ,GAAQqnD,GAAqB7tC,CAAI;AAAA,IACvC,CAAC6tC,GAAqB7tC,CAAI;AAAA,EAAA,GAEtBrJ,IAAQ,CAAC,CAACm3C,EAAS,WACnBpvB,IAAc1e,KAAQla,EAAM,CAAC,GAAG,OAAO;AAqB7C,SACE,gBAAArrB;AAAA,IAACiB;AAAA,IAAA;AAAA,MACC,MAAAqS;AAAA,MACA,SAAAgK;AAAA,MACA,SAvBgB,MAAM;AACxB,cAAMqnB,IAAS,EAAE,GAAG3gC,EAAA;AACpB,YAAI;AACF,cAAIunB,IAAOF,EAAM,UAAU,CAACniB,MAAMA,EAAE,QAAQ+6C,CAAW;AACvD,UAAI14B,IAAOF,EAAM,SAAS,IAAGE,KAAQ,IAChCA,IAAO;AAEZ,gBAAM+nD,IAAejoD,EAAM,SAAS,IAAIA,EAAME,CAAI,EAAE,MAAM,IACpDgoD,IAAYP,GAAcI,GAAqBE,GAAch/C,CAAM;AAEzE,UAAAqQ,EAAO,OAAO2uC,GACd3uC,EAAO,SAAS4uC;AAAA,QAClB,SAASzrD,GAAO;AACd,kBAAQ,MAAM,wBAAwBA,CAAK;AAAA,QAC7C,UAAA;AACE,UAAA0R,EAAKmL,CAAM;AAAA,QACb;AAAA,MACF;AAAA,MAOI,OAAOzI,IAAQ3sB,GAAI,qBAAqB;AAAA,MACxC,WAAU;AAAA,MAET,UAAAme,GAAW2lD,EAAS,SAAS,EAAE,KAAK;AAAA,IAAA;AAAA,EAAA;AAG3C;AAEAF,GAAc,YAAY;AAAA,EACxB,SAASjzE,EAAU,MAAM;AAAA,IACvB,MAAMA,EAAU,OAAO;AAAA,IACvB,qBAAqBA,EAAU,OAAO;AAAA,IACtC,MAAMA,EAAU;AAAA,IAChB,QAAQA,EAAU;AAAA,MAChBA,EAAU,UAAU,CAACA,EAAU,QAAQA,EAAU,MAAM,CAAC;AAAA,IAAA;AAAA,EAC1D,CACD,EAAE;AAAA,EACH,SAASA,EAAU;AAAA,EACnB,MAAMA,EAAU;AAAA,EAChB,MAAMA,EAAU;AAClB;AAEAizE,GAAc,eAAe;AAAA,EAC3B,SAAS;AAAA,EACT,MAAM;AAAA,EACN,MAAM,MAAM;AAAA,EAAC;AACf;ACpGA,MAAMK,KAAc,CAACttE,GAAO0lC,MAAQ1lC,KAAS0lC,EAAI,KAAK,CAAClM,MAAOA,EAAG,SAASx5B,CAAK,GAGzEutE,KAAS,CAACpzE,GAASqB,MACvB8xE,GAAYnzE,GAAS,MAAMqB,CAAO,MAAMrB,GAAS,YAAY,CAAA,GAAI,SAAS,GCLtEqzE,KAAe;AAAA,EACnB,WAAW;AAAA,EACX,oBAAoB;AAAA,EACpB,SAAS;AAAA,EACT,UAAU;AAAA,EACV,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,WAAW;AACb,GCLMC,KAAS,CAAC3tE,GAAM4lC,IAAM,OACR4nC,GAAYxtE,GAAM4lC,CAAG,IACjB8nC,GAAa1kD,EAAU,IACxCD,GAAc,SAAS/oB,CAAI,IAGzB0tE,GAAa1tE,CAAI,IAFf,MCJL4tE,KAAe,CACnBC,GACAC,GACA9tE,GACA6oB,GACA+c,IAAM,CAAA,GACNu6B,IAAO,OACJ;AACH,QAAMh+C,IAAO,MAAM0G,CAAE,IAEjB,GAAGglD,GAAY,EAAE,IAAI7tE,CAAI,KADzB,GAAG6tE,GAAY,EAAE,IAAI7tE,CAAI,IAAI6oB,CAAE,IAE7B3G,IAAO,IAAI4rD,IAAiB,MAAM,EAAE,cAAc3rD,CAAG;AAE3D,MAAIg+C,GAAM;AACR,UAAM4N,IAAU,IAAIpvE,EAAU,IAAI,GAAGujB,CAAI;AACzC,kBAAO,KAAK6rD,GAAS,QAAQ,GACtB;AAAA,EACT;AAEA,QAAMzkC,IAASqkC,GAAO3tE,GAAM4lC,CAAG;AAC/B,SAAK0D,KAGL,OAAO,QAAQ,UAAU,CAAA,GAAI,IAAIpnB,CAAI,GAC9BonB,KAHE;AAIX;"}