xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 32.7 kB
Source Map (JSON)
{"version":3,"file":"select.mjs","sources":["../../src/select/select.tsx"],"sourcesContent":["import { defineComponent, provide, computed, toRefs, watch, ref, nextTick } from 'vue';\nimport picker from 'lodash/pick';\nimport isArray from 'lodash/isArray';\nimport isFunction from 'lodash/isFunction';\nimport debounce from 'lodash/debounce';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport intersection from 'lodash/intersection';\n\nimport FakeArrow from '../common-components/fake-arrow';\nimport SelectInput from '../select-input';\nimport SelectPanel from './select-panel';\n\nimport props from './props';\nimport { TdSelectProps, SelectValue } from './type';\nimport { PopupVisibleChangeContext } from '../popup';\n\n// hooks\nimport { useFormDisabled } from '../form/hooks';\nimport useDefaultValue from '../hooks/useDefaultValue';\nimport useVModel from '../hooks/useVModel';\nimport { useTNodeJSX } from '../hooks/tnode';\nimport { useConfig, usePrefixClass } from '../hooks/useConfig';\nimport { selectInjectKey, getSingleContent, getMultipleContent, getNewMultipleValue } from './helper';\nimport { useSelectOptions } from './hooks/useSelectOptions';\n\nexport default defineComponent({\n name: 'XSelect',\n props: { ...props },\n setup(props: TdSelectProps, { slots }) {\n const classPrefix = usePrefixClass();\n const disabled = useFormDisabled();\n const renderTNodeJSX = useTNodeJSX();\n const COMPONENT_NAME = usePrefixClass('select');\n const { globalConfig, t } = useConfig('select');\n const { popupVisible, inputValue, modelValue, value } = toRefs(props);\n const [innerInputValue, setInputValue] = useDefaultValue(\n inputValue,\n props.defaultInputValue,\n props.onInputChange,\n 'inputValue',\n );\n const [orgValue, setOrgValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n const selectPanelRef = ref(null);\n const selectInputRef = ref(null);\n const keys = computed(() => ({\n label: props.keys?.label || 'label',\n value: props.keys?.value || 'value',\n disabled: props.keys?.disabled || 'disabled',\n }));\n const { options, optionsMap, optionsList, optionsCache, displayOptions } = useSelectOptions(\n props,\n keys,\n innerInputValue,\n );\n\n // 内部数据,格式化过的\n const innerValue = computed(() => {\n if (orgValue.value === undefined) {\n return props.multiple ? [] : undefined;\n }\n if (props.valueType === 'object') {\n return !props.multiple\n ? orgValue.value[keys.value.value]\n : (orgValue.value as SelectValue[]).map((option) => option[keys.value.value]);\n }\n return orgValue.value;\n });\n const setInnerValue: TdSelectProps['onChange'] = (newVal: SelectValue | SelectValue[], context) => {\n if (props.valueType === 'object') {\n const { value, label } = keys.value;\n const getOption = (val: SelectValue) => {\n if (val === undefined) {\n return undefined;\n }\n const option = optionsMap.value.get(val);\n return {\n [value]: get(option, value),\n [label]: get(option, label),\n };\n };\n newVal = props.multiple ? (newVal as SelectValue[]).map((val) => getOption(val)) : getOption(newVal);\n }\n if (newVal === orgValue.value) return;\n setOrgValue(newVal, {\n selectedOptions: getSelectedOptions(newVal),\n ...context,\n });\n };\n\n const [innerPopupVisible, setInnerPopupVisible] = useDefaultValue(\n popupVisible,\n false,\n (visible: boolean, context: PopupVisibleChangeContext) => {\n props.onPopupVisibleChange?.(visible, context);\n },\n 'popupVisible',\n );\n\n const placeholderText = computed(\n () =>\n ((!props.multiple && innerPopupVisible.value && getSingleContent(innerValue.value, optionsMap)) ||\n props.placeholder) ??\n t(globalConfig.value.placeholder),\n );\n\n // selectInput 展示值\n const displayText = computed(() =>\n props.multiple\n ? getMultipleContent(innerValue.value as SelectValue[], optionsMap)\n : getSingleContent(innerValue.value, optionsMap),\n );\n\n // valueDisplayParams参数\n const valueDisplayParams = computed(() => {\n const val =\n props.multiple && isArray(innerValue.value)\n ? (innerValue.value as SelectValue[]).map((value) => ({\n value,\n label: optionsMap.value.get(value)?.label,\n }))\n : innerValue.value;\n\n const params = {\n value: val,\n onClose: props.multiple ? (index: number) => removeTag(index) : () => {},\n };\n\n if (props.minCollapsedNum && props.multiple) {\n return {\n ...params,\n displayValue: val?.slice?.(0, props.minCollapsedNum),\n };\n }\n return params;\n });\n\n const isFilterable = computed(() => {\n return Boolean(props.filterable || globalConfig.value.filterable || isFunction(props.filter));\n });\n\n // 移除tag\n const removeTag = (index: number, e?: MouseEvent) => {\n e && e.stopPropagation();\n const selectValue = cloneDeep(innerValue.value) as SelectValue[];\n const value = selectValue[index];\n selectValue.splice(index, 1);\n setInnerValue(selectValue, { selectedOptions: getSelectedOptions(selectValue), trigger: 'tag-remove', e });\n props.onRemove?.({\n value: value as string | number,\n data: optionsMap.value.get(value),\n e,\n });\n };\n\n const handleCreate = () => {\n if (!innerInputValue.value) return;\n props.onCreate?.(innerInputValue.value);\n setInputValue('');\n };\n\n // 键盘操作逻辑\n const hoverIndex = ref(-1);\n const handleKeyDown = (e: KeyboardEvent) => {\n const optionsListLength = displayOptions.value.length;\n let newIndex = hoverIndex.value;\n switch (e.code) {\n case 'ArrowUp':\n e.preventDefault();\n if (hoverIndex.value === -1) {\n newIndex = 0;\n } else if (hoverIndex.value === 0) {\n newIndex = optionsListLength - 1;\n } else {\n newIndex--;\n }\n if (optionsList.value[newIndex]?.disabled) {\n newIndex--;\n }\n hoverIndex.value = newIndex;\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (hoverIndex.value === -1 || hoverIndex.value === optionsListLength - 1) {\n newIndex = 0;\n } else {\n newIndex++;\n }\n if (optionsList.value[newIndex]?.disabled) {\n newIndex++;\n }\n hoverIndex.value = newIndex;\n break;\n case 'Enter':\n if (hoverIndex.value === -1) break;\n if (!innerPopupVisible.value) {\n setInnerPopupVisible(true, { e });\n break;\n }\n if (!props.multiple) {\n const selectedOptions = getSelectedOptions(optionsList.value[hoverIndex.value].value);\n setInnerValue(optionsList.value[hoverIndex.value].value, {\n option: selectedOptions?.[0],\n selectedOptions: getSelectedOptions(optionsList.value[hoverIndex.value].value),\n trigger: 'check',\n e,\n });\n setInnerPopupVisible(false, { e });\n } else {\n if (hoverIndex.value === -1) return;\n const optionValue = optionsList.value[hoverIndex.value]?.value;\n if (!optionValue) return;\n const newValue = getNewMultipleValue(innerValue.value, optionValue);\n const selectedOptions = getSelectedOptions(newValue.value);\n setInnerValue(newValue.value, {\n option: selectedOptions.find((v) => v.value == optionValue),\n selectedOptions,\n trigger: newValue.isCheck ? 'check' : 'uncheck',\n e,\n });\n }\n break;\n case 'Escape':\n setInnerPopupVisible(false, { e });\n break;\n }\n };\n\n const popupContentRef = computed(() => selectInputRef.value?.popupRef.getOverlay() as HTMLElement);\n\n /**\n * 可选选项的列表\n * 排除已禁用和全选的选项\n */\n const optionalList = computed(() =>\n optionsList.value.filter((item) => {\n return !item.disabled && !item['check-all'] && !item.checkAll;\n }),\n );\n\n const getSelectedOptions = (selectValue: SelectValue[] | SelectValue = innerValue.value) => {\n return optionsList.value.filter((option) => {\n if (option.checkAll) return;\n if (isArray(selectValue)) return selectValue.includes(option.value);\n return selectValue === option.value;\n });\n };\n\n const onCheckAllChange = (checked: boolean) => {\n if (!props.multiple) return;\n const value = checked ? optionalList.value.map((option) => option.value) : [];\n setInnerValue(value, { selectedOptions: getSelectedOptions(value), trigger: checked ? 'check' : 'clear' });\n };\n\n // 已选的长度\n const intersectionLen = computed<number>(() => {\n const values = optionalList.value.map((item) => item.value);\n const n = intersection(innerValue.value, values);\n return n.length;\n });\n\n // 全选\n const isCheckAll = computed<boolean>(() => {\n return intersectionLen.value === optionalList.value.length;\n });\n\n // 半选\n const indeterminate = computed<boolean>(() => !isCheckAll.value && intersectionLen.value !== 0);\n\n const SelectProvide = computed(() => ({\n max: props.max,\n multiple: props.multiple,\n hoverIndex: hoverIndex.value,\n selectValue: innerValue.value,\n reserveKeyword: props.reserveKeyword,\n handleValueChange: setInnerValue,\n handlerInputChange: setInputValue,\n handlePopupVisibleChange: setInnerPopupVisible,\n handleCreate,\n size: props.size,\n popupContentRef,\n indeterminate: indeterminate.value,\n isCheckAll: isCheckAll.value,\n onCheckAllChange,\n getSelectedOptions,\n displayOptions: displayOptions.value,\n }));\n\n provide(selectInjectKey, SelectProvide);\n\n const checkValueInvalid = () => {\n // 参数类型检测与修复\n if (!props.multiple && isArray(orgValue.value)) {\n setOrgValue(undefined, { selectedOptions: [], trigger: 'default' });\n }\n if (props.multiple && !isArray(orgValue.value)) {\n setOrgValue([], { selectedOptions: [], trigger: 'default' });\n }\n };\n const handleSearch = debounce((value: string, { e }: { e: KeyboardEvent }) => {\n props.onSearch?.(`${value}`, { e });\n }, 300);\n\n const addCache = (val: SelectValue) => {\n if (props.multiple) {\n const newCache = [];\n for (const item of (val as SelectValue[]) || []) {\n const option = optionsMap.value.get(item);\n if (option) {\n newCache.push(option);\n }\n }\n optionsCache.value = Array.from(new Set([...newCache, ...optionsCache.value]));\n } else {\n const option = optionsMap.value.get(val);\n if (option) {\n optionsCache.value = Array.from(new Set([option, ...optionsCache.value]));\n }\n }\n };\n\n watch(\n orgValue,\n (val) => {\n checkValueInvalid();\n nextTick(() => {\n addCache(val);\n });\n },\n {\n immediate: true,\n },\n );\n watch(\n () => props.multiple,\n () => {\n checkValueInvalid();\n },\n );\n watch(innerPopupVisible, (value) => {\n if (value) {\n // 显示\n hoverIndex.value = -1;\n } else {\n // 隐藏\n // eslint-disable-next-line no-lonely-if\n if (innerInputValue.value) {\n setInputValue('');\n }\n }\n });\n\n // 列表展开时定位置选中项\n const updateScrollTop = (content: HTMLDivElement) => {\n if (!selectPanelRef.value) {\n return;\n }\n const firstSelectedNode: HTMLDivElement = (selectPanelRef.value?.innerRef as HTMLDivElement)?.querySelector(\n `.${classPrefix.value}-is-selected`,\n );\n // 此处需要等待渲染后进行计算\n nextTick(() => {\n if (firstSelectedNode && content) {\n const { paddingBottom } = getComputedStyle(firstSelectedNode);\n const { marginBottom } = getComputedStyle(content);\n const elementBottomHeight = parseInt(paddingBottom, 10) + parseInt(marginBottom, 10);\n // 小于0时不需要特殊处理,会被设为0\n const updateValue =\n firstSelectedNode.offsetTop -\n content.offsetTop -\n (content.clientHeight - firstSelectedNode.clientHeight) +\n elementBottomHeight;\n // eslint-disable-next-line no-param-reassign\n content.scrollTop = updateValue;\n }\n });\n };\n provide('updateScrollTop', updateScrollTop);\n return () => {\n const { overlayClassName, ...restPopupProps } = (props.popupProps || {}) as TdSelectProps['popupProps'];\n return (\n <div class={`${COMPONENT_NAME.value}__wrap`}>\n <SelectInput\n {...{\n autoWidth: props.autoWidth,\n readonly: props.readonly,\n borderless: props.borderless,\n multiple: props.multiple,\n clearable: props.clearable,\n loading: props.loading,\n status: props.status,\n tips: props.tips,\n minCollapsedNum: props.minCollapsedNum,\n autofocus: props.autofocus,\n suffix: props.suffix,\n }}\n ref={selectInputRef}\n class={COMPONENT_NAME.value}\n value={displayText.value}\n disabled={disabled.value}\n popupVisible={innerPopupVisible.value}\n inputValue={innerPopupVisible.value ? innerInputValue.value : ''}\n placeholder={`${placeholderText.value}`}\n allowInput={isFilterable.value}\n collapsed-items={props.collapsedItems}\n inputProps={{\n size: props.size,\n autofocus: props.autofocus,\n ...(props.inputProps as TdSelectProps['inputProps']),\n onkeydown: handleKeyDown,\n }}\n tagInputProps={{\n size: props.size,\n ...(props.tagInputProps as TdSelectProps['tagInputProps']),\n }}\n onTagChange={(val, ctx) => {\n removeTag(ctx.index);\n }}\n tagProps={{ ...(props.tagProps as TdSelectProps['tagProps']) }}\n popupProps={{\n overlayClassName: [`${COMPONENT_NAME.value}__dropdown`, overlayClassName],\n ...restPopupProps,\n }}\n label={props.label}\n prefixIcon={props.prefixIcon}\n suffix={props.suffix}\n suffixIcon={() => {\n if (props.suffixIcon || slots.suffixIcon) {\n return renderTNodeJSX('suffixIcon');\n }\n\n return (\n props.showArrow && (\n <FakeArrow\n overlayClassName={`${COMPONENT_NAME.value}__right-icon`}\n isActive={innerPopupVisible.value}\n />\n )\n );\n }}\n valueDisplay={() =>\n renderTNodeJSX('valueDisplay', {\n params: valueDisplayParams.value,\n })\n }\n onPopupVisibleChange={(val: boolean, context) => {\n setInnerPopupVisible(val, context);\n }}\n onInputChange={(value, context) => {\n if (value) {\n setInnerPopupVisible(true, { e: context.e as KeyboardEvent });\n }\n setInputValue(value);\n handleSearch(`${value}`, { e: context.e as KeyboardEvent });\n }}\n onClear={({ e }) => {\n setInnerValue(props.multiple ? [] : undefined, {\n option: null,\n selectedOptions: getSelectedOptions(props.multiple ? [] : undefined),\n trigger: 'clear',\n e,\n });\n props.onClear?.({ e });\n }}\n onEnter={(inputValue, { e }) => {\n props.onEnter?.({ inputValue: `${innerInputValue.value}`, e, value: innerValue.value });\n handleCreate();\n }}\n onBlur={(inputValue, { e }) => {\n props.onBlur?.({ e, value: innerValue.value });\n }}\n onFocus={(inputValue, { e }) => {\n props.onFocus?.({ e, value: innerValue.value });\n }}\n {...(props.selectInputProps as TdSelectProps['selectInputProps'])}\n v-slots={{\n label: slots.label,\n prefixIcon: slots.prefixIcon,\n suffix: slots.suffix,\n panel: () => (\n <SelectPanel\n ref={selectPanelRef}\n {...picker(props, [\n 'size',\n 'multiple',\n 'empty',\n 'loading',\n 'loadingText',\n 'filterable',\n 'creatable',\n 'panelTopContent',\n 'panelBottomContent',\n 'filter',\n 'scroll',\n ])}\n options={options.value}\n inputValue={innerInputValue.value}\n v-slots={slots}\n />\n ),\n collapsedItems: slots.collapsedItems,\n }}\n />\n </div>\n );\n };\n },\n});\n"],"names":["name","props","setup","innerInputValue","setInputValue","orgValue","setOrgValue","label","value","disabled","get","innerPopupVisible","setInnerPopupVisible","onClose","isFunction","e","cloneDeep","selectValue","selectedOptions","trigger","newIndex","setInnerValue","option","isArray","handleValueChange","handlerInputChange","handlePopupVisibleChange","handleCreate","popupContentRef","onCheckAllChange","getSelectedOptions","provide","newCache","_iterator","watch","checkValueInvalid","nextTick","immediate","hoverIndex","restPopupProps","_createVNode","_mergeProps","onkeydown","removeTag","handleSearch","inputValue"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,cAAA,eAAA,CAAA;AACEA,EAAAA,IAAAA,EAAAA,SAAAA;AACAC,EAAAA,KAAAA,EAAAA,aAAAA,CAAAA,EAAAA,EAAAA,KAAAA,CAAAA;AACAC,EAAAA,KAAAA,EAAAA,SAAAA,KAAAA,CAAAA,MAAAA,EAAAA,IAAAA,EAAAA;AAAuC,IAAA,IAAA,KAAA,GAAA,IAAA,CAAA,KAAA,CAAA;AACrC,IAAA,IAAA,WAAA,GAAA,cAAA,EAAA,CAAA;AACA,IAAA,IAAA,QAAA,GAAA,eAAA,EAAA,CAAA;AACA,IAAA,IAAA,cAAA,GAAA,WAAA,EAAA,CAAA;AACM,IAAA,IAAA,cAAA,GAAA,cAAA,CAAA,QAAA,CAAA,CAAA;AACN,IAAA,IAAA,UAAA,GAAA,SAAA,CAAA,QAAA,CAAA;;;AACA,IAAA,IAAA,OAAA,GAAA,MAAA,CAAA,MAAA,CAAA;;;;;AACM,IAAA,IAAA,gBAAA,GAAA,eAAA,CAAA,UAAA,EAAA,MAAA,CAAA,iBAAA,EAAA,MAAA,CAAA,aAAA,EAAA,YAAA,CAAA;;AAACC,MAAAA,eAAAA,GAAAA,iBAAAA,CAAAA,CAAAA,CAAAA;AAAiBC,MAAAA,aAAAA,GAAAA,iBAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAMlB,IAAA,IAAA,UAAA,GAAA,SAAA,CAAA,KAAA,EAAA,UAAA,EAAA,MAAA,CAAA,YAAA,EAAA,MAAA,CAAA,QAAA,CAAA;;AAACC,MAAAA,QAAAA,GAAAA,WAAAA,CAAAA,CAAAA,CAAAA;AAAUC,MAAAA,WAAAA,GAAAA,WAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AACX,IAAA,IAAA,cAAA,GAAA,GAAA,CAAA,IAAA,CAAA,CAAA;AACA,IAAA,IAAA,cAAA,GAAA,GAAA,CAAA,IAAA,CAAA,CAAA;;AACgB,MAAA,IAAA,YAAA,EAAA,aAAA,EAAA,aAAA,CAAA;;AACpBC,QAAAA,KAAAA,EAAAA,CAAAA,CAAAA,YAAAA,GAAAA,MAAAA,CAAAA,IAAAA,MAAAA,IAAAA,IAAAA,YAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,YAAAA,CAAAA,KAAAA,KAAAA,OAAAA;AACAC,QAAAA,KAAAA,EAAAA,CAAAA,CAAAA,aAAAA,GAAAA,MAAAA,CAAAA,IAAAA,MAAAA,IAAAA,IAAAA,aAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,aAAAA,CAAAA,KAAAA,KAAAA,OAAAA;AACAC,QAAAA,QAAAA,EAAAA,CAAAA,CAAAA,aAAAA,GAAAA,MAAAA,CAAAA,IAAAA,MAAAA,IAAAA,IAAAA,aAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,aAAAA,CAAAA,QAAAA,KAAAA,UAAAA;;AACA,KAAA,CAAA,CAAA;;;;;;;AAQI,IAAA,IAAA,UAAA,GAAA,QAAA,CAAA,YAAA;AACA,MAAA,IAAA,QAAA,CAAA,KAAA,KAAA,KAAA,CAAA,EAAA;AACKR,QAAAA,OAAAA,MAAAA,CAAAA,QAAAA,GAAAA,EAAAA,GAAAA,KAAAA,CAAAA,CAAAA;AACT,OAAA;AACIA,MAAAA,IAAAA,MAAAA,CAAAA,SAAAA,KAAAA,QAAAA,EAAAA;;AAGyC,UAAA,OAAA,MAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,CAAA,CAAA;;AAC7C,OAAA;;AAEF,KAAA,CAAA,CAAA;;AAEMA,MAAAA,IAAAA,MAAAA,CAAAA,SAAAA,KAAAA,QAAAA,EAAAA;AACF,QAAA,IAAA,WAAA,GAAA,IAAA,CAAA,KAAA;;;AACM,QAAA,IAAA,SAAA,GAAA,SAAA,SAAA,CAAA,GAAA,EAAA;AAAkC,UAAA,IAAA,KAAA,CAAA;AACtC,UAAA,IAAA,GAAA,KAAA,KAAA,CAAA,EAAA;AACS,YAAA,OAAA,KAAA,CAAA,CAAA;AACT,WAAA;;AAEO,UAAA,OAAA,KAAA,GAAA,EAAA,EAAA,eAAA,CAAA,KAAA,EAAA,MAAA,EAAAS,KAAA,CAAA,MAAA,EAAA,MAAA,CAAA,CAAA,EAAA,eAAA,CAAA,KAAA,EAAA,KAAA,EAAAA,KAAA,CAAA,MAAA,EAAA,KAAA,CAAA,CAAA,EAAA,KAAA,CAAA;;;;AAKsE,SAAA,CAAA,GAAA,SAAA,CAAA,MAAA,CAAA,CAAA;AACjF,OAAA;AACA,MAAA,IAAA,MAAA,KAAA,QAAA,CAAA,KAAA,EAAA,OAAA;;;;;AAOI,IAAA,IAAA,iBAAA,GAAA,eAAA,CAAA,YAAA,EAAA,KAAA,EAAA,UAAA,OAAA,EAAA,OAAA,EAAA;AAGsD,QAAA,IAAA,qBAAA,CAAA;AACxDT,QAAAA,CAAAA,qBAAAA,GAAAA,MAAAA,CAAAA,oBAAAA,MAAAA,IAAAA,IAAAA,qBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,qBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA,OAAAA,EAAAA,OAAAA,CAAAA,CAAAA;;;AAJGU,MAAAA,iBAAAA,GAAAA,iBAAAA,CAAAA,CAAAA,CAAAA;AAAmBC,MAAAA,oBAAAA,GAAAA,iBAAAA,CAAAA,CAAAA,CAAAA,CAAAA;;AAUxB,MAAA,IAAA,KAAA,CAAA;AAAA,MAAA,OAAA,CAAA,KAAA,GAAA,CAAA,MAAA,CAAA,QAAA,IAAA,iBAAA,CAAA,KAAA,IAAA,gBAAA,CAAA,UAAA,CAAA,KAAA,EAAA,UAAA,CAAA,IAAA,MAAA,CAAA,WAAA,MAAA,IAAA,IAAA,KAAA,KAAA,KAAA,CAAA,GAAA,KAAA,GAAA,CAAA,CAAA,YAAA,CAAA,KAAA,CAAA,WAAA,CAAA,CAAA;AAGkC,KAAA,CAAA,CAAA;;;AAOe,KAAA,CAAA,CAAA;AAI7C,IAAA,IAAA,kBAAA,GAAA,QAAA,CAAA,YAAA;;AAGsD,QAAA,IAAA,qBAAA,CAAA;;AAClDJ,UAAAA,KAAAA,EAAAA,MAAAA;AACAD,UAAAA,KAAAA,EAAAA,CAAAA,qBAAAA,GAAAA,UAAAA,CAAAA,KAAAA,CAAAA,GAAAA,CAAAA,MAAAA,CAAAA,MAAAA,IAAAA,IAAAA,qBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,qBAAAA,CAAAA,KAAAA;;AACF,OAAA,CAAA,GAAA,UAAA,CAAA,KAAA,CAAA;AAGN,MAAA,IAAA,MAAA,GAAA;AACEC,QAAAA,KAAAA,EAAAA,GAAAA;AACAK,QAAAA,OAAAA,EAAAA,MAAAA,CAAAA,QAAAA,GAAAA,UAAAA,KAAAA,EAAAA;;;;AAGEZ,MAAAA,IAAAA,MAAAA,CAAAA,eAAAA,IAAAA,MAAAA,CAAAA,QAAAA,EAAAA;AAAyC,QAAA,IAAA,UAAA,CAAA;AACpC,QAAA,OAAA,aAAA,CAAA,aAAA,CAAA,EAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA;;AAE8C,SAAA,CAAA,CAAA;AAEvD,OAAA;AACO,MAAA,OAAA,MAAA,CAAA;AACT,KAAA,CAAA,CAAA;AAEM,IAAA,IAAA,YAAA,GAAA,QAAA,CAAA,YAAA;AACG,MAAA,OAAA,OAAA,CAAA,MAAA,CAAA,UAAA,IAAA,YAAA,CAAA,KAAA,CAAA,UAAA,IAAAa,YAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,CAAA;AACT,KAAA,CAAA,CAAA;;AAGqD,MAAA,IAAA,gBAAA,CAAA;AACnDC,MAAAA,CAAAA,IAAAA,CAAAA,CAAAA,eAAAA,EAAAA,CAAAA;AACM,MAAA,IAAA,WAAA,GAAAC,WAAA,CAAA,UAAA,CAAA,KAAA,CAAA,CAAA;AACN,MAAA,IAAA,MAAA,GAAA,WAAA,CAAA,KAAA,CAAA,CAAA;AACYC,MAAAA,WAAAA,CAAAA,MAAAA,CAAAA,KAAAA,EAAAA,CAAAA,CAAAA,CAAAA;;AACiBC,QAAAA,eAAAA,EAAAA,kBAAAA,CAAAA,WAAAA,CAAAA;AAAkDC,QAAAA,OAAAA,EAAAA,YAAAA;AAAuBJ,QAAAA,CAAAA,EAAAA,CAAAA;AAAE,OAAA,CAAA,CAAA;AACxGd,MAAAA,CAAAA,gBAAAA,GAAAA,MAAAA,CAAAA,QAAAA,MAAAA,IAAAA,IAAAA,gBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,gBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AACEO,QAAAA,KAAAA,EAAAA,MAAAA;;AAEAO,QAAAA,CAAAA,EAAAA,CAAAA;AACF,OAAA,CAAA,CAAA;;AAGF,IAAA,IAAA,YAAA,GAAA,SAAA,YAAA,GAAA;AAA2B,MAAA,IAAA,gBAAA,CAAA;AACzB,MAAA,IAAA,CAAA,eAAA,CAAA,KAAA,EAAA,OAAA;AACAd,MAAAA,CAAAA,gBAAAA,GAAAA,MAAAA,CAAAA,QAAAA,MAAAA,IAAAA,IAAAA,gBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,gBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA,eAAAA,CAAAA,KAAAA,CAAAA,CAAAA;;;AAKI,IAAA,IAAA,UAAA,GAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,IAAA,IAAA,aAAA,GAAA,SAAA,aAAA,CAAA,CAAA,EAAA;;AACE,MAAA,IAAA,iBAAA,GAAA,cAAA,CAAA,KAAA,CAAA,MAAA,CAAA;AACN,MAAA,IAAA,QAAA,GAAA,UAAA,CAAA,KAAA,CAAA;;AAEO,QAAA,KAAA,SAAA;;AAEC,UAAA,IAAA,UAAA,CAAA,KAAA,KAAA,CAAA,CAAA,EAAA;AACSmB,YAAAA,QAAAA,GAAAA,CAAAA,CAAAA;AACb,WAAA,MAAA,IAAA,UAAA,CAAA,KAAA,KAAA,CAAA,EAAA;;AAEA,WAAA,MAAA;AACEA,YAAAA,QAAAA,EAAAA,CAAAA;AACF,WAAA;AACI,UAAA,IAAA,CAAA,qBAAA,GAAA,WAAA,CAAA,KAAA,CAAA,QAAA,CAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,IAAA,qBAAA,CAAA,QAAA,EAAA;AACFA,YAAAA,QAAAA,EAAAA,CAAAA;AACF,WAAA;;AAEA,UAAA,MAAA;AACG,QAAA,KAAA,WAAA;;AAEH,UAAA,IAAA,UAAA,CAAA,KAAA,KAAA,CAAA,CAAA,IAAA,UAAA,CAAA,KAAA,KAAA,iBAAA,GAAA,CAAA,EAAA;AACaA,YAAAA,QAAAA,GAAAA,CAAAA,CAAAA;AACb,WAAA,MAAA;AACEA,YAAAA,QAAAA,EAAAA,CAAAA;AACF,WAAA;AACI,UAAA,IAAA,CAAA,sBAAA,GAAA,WAAA,CAAA,KAAA,CAAA,QAAA,CAAA,MAAA,IAAA,IAAA,sBAAA,KAAA,KAAA,CAAA,IAAA,sBAAA,CAAA,QAAA,EAAA;AACFA,YAAAA,QAAAA,EAAAA,CAAAA;AACF,WAAA;;AAEA,UAAA,MAAA;AACG,QAAA,KAAA,OAAA;AACH,UAAA,IAAA,UAAA,CAAA,KAAA,KAAA,CAAA,CAAA,EAAA,MAAA;AACI,UAAA,IAAA,CAAA,iBAAA,CAAA,KAAA,EAAA;;AAC2BL,cAAAA,CAAAA,EAAAA,CAAAA;AAAE,aAAA,CAAA,CAAA;AAC/B,YAAA,MAAA;AACF,WAAA;AACI,UAAA,IAAA,CAAA,MAAA,CAAA,QAAA,EAAA;AACF,YAAA,IAAA,eAAA,GAAA,kBAAA,CAAA,WAAA,CAAA,KAAA,CAAA,UAAA,CAAA,KAAA,CAAA,CAAA,KAAA,CAAA,CAAA;;;AAGEG,cAAAA,eAAAA,EAAAA,kBAAAA,CAAAA,WAAAA,CAAAA,KAAAA,CAAAA,UAAAA,CAAAA,KAAAA,CAAAA,CAAAA,KAAAA,CAAAA;AACAC,cAAAA,OAAAA,EAAAA,OAAAA;AACAJ,cAAAA,CAAAA,EAAAA,CAAAA;AACF,aAAA,CAAA,CAAA;;AAC8BA,cAAAA,CAAAA,EAAAA,CAAAA;AAAE,aAAA,CAAA,CAAA;AAClC,WAAA,MAAA;AAAO,YAAA,IAAA,qBAAA,CAAA;AACL,YAAA,IAAA,UAAA,CAAA,KAAA,KAAA,CAAA,CAAA,EAAA,OAAA;AACA,YAAA,IAAA,WAAA,GAAA,CAAA,qBAAA,GAAA,WAAA,CAAA,KAAA,CAAA,UAAA,CAAA,KAAA,CAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,KAAA,CAAA;;;AAGM,YAAA,IAAA,gBAAA,GAAA,kBAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CAAA;AACNM,YAAAA,aAAAA,CAAAA,QAAAA,CAAAA,KAAAA,EAAAA;AACEC,cAAAA,MAAAA,EAAAA,gBAAAA,CAAAA,IAAAA,CAAAA,UAAAA,CAAAA,EAAAA;AAAoC,gBAAA,OAAA,CAAA,CAAA,KAAA,IAAA,WAAA,CAAA;;AACpCJ,cAAAA,eAAAA,EAAAA,gBAAAA;AACAC,cAAAA,OAAAA,EAAAA,QAAAA,CAAAA,OAAAA,GAAAA,OAAAA,GAAAA,SAAAA;AACAJ,cAAAA,CAAAA,EAAAA,CAAAA;AACF,aAAA,CAAA,CAAA;AACF,WAAA;AACA,UAAA,MAAA;AACG,QAAA,KAAA,QAAA;;AAC2BA,YAAAA,CAAAA,EAAAA,CAAAA;AAAE,WAAA,CAAA,CAAA;AAChC,UAAA,MAAA;AAAA,OAAA;;;AAI2B,MAAA,IAAA,qBAAA,CAAA;AAAA,MAAA,OAAA,CAAA,qBAAA,GAAA,cAAA,CAAA,KAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,QAAA,CAAA,UAAA,EAAA,CAAA;;;;AAQ7B,QAAA,OAAA,CAAA,IAAA,CAAA,QAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CAAA,IAAA,CAAA,IAAA,CAAA,QAAA,CAAA;AACF,OAAA,CAAA,CAAA;AAAC,KAAA,CAAA,CAAA;AAGH,IAAA,IAAA,kBAAA,GAAA,SAAA,kBAAA,GAAA;AAA4F,MAAA,IAAA,WAAA,GAAA,SAAA,CAAA,MAAA,GAAA,CAAA,IAAA,SAAA,CAAA,CAAA,CAAA,KAAA,SAAA,GAAA,SAAA,CAAA,CAAA,CAAA,GAAA,UAAA,CAAA,KAAA,CAAA;;;AAGxF,QAAA,IAAAQ,SAAA,CAAA,WAAA,CAAA,EAAA,OAAA,WAAA,CAAA,QAAA,CAAA,MAAA,CAAA,KAAA,CAAA,CAAA;AACA,QAAA,OAAA,WAAA,KAAA,MAAA,CAAA,KAAA,CAAA;AACF,OAAA,CAAA,CAAA;;AAGI,IAAA,IAAA,gBAAA,GAAA,SAAA,gBAAA,CAAA,OAAA,EAAA;AACJ,MAAA,IAAA,CAAA,MAAA,CAAA,QAAA,EAAA,OAAA;;;AACuE,OAAA,CAAA,GAAA,EAAA,CAAA;;AAChDL,QAAAA,eAAAA,EAAAA,kBAAAA,CAAAA,MAAAA,CAAAA;AAA4CC,QAAAA,OAAAA,EAAAA,OAAAA,GAAAA,OAAAA,GAAAA,OAAAA;AAAqC,OAAA,CAAA,CAAA;;AAIpG,IAAA,IAAA,eAAA,GAAA,QAAA,CAAA,YAAA;;;;;;AAIN,KAAA,CAAA,CAAA;AAGM,IAAA,IAAA,UAAA,GAAA,QAAA,CAAA,YAAA;;AAEN,KAAA,CAAA,CAAA;;;;;;;;;;;AAWEK,QAAAA,iBAAAA,EAAAA,aAAAA;AACAC,QAAAA,kBAAAA,EAAAA,aAAAA;AACAC,QAAAA,wBAAAA,EAAAA,oBAAAA;AACAC,QAAAA,YAAAA,EAAAA,YAAAA;;AAEAC,QAAAA,eAAAA,EAAAA,eAAAA;;;AAGAC,QAAAA,gBAAAA,EAAAA,gBAAAA;AACAC,QAAAA,kBAAAA,EAAAA,kBAAAA;;;AAEA,KAAA,CAAA,CAAA;AAEFC,IAAAA,OAAAA,CAAAA,eAAAA,EAAAA,aAAAA,CAAAA,CAAAA;AAEA,IAAA,IAAA,iBAAA,GAAA,SAAA,iBAAA,GAAA;;;AAG6Bb,UAAAA,eAAAA,EAAAA,EAAAA;AAAqBC,UAAAA,OAAAA,EAAAA,SAAAA;AAAmB,SAAA,CAAA,CAAA;AACnE,OAAA;;;AAEoBD,UAAAA,eAAAA,EAAAA,EAAAA;AAAqBC,UAAAA,OAAAA,EAAAA,SAAAA;AAAmB,SAAA,CAAA,CAAA;AAC5D,OAAA;;;AAE4E,MAAA,IAAA,gBAAA,CAAA;AAAA,MAAA,IAAA,CAAA,GAAA,KAAA,CAAA,CAAA,CAAA;AAC5ElB,MAAAA,CAAAA,gBAAAA,GAAAA,MAAAA,CAAAA,QAAAA,MAAAA,IAAAA,IAAAA,gBAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,gBAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,MAAAA,CAAAA,EAAAA;AAA+Bc,QAAAA,CAAAA,EAAAA,CAAAA;AAAE,OAAA,CAAA,CAAA;;AAG7B,IAAA,IAAA,QAAA,GAAA,SAAA,QAAA,CAAA,GAAA,EAAA;;;AAEgB,QAAA,IAAA,SAAA,GAAA,0BAAA,CAAA,GAAA,IAAA,EAAA,CAAA;;AAC+B,QAAA,IAAA;;AAAA,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,KAAA,CAAA;;AAE/C,YAAA,IAAA,MAAA,EAAA;AACEiB,cAAAA,QAAAA,CAAAA,IAAAA,CAAAA,MAAAA,CAAAA,CAAAA;AACF,aAAA;AACF,WAAA;AAAA,SAAA,CAAA,OAAA,GAAA,EAAA;;AAAA,SAAA,SAAA;AAAAC,UAAAA,SAAAA,CAAAA,CAAAA,EAAAA,CAAAA;AAAA,SAAA;;AAEF,OAAA,MAAA;;AAEE,QAAA,IAAA,OAAA,EAAA;;AAEA,SAAA;AACF,OAAA;;AAGFC,IAAAA,KAAAA,CAAAA,QAAAA,EAAAA,UAAAA,GAAAA,EAAAA;AAGsBC,MAAAA,iBAAAA,EAAAA,CAAAA;AAClBC,MAAAA,QAAAA,CAAAA,YAAAA;;AAEA,OAAA,CAAA,CAAA;AACF,KAAA,EAAA;AAEEC,MAAAA,SAAAA,EAAAA,IAAAA;AACF,KAAA,CAAA,CAAA;AAEFH,IAAAA,KAAAA,CAAAA,YAAAA;;AACc,KAAA,EAAA,YAAA;AAEQC,MAAAA,iBAAAA,EAAAA,CAAAA;AACpB,KAAA,CAAA,CAAA;AAEID,IAAAA,KAAAA,CAAAA,iBAAAA,EAAAA,UAAAA,MAAAA,EAAAA;AACJ,MAAA,IAAA,MAAA,EAAA;AAEEI,QAAAA,UAAAA,CAAAA,KAAAA,GAAAA,CAAAA,CAAAA,CAAAA;AACF,OAAA,MAAA;;;AAKE,SAAA;AACF,OAAA;AACF,KAAA,CAAA,CAAA;AAGM,IAAA,IAAA,eAAA,GAAA,SAAA,eAAA,CAAA,OAAA,EAAA;AAA+C,MAAA,IAAA,qBAAA,CAAA;AAC/C,MAAA,IAAA,CAAA,cAAA,CAAA,KAAA,EAAA;AACF,QAAA,OAAA;AACF,OAAA;AACM,MAAA,IAAA,iBAAA,GAAA,CAAA,qBAAA,GAAA,cAAA,CAAA,KAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,IAAA,CAAA,qBAAA,GAAA,qBAAA,CAAA,QAAA,MAAA,IAAA,IAAA,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,aAAA,CAAA,GAAA,CAAA,MAAA,CAAA,WAAA,CAAA,KAAA,EAAA,cAAA,CAAA,CAAA,CAAA;AAINF,MAAAA,QAAAA,CAAAA,YAAAA;;AAEI,UAAA,IAAA,iBAAA,GAAA,gBAAA,CAAA,iBAAA,CAAA;;AACA,UAAA,IAAA,kBAAA,GAAA,gBAAA,CAAA,OAAA,CAAA;;AACA,UAAA,IAAA,mBAAA,GAAA,QAAA,CAAA,aAAA,EAAA,EAAA,CAAA,GAAA,QAAA,CAAA,YAAA,EAAA,EAAA,CAAA,CAAA;AAEM,UAAA,IAAA,WAAA,GAAA,iBAAA,CAAA,SAAA,GAAA,OAAA,CAAA,SAAA,IAAA,OAAA,CAAA,YAAA,GAAA,iBAAA,CAAA,YAAA,CAAA,GAAA,mBAAA,CAAA;;AAOR,SAAA;AACF,OAAA,CAAA,CAAA;;AAEFL,IAAAA,OAAAA,CAAAA,iBAAAA,EAAAA,eAAAA,CAAAA,CAAAA;AACA,IAAA,OAAA,YAAA;AACE,MAAA,IAAA,KAAA,GAAA,MAAA,CAAA,UAAA,IAAA,EAAA;;AAA6BQ,QAAAA,cAAAA,GAAAA,wBAAAA,CAAAA,KAAAA,EAAAA,SAAAA,CAAAA,CAAAA;AAC7B,MAAA,OAAAC,WAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AACgC,OAAA,EAAA,CAAAA,WAAA,CAAA,WAAA,EAAAC,UAAA,CAAA;;;;;;;;;;;;AAaV,OAAA,EAAA;AAAA,QAAA,KAAA,EAAA,cAAA;;;;;;AAO8C,QAAA,aAAA,EAAA,EAAA,CAAA,MAAA,CAAA,eAAA,CAAA,KAAA,CAAA;;;;;;;AAQ5DC,UAAAA,SAAAA,EAAAA,aAAAA;AAAW,SAAA,CAAA;AAAA,QAAA,eAAA,EAAA,aAAA,CAAA;;;AAID,QAAA,aAAA,EAAA,SAAA,WAAA,CAAA,GAAA,EAAA,GAAA,EAAA;AAGVC,UAAAA,SAAAA,CAAAA,GAAAA,CAAAA,KAAAA,CAAAA,CAAAA;;;AAEoB,QAAA,YAAA,EAAA,aAAA,CAAA;;AAEoD,SAAA,EAAA,cAAA,CAAA;;;;;AAOpE1C,UAAAA,IAAAA,MAAAA,CAAAA,UAAAA,IAAAA,KAAAA,CAAAA,UAAAA,EAAAA;;AAEJ,WAAA;AAGEA,UAAAA,OAAAA,MAAAA,CAAAA,SAAAA,IAAAA,WAAAA,CAAAA,SAAAA,EAAAA;AACE,YAAA,kBAAA,EAAA,EAAA,CAAA,MAAA,CAAA,cAAA,CAAA,KAAA,EAAA,cAAA,CAAA;AACsC,YAAA,UAAA,EAAA,iBAAA,CAAA,KAAA;;;AAM5C,QAAA,cAAA,EAAA,SAAA,YAAA,GAAA;;;AAGE,WAAA,CAAA,CAAA;AAAC,SAAA;AAAA,QAAA,sBAAA,EAAA,SAAA,oBAAA,CAAA,GAAA,EAAA,OAAA,EAAA;AAGDW,UAAAA,oBAAAA,CAAAA,GAAAA,EAAAA,OAAAA,CAAAA,CAAAA;;AAEF,QAAA,eAAA,EAAA,SAAA,aAAA,CAAA,MAAA,EAAA,OAAA,EAAA;AACE,UAAA,IAAA,MAAA,EAAA;;;AAC6D,aAAA,CAAA,CAAA;AAC7D,WAAA;;AAEAgC,UAAAA,YAAAA,CAAAA,EAAAA,CAAAA,MAAAA,CAAAA,MAAAA,CAAAA,EAAAA;;AAAyD,WAAA,CAAA,CAAA;;;AAEvC,UAAA,IAAA,eAAA,CAAA;AAAA,UAAA,IAAA,CAAA,GAAA,KAAA,CAAA,CAAA,CAAA;;AAEhBtB,YAAAA,MAAAA,EAAAA,IAAAA;;AAEAH,YAAAA,OAAAA,EAAAA,OAAAA;AACAJ,YAAAA,CAAAA,EAAAA,CAAAA;AACF,WAAA,CAAA,CAAA;AACAd,UAAAA,CAAAA,eAAAA,GAAAA,MAAAA,CAAAA,OAAAA,MAAAA,IAAAA,IAAAA,eAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AAAkBc,YAAAA,CAAAA,EAAAA,CAAAA;AAAE,WAAA,CAAA,CAAA;;;AAEU,UAAA,IAAA,eAAA,CAAA;AAAA,UAAA,IAAA,CAAA,GAAA,KAAA,CAAA,CAAA,CAAA;AAC9Bd,UAAAA,CAAAA,eAAAA,GAAAA,MAAAA,CAAAA,OAAAA,MAAAA,IAAAA,IAAAA,eAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AAAkB4C,YAAAA,UAAAA,EAAAA,EAAAA,CAAAA,MAAAA,CAAAA,eAAAA,CAAAA,KAAAA,CAAAA;AAAwC9B,YAAAA,CAAAA,EAAAA,CAAAA;;AAA2B,WAAA,CAAA,CAAA;AACxEY,UAAAA,YAAAA,EAAAA,CAAAA;;;AAEgB,UAAA,IAAA,cAAA,CAAA;AAAA,UAAA,IAAA,CAAA,GAAA,KAAA,CAAA,CAAA,CAAA;AAC7B1B,UAAAA,CAAAA,cAAAA,GAAAA,MAAAA,CAAAA,MAAAA,MAAAA,IAAAA,IAAAA,cAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,cAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AAAiBc,YAAAA,CAAAA,EAAAA,CAAAA;;AAA2B,WAAA,CAAA,CAAA;;;AAEd,UAAA,IAAA,eAAA,CAAA;AAAA,UAAA,IAAA,CAAA,GAAA,KAAA,CAAA,CAAA,CAAA;AAC9Bd,UAAAA,CAAAA,eAAAA,GAAAA,MAAAA,CAAAA,OAAAA,MAAAA,IAAAA,IAAAA,eAAAA,KAAAA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAAA,CAAAA,IAAAA,CAAAA,MAAAA,EAAAA;AAAkBc,YAAAA,CAAAA,EAAAA,CAAAA;;AAA2B,WAAA,CAAA,CAAA;AAC/C,SAAA;;;;;;AAMS,UAAA,OAAAyB,WAAA,CAAA,WAAA,EAAAC,UAAA,CAAA;;;;;AAkBH,WAAA,CAAA,EAAA,KAAA,CAAA,CAAA;;;;;AAShB,GAAA;AACF,CAAA,CAAA;;;;"}