{"version":3,"file":"useSelect.mjs","sources":["../../../../../../../packages/components/select-v2/src/useSelect.ts"],"sourcesContent":["import {\n  computed,\n  nextTick,\n  onMounted,\n  reactive,\n  ref,\n  watch,\n  watchEffect,\n} from 'vue'\nimport {\n  findLastIndex,\n  get,\n  isEqual,\n  debounce as lodashDebounce,\n} from 'lodash-unified'\nimport { useResizeObserver } from '@vueuse/core'\nimport {\n  ValidateComponentsMap,\n  debugWarn,\n  escapeStringRegexp,\n  getEventCode,\n  isArray,\n  isFunction,\n  isNumber,\n  isObject,\n  isUndefined,\n} from '@hd-front-end/utils'\nimport {\n  useComposition,\n  useEmptyValues,\n  useFocusController,\n  useLocale,\n  useNamespace,\n} from '@hd-front-end/hooks'\nimport {\n  CHANGE_EVENT,\n  EVENT_CODE,\n  MINIMUM_INPUT_WIDTH,\n  UPDATE_MODEL_EVENT,\n} from '@hd-front-end/constants'\nimport {\n  useFormItem,\n  useFormItemInputId,\n  useFormSize,\n} from '@hd-front-end/components/form'\nimport { useAllowCreate } from './useAllowCreate'\nimport { useProps } from './useProps'\n\nimport type { Option, OptionType, SelectStates } from './select.types'\nimport type { SelectV2Props } from './token'\nimport type { SelectV2EmitFn } from './defaults'\nimport type { TooltipInstance } from '@hd-front-end/components/tooltip'\nimport type { SelectDropdownInstance } from './select-dropdown'\n\nconst useSelect = (props: SelectV2Props, emit: SelectV2EmitFn) => {\n  // inject\n  const { t } = useLocale()\n  const nsSelect = useNamespace('select')\n  const nsInput = useNamespace('input')\n  const { form: elForm, formItem: elFormItem } = useFormItem()\n  const { inputId } = useFormItemInputId(props, {\n    formItemContext: elFormItem,\n  })\n  const { aliasProps, getLabel, getValue, getDisabled, getOptions } =\n    useProps(props)\n  const { valueOnClear, isEmptyValue } = useEmptyValues(props)\n\n  const states: SelectStates = reactive({\n    inputValue: '',\n    cachedOptions: [],\n    createdOptions: [],\n    hoveringIndex: -1,\n    inputHovering: false,\n    selectionWidth: 0,\n    collapseItemWidth: 0,\n    previousQuery: null,\n    previousValue: undefined,\n    selectedLabel: '',\n    menuVisibleOnFocus: false,\n    isBeforeHide: false,\n  })\n\n  // data refs\n  const popperSize = ref(-1)\n\n  // DOM & Component refs\n  const selectRef = ref<HTMLElement>()\n  const selectionRef = ref<HTMLElement>()\n  const tooltipRef = ref<TooltipInstance>()\n  const tagTooltipRef = ref<TooltipInstance>()\n  const inputRef = ref<HTMLElement>()\n  const prefixRef = ref<HTMLElement>()\n  const suffixRef = ref<HTMLElement>()\n  const menuRef = ref<SelectDropdownInstance>()\n  const tagMenuRef = ref<HTMLElement>()\n  const collapseItemRef = ref<HTMLElement>()\n\n  const {\n    isComposing,\n    handleCompositionStart,\n    handleCompositionEnd,\n    handleCompositionUpdate,\n  } = useComposition({\n    afterComposition: (e) => onInput(e),\n  })\n\n  const selectDisabled = computed(() => props.disabled || !!elForm?.disabled)\n\n  const { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, {\n    disabled: selectDisabled,\n    afterFocus() {\n      if (props.automaticDropdown && !expanded.value) {\n        expanded.value = true\n        states.menuVisibleOnFocus = true\n      }\n    },\n    beforeBlur(event) {\n      return (\n        tooltipRef.value?.isFocusInsideContent(event) ||\n        tagTooltipRef.value?.isFocusInsideContent(event)\n      )\n    },\n    afterBlur() {\n      expanded.value = false\n      states.menuVisibleOnFocus = false\n      if (props.validateEvent) {\n        elFormItem?.validate?.('blur').catch((err) => debugWarn(err))\n      }\n    },\n  })\n\n  const allOptions = computed(() => filterOptions(''))\n\n  const hasOptions = computed(() => {\n    if (props.loading) return false\n    return props.options.length > 0 || states.createdOptions.length > 0\n  })\n\n  const filteredOptions = ref<OptionType[]>([])\n  // the controller of the expanded popup\n  const expanded = ref(false)\n\n  const needStatusIcon = computed(() => elForm?.statusIcon ?? false)\n\n  const popupHeight = computed(() => {\n    const totalHeight = filteredOptions.value.length * props.itemHeight\n    return totalHeight > props.height ? props.height : totalHeight\n  })\n\n  const hasModelValue = computed(() => {\n    return props.multiple\n      ? isArray(props.modelValue) && props.modelValue.length > 0\n      : !isEmptyValue(props.modelValue)\n  })\n\n  const showClearBtn = computed(() => {\n    return (\n      props.clearable &&\n      !selectDisabled.value &&\n      hasModelValue.value &&\n      (isFocused.value || states.inputHovering)\n    )\n  })\n\n  const iconComponent = computed(() =>\n    props.remote && props.filterable ? '' : props.suffixIcon\n  )\n\n  const iconReverse = computed(\n    () => iconComponent.value && nsSelect.is('reverse', expanded.value)\n  )\n\n  const validateState = computed(() => elFormItem?.validateState || '')\n  const validateIcon = computed(() => {\n    // When we use indexed access to get the type of an undeclared property,\n    // the unsafe type `any` will be inferred, which TypeScript throws an error to emphasize it.\n    // To avoid TypeScript complaining about it, we use truthiness narrowing to narrow the type of validateState.\n    if (!validateState.value) return\n    return ValidateComponentsMap[validateState.value]\n  })\n\n  const debounce = computed(() => (props.remote ? 300 : 0))\n\n  // filteredOptions includes flatten the data into one dimensional array.\n  const emptyText = computed(() => {\n    if (props.loading) {\n      return props.loadingText || t('el.select.loading')\n    } else {\n      if (props.remote && !states.inputValue && !hasOptions.value) return false\n      if (\n        props.filterable &&\n        states.inputValue &&\n        hasOptions.value &&\n        filteredOptions.value.length === 0\n      ) {\n        return props.noMatchText || t('el.select.noMatch')\n      }\n      if (!hasOptions.value) {\n        return props.noDataText || t('el.select.noData')\n      }\n    }\n    return null\n  })\n\n  const isFilterMethodValid = computed(\n    () => props.filterable && isFunction(props.filterMethod)\n  )\n  const isRemoteMethodValid = computed(\n    () => props.filterable && props.remote && isFunction(props.remoteMethod)\n  )\n\n  const filterOptions = (query: string) => {\n    const regexp = new RegExp(escapeStringRegexp(query), 'i')\n\n    const isValidOption = (o: Option): boolean => {\n      if (isFilterMethodValid.value || isRemoteMethodValid.value) return true\n      // when query was given, we should test on the label see whether the label contains the given query\n      return query ? regexp.test(getLabel(o) || '') : true\n    }\n    if (props.loading) {\n      return []\n    }\n\n    return [...states.createdOptions, ...props.options].reduce((all, item) => {\n      const options = getOptions(item)\n\n      if (isArray(options)) {\n        const filtered = options.filter(isValidOption)\n\n        if (filtered.length > 0) {\n          all.push(\n            {\n              label: getLabel(item),\n              type: 'Group',\n            },\n            ...filtered\n          )\n        }\n      } else if (props.remote || isValidOption(item)) {\n        all.push(item)\n      }\n\n      return all\n    }, []) as OptionType[]\n  }\n\n  const updateOptions = () => {\n    filteredOptions.value = filterOptions(states.inputValue)\n  }\n\n  const allOptionsValueMap = computed(() => {\n    const valueMap = new Map()\n\n    allOptions.value.forEach((option, index) => {\n      valueMap.set(getValueKey(getValue(option)), { option, index })\n    })\n    return valueMap\n  })\n\n  const filteredOptionsValueMap = computed(() => {\n    const valueMap = new Map()\n\n    filteredOptions.value.forEach((option, index) => {\n      valueMap.set(getValueKey(getValue(option)), { option, index })\n    })\n    return valueMap\n  })\n\n  const optionsAllDisabled = computed(() =>\n    filteredOptions.value.every((option) => getDisabled(option))\n  )\n\n  const selectSize = useFormSize()\n\n  const collapseTagSize = computed(() =>\n    'small' === selectSize.value ? 'small' : 'default'\n  )\n\n  const calculatePopperSize = () => {\n    if (isNumber(props.fitInputWidth)) {\n      popperSize.value = props.fitInputWidth\n      return\n    }\n    const width = selectRef.value?.offsetWidth || 200\n    if (!props.fitInputWidth && hasOptions.value) {\n      nextTick(() => {\n        popperSize.value = Math.max(width, calculateLabelMaxWidth())\n      })\n    } else {\n      popperSize.value = width\n    }\n  }\n\n  // TODO Caching implementation\n  // 1. There is no need to calculate options that have already been calculated\n  // 2. Repeatedly expand and close when persistent is set to false, no need for repeated calculations\n  const calculateLabelMaxWidth = () => {\n    const canvas = document.createElement('canvas')\n    const ctx = canvas.getContext('2d')\n    const selector = nsSelect.be('dropdown', 'item')\n    const dom = menuRef.value?.listRef?.innerRef || document\n    const dropdownItemEl = dom.querySelector(`.${selector}`)\n    if (dropdownItemEl === null || ctx === null) return 0\n    const style = getComputedStyle(dropdownItemEl)\n    const padding =\n      Number.parseFloat(style.paddingLeft) +\n      Number.parseFloat(style.paddingRight)\n    ctx.font = `bold ${style.font.replace(\n      new RegExp(`\\\\b${style.fontWeight}\\\\b`),\n      ''\n    )}`\n    const maxWidth = filteredOptions.value.reduce((max, option) => {\n      const metrics = ctx.measureText(getLabel(option))\n      return Math.max(metrics.width, max)\n    }, 0)\n    return maxWidth + padding\n  }\n\n  const getGapWidth = () => {\n    if (!selectionRef.value) return 0\n    const style = window.getComputedStyle(selectionRef.value)\n    return Number.parseFloat(style.gap || '6px')\n  }\n\n  // computed style\n  const tagStyle = computed(() => {\n    const gapWidth = getGapWidth()\n    const inputSlotWidth = props.filterable ? gapWidth + MINIMUM_INPUT_WIDTH : 0\n    const maxWidth =\n      collapseItemRef.value && props.maxCollapseTags === 1\n        ? states.selectionWidth -\n          states.collapseItemWidth -\n          gapWidth -\n          inputSlotWidth\n        : states.selectionWidth - inputSlotWidth\n    return { maxWidth: `${maxWidth}px` }\n  })\n\n  const collapseTagStyle = computed(() => {\n    return { maxWidth: `${states.selectionWidth}px` }\n  })\n\n  const shouldShowPlaceholder = computed(() => {\n    if (isArray(props.modelValue)) {\n      return props.modelValue.length === 0 && !states.inputValue\n    }\n\n    // when it's not multiple mode, we only determine this flag based on filterable and expanded\n    // when filterable flag is true, which means we have input box on the screen\n    return props.filterable ? !states.inputValue : true\n  })\n\n  const currentPlaceholder = computed(() => {\n    const _placeholder = props.placeholder ?? t('el.select.placeholder')\n    return props.multiple || !hasModelValue.value\n      ? _placeholder\n      : states.selectedLabel\n  })\n\n  // this obtains the actual popper DOM element.\n  const popperRef = computed(() => tooltipRef.value?.popperRef?.contentRef)\n\n  // the index with current value in options\n  const indexRef = computed<number>(() => {\n    if (props.multiple) {\n      const len = (props.modelValue as []).length\n      if (\n        (props.modelValue as Array<any>).length > 0 &&\n        filteredOptionsValueMap.value.has(props.modelValue[len - 1])\n      ) {\n        const { index } = filteredOptionsValueMap.value.get(\n          props.modelValue[len - 1]\n        )\n        return index\n      }\n    } else {\n      if (\n        !isEmptyValue(props.modelValue) &&\n        filteredOptionsValueMap.value.has(props.modelValue)\n      ) {\n        const { index } = filteredOptionsValueMap.value.get(props.modelValue)\n        return index\n      }\n    }\n    return -1\n  })\n\n  const dropdownMenuVisible = computed({\n    get() {\n      return expanded.value && emptyText.value !== false\n    },\n    set(val: boolean) {\n      expanded.value = val\n    },\n  })\n\n  const showTagList = computed(() => {\n    if (!props.multiple) {\n      return []\n    }\n    return props.collapseTags\n      ? states.cachedOptions.slice(0, props.maxCollapseTags)\n      : states.cachedOptions\n  })\n\n  const collapseTagList = computed(() => {\n    if (!props.multiple) {\n      return []\n    }\n    return props.collapseTags\n      ? states.cachedOptions.slice(props.maxCollapseTags)\n      : []\n  })\n\n  // hooks\n  const {\n    createNewOption,\n    removeNewOption,\n    selectNewOption,\n    clearAllNewOption,\n  } = useAllowCreate(props, states)\n\n  // methods\n  const toggleMenu = () => {\n    if (selectDisabled.value) return\n\n    if (states.menuVisibleOnFocus) {\n      // controlled by automaticDropdown\n      states.menuVisibleOnFocus = false\n    } else {\n      expanded.value = !expanded.value\n    }\n  }\n\n  const onInputChange = () => {\n    if (states.inputValue.length > 0 && !expanded.value) {\n      expanded.value = true\n    }\n    createNewOption(states.inputValue)\n    nextTick(() => {\n      handleQueryChange(states.inputValue)\n    })\n  }\n\n  const debouncedOnInputChange = lodashDebounce(onInputChange, debounce.value)\n\n  const handleQueryChange = (val: string) => {\n    if (states.previousQuery === val || isComposing.value) {\n      return\n    }\n    states.previousQuery = val\n    if (props.filterable && isFunction(props.filterMethod)) {\n      props.filterMethod(val)\n    } else if (\n      props.filterable &&\n      props.remote &&\n      isFunction(props.remoteMethod)\n    ) {\n      props.remoteMethod(val)\n    }\n    if (\n      props.defaultFirstOption &&\n      (props.filterable || props.remote) &&\n      filteredOptions.value.length\n    ) {\n      nextTick(checkDefaultFirstOption)\n    } else {\n      nextTick(updateHoveringIndex)\n    }\n  }\n\n  /**\n   * find and highlight first option as default selected\n   * @remark\n   * - if the first option in dropdown list is user-created,\n   *   it would be at the end of the optionsArray\n   *   so find it and set hover.\n   *   (NOTE: there must be only one user-created option in dropdown list with query)\n   * - if there's no user-created option in list, just find the first one as usual\n   *   (NOTE: exclude options that are disabled or in disabled-group)\n   */\n  const checkDefaultFirstOption = () => {\n    const optionsInDropdown = filteredOptions.value.filter(\n      (n) => !n.disabled && n.type !== 'Group'\n    )\n    const userCreatedOption = optionsInDropdown.find((n) => n.created)\n    const firstOriginOption = optionsInDropdown[0]\n    states.hoveringIndex = getValueIndex(\n      filteredOptions.value,\n      userCreatedOption || firstOriginOption\n    )\n  }\n\n  const emitChange = (val: any | any[]) => {\n    if (!isEqual(props.modelValue, val)) {\n      emit(CHANGE_EVENT, val)\n    }\n  }\n\n  const update = (val: any) => {\n    emit(UPDATE_MODEL_EVENT, val)\n    emitChange(val)\n    states.previousValue = props.multiple ? String(val) : val\n\n    nextTick(() => {\n      if (props.multiple && isArray(props.modelValue)) {\n        const cachedOptions = states.cachedOptions.slice()\n        const selectedOptions = props.modelValue.map((value) =>\n          getOption(value, cachedOptions)\n        )\n\n        if (!isEqual(states.cachedOptions, selectedOptions)) {\n          states.cachedOptions = selectedOptions\n        }\n      } else {\n        initStates(true)\n      }\n    })\n  }\n\n  const getValueIndex = (arr: unknown[] = [], value: unknown) => {\n    if (!isObject(value)) {\n      return arr.indexOf(value)\n    }\n    const valueKey = props.valueKey\n    let index = -1\n    arr.some((item, i) => {\n      if (get(item, valueKey) === get(value, valueKey)) {\n        index = i\n        return true\n      }\n      return false\n    })\n    return index\n  }\n\n  const getValueKey = (item: unknown) => {\n    return isObject(item) ? get(item, props.valueKey) : item\n  }\n\n  const handleResize = () => {\n    calculatePopperSize()\n  }\n\n  const resetSelectionWidth = () => {\n    states.selectionWidth = Number.parseFloat(\n      window.getComputedStyle(selectionRef.value!).width\n    )\n  }\n\n  const resetCollapseItemWidth = () => {\n    states.collapseItemWidth =\n      collapseItemRef.value!.getBoundingClientRect().width\n  }\n\n  const updateTooltip = () => {\n    tooltipRef.value?.updatePopper?.()\n  }\n\n  const updateTagTooltip = () => {\n    tagTooltipRef.value?.updatePopper?.()\n  }\n\n  const onSelect = (option: Option) => {\n    const optionValue = getValue(option)\n\n    if (props.multiple) {\n      let selectedOptions = (props.modelValue as any[]).slice()\n\n      const index = getValueIndex(selectedOptions, optionValue)\n      if (index > -1) {\n        selectedOptions = [\n          ...selectedOptions.slice(0, index),\n          ...selectedOptions.slice(index + 1),\n        ]\n        states.cachedOptions.splice(index, 1)\n        removeNewOption(option)\n      } else if (\n        props.multipleLimit <= 0 ||\n        selectedOptions.length < props.multipleLimit\n      ) {\n        selectedOptions = [...selectedOptions, optionValue]\n        states.cachedOptions.push(option)\n        selectNewOption(option)\n      }\n      update(selectedOptions)\n      if (option.created) {\n        handleQueryChange('')\n      }\n      if (props.filterable && !props.reserveKeyword) {\n        states.inputValue = ''\n      }\n    } else {\n      states.selectedLabel = getLabel(option)\n      !isEqual(props.modelValue, optionValue) && update(optionValue)\n      expanded.value = false\n      selectNewOption(option)\n      if (!option.created) {\n        clearAllNewOption()\n      }\n    }\n    focus()\n  }\n\n  const deleteTag = (event: MouseEvent, option: Option) => {\n    let selectedOptions = (props.modelValue as any[]).slice()\n\n    const index = getValueIndex(selectedOptions, getValue(option))\n\n    if (index > -1 && !selectDisabled.value) {\n      selectedOptions = [\n        ...(props.modelValue as Array<unknown>).slice(0, index),\n        ...(props.modelValue as Array<unknown>).slice(index + 1),\n      ]\n      states.cachedOptions.splice(index, 1)\n      update(selectedOptions)\n      emit('remove-tag', getValue(option))\n      removeNewOption(option)\n    }\n    event.stopPropagation()\n    focus()\n  }\n\n  const focus = () => {\n    inputRef.value?.focus()\n  }\n\n  const blur = () => {\n    if (expanded.value) {\n      expanded.value = false\n      nextTick(() => inputRef.value?.blur())\n      return\n    }\n    inputRef.value?.blur()\n  }\n\n  // keyboard handlers\n  const handleEsc = () => {\n    if (states.inputValue.length > 0) {\n      states.inputValue = ''\n    } else {\n      expanded.value = false\n    }\n  }\n\n  const getLastNotDisabledIndex = (value: unknown[]) =>\n    findLastIndex(\n      value,\n      (it) =>\n        !states.cachedOptions.some(\n          (option) => getValue(option) === it && getDisabled(option)\n        )\n    )\n\n  const handleDel = (e: KeyboardEvent) => {\n    const code = getEventCode(e)\n    if (!props.multiple) return\n    if (code === EVENT_CODE.delete) return\n    if (states.inputValue.length === 0) {\n      e.preventDefault()\n      const selected = (props.modelValue as Array<any>).slice()\n      const lastNotDisabledIndex = getLastNotDisabledIndex(selected)\n      if (lastNotDisabledIndex < 0) return\n      const removeTagValue = selected[lastNotDisabledIndex]\n      selected.splice(lastNotDisabledIndex, 1)\n      const option = states.cachedOptions[lastNotDisabledIndex]\n      states.cachedOptions.splice(lastNotDisabledIndex, 1)\n      removeNewOption(option)\n      update(selected)\n      emit('remove-tag', removeTagValue)\n    }\n  }\n\n  const handleClear = () => {\n    let emptyValue: string | any[]\n    if (isArray(props.modelValue)) {\n      emptyValue = []\n    } else {\n      emptyValue = valueOnClear.value\n    }\n\n    states.selectedLabel = ''\n\n    expanded.value = false\n    update(emptyValue)\n    emit('clear')\n    clearAllNewOption()\n    focus()\n  }\n\n  const onKeyboardNavigate = (\n    direction: 'forward' | 'backward',\n    hoveringIndex: number | undefined = undefined\n  ): void => {\n    const options = filteredOptions.value\n    if (\n      !['forward', 'backward'].includes(direction) ||\n      selectDisabled.value ||\n      options.length <= 0 ||\n      optionsAllDisabled.value ||\n      isComposing.value\n    ) {\n      return\n    }\n    if (!expanded.value) {\n      return toggleMenu()\n    }\n    if (isUndefined(hoveringIndex)) {\n      hoveringIndex = states.hoveringIndex\n    }\n    let newIndex = -1\n    if (direction === 'forward') {\n      newIndex = hoveringIndex + 1\n      if (newIndex >= options.length) {\n        // return to the first option\n        newIndex = 0\n      }\n    } else if (direction === 'backward') {\n      newIndex = hoveringIndex - 1\n      if (newIndex < 0 || newIndex >= options.length) {\n        // navigate to the last one\n        newIndex = options.length - 1\n      }\n    }\n    const option = options[newIndex]\n    if (getDisabled(option) || option.type === 'Group') {\n      // prevent dispatching multiple nextTick callbacks.\n      return onKeyboardNavigate(direction, newIndex)\n    } else {\n      states.hoveringIndex = newIndex\n      scrollToItem(newIndex)\n    }\n  }\n\n  const onKeyboardSelect = () => {\n    if (!expanded.value) {\n      return toggleMenu()\n    } else if (\n      ~states.hoveringIndex &&\n      filteredOptions.value[states.hoveringIndex]\n    ) {\n      onSelect(filteredOptions.value[states.hoveringIndex])\n    }\n  }\n\n  const onHoverOption = (idx?: number) => {\n    states.hoveringIndex = idx ?? -1\n  }\n\n  const updateHoveringIndex = () => {\n    if (!props.multiple) {\n      states.hoveringIndex = filteredOptions.value.findIndex((item) => {\n        return getValueKey(getValue(item)) === getValueKey(props.modelValue)\n      })\n    } else {\n      states.hoveringIndex = filteredOptions.value.findIndex((item) =>\n        props.modelValue.some(\n          (modelValue: unknown) =>\n            getValueKey(modelValue) === getValueKey(getValue(item))\n        )\n      )\n    }\n  }\n\n  const onInput = (event: Event) => {\n    states.inputValue = (event.target as HTMLInputElement).value\n    if (props.remote) {\n      debouncedOnInputChange()\n    } else {\n      return onInputChange()\n    }\n  }\n\n  const handleClickOutside = (event: Event) => {\n    expanded.value = false\n\n    if (isFocused.value) {\n      const _event = new FocusEvent('blur', event)\n      handleBlur(_event)\n    }\n  }\n\n  const handleMenuEnter = () => {\n    states.isBeforeHide = false\n    return nextTick(() => {\n      if (~indexRef.value) {\n        scrollToItem(states.hoveringIndex)\n      }\n    })\n  }\n\n  const scrollToItem = (index: number) => {\n    menuRef.value!.scrollToItem(index)\n  }\n\n  const getOption = (value: unknown, cachedOptions?: Option[]) => {\n    // match the option with the given value, if not found, create a new option\n    const selectValue = getValueKey(value)\n\n    if (allOptionsValueMap.value.has(selectValue)) {\n      const { option } = allOptionsValueMap.value.get(selectValue)\n\n      return option\n    }\n    if (cachedOptions && cachedOptions.length) {\n      const option = cachedOptions.find(\n        (option) => getValueKey(getValue(option)) === selectValue\n      )\n      if (option) {\n        return option\n      }\n    }\n\n    return {\n      [aliasProps.value.value]: value,\n      [aliasProps.value.label]: value,\n    }\n  }\n\n  const getIndex = (option: Option) =>\n    allOptionsValueMap.value.get(getValue(option))?.index ?? -1\n\n  const initStates = (needUpdateSelectedLabel = false) => {\n    if (props.multiple) {\n      if ((props.modelValue as Array<any>).length > 0) {\n        const cachedOptions = states.cachedOptions.slice()\n        states.cachedOptions.length = 0\n        states.previousValue = props.modelValue.toString()\n\n        for (const value of props.modelValue) {\n          const option = getOption(value, cachedOptions)\n          states.cachedOptions.push(option)\n        }\n      } else {\n        states.cachedOptions = []\n        states.previousValue = undefined\n      }\n    } else {\n      if (hasModelValue.value) {\n        states.previousValue = props.modelValue\n        const options = filteredOptions.value\n        const selectedItemIndex = options.findIndex(\n          (option) =>\n            getValueKey(getValue(option)) === getValueKey(props.modelValue)\n        )\n        if (~selectedItemIndex) {\n          states.selectedLabel = getLabel(options[selectedItemIndex])\n        } else {\n          if (!states.selectedLabel || needUpdateSelectedLabel) {\n            states.selectedLabel = getValueKey(props.modelValue)\n          }\n        }\n      } else {\n        states.selectedLabel = ''\n        states.previousValue = undefined\n      }\n    }\n    clearAllNewOption()\n    calculatePopperSize()\n  }\n\n  watch(\n    () => props.fitInputWidth,\n    () => {\n      calculatePopperSize()\n    }\n  )\n\n  // in order to track these individually, we need to turn them into refs instead of watching the entire\n  // reactive object which could cause perf penalty when unnecessary field gets changed the watch method will\n  // be invoked.\n\n  watch(expanded, (val) => {\n    if (val) {\n      if (!props.persistent) {\n        calculatePopperSize()\n      }\n      handleQueryChange('')\n    } else {\n      states.inputValue = ''\n      states.previousQuery = null\n      states.isBeforeHide = true\n      createNewOption('')\n    }\n    emit('visible-change', val)\n  })\n\n  watch(\n    () => props.modelValue,\n    (val, oldVal) => {\n      const isValEmpty = !val || (isArray(val) && val.length === 0)\n\n      if (\n        isValEmpty ||\n        (props.multiple && !isEqual(val.toString(), states.previousValue)) ||\n        (!props.multiple &&\n          getValueKey(val) !== getValueKey(states.previousValue))\n      ) {\n        initStates(true)\n      }\n      if (!isEqual(val, oldVal) && props.validateEvent) {\n        elFormItem?.validate?.('change').catch((err) => debugWarn(err))\n      }\n    },\n    {\n      deep: true,\n    }\n  )\n\n  watch(\n    () => props.options,\n    () => {\n      const input = inputRef.value\n      // filter or remote-search scenarios are not initialized\n      if (!input || (input && document.activeElement !== input)) {\n        initStates()\n      }\n    },\n    {\n      deep: true,\n      flush: 'post',\n    }\n  )\n\n  // fix the problem that scrollTop is not reset in filterable mode\n  watch(\n    () => filteredOptions.value,\n    () => {\n      calculatePopperSize()\n      return menuRef.value && nextTick(menuRef.value.resetScrollTop)\n    }\n  )\n\n  watchEffect(() => {\n    // Anything could cause options changed, then update options\n    // If you want to control it by condition, write here\n    if (states.isBeforeHide) return\n    updateOptions()\n  })\n\n  watchEffect(() => {\n    const { valueKey, options } = props\n    const duplicateValue = new Map()\n    for (const item of options) {\n      const optionValue = getValue(item)\n      let v = optionValue\n      if (isObject(v)) {\n        v = get(optionValue, valueKey)\n      }\n      if (duplicateValue.get(v)) {\n        debugWarn(\n          'ElSelectV2',\n          `The option values you provided seem to be duplicated, which may cause some problems, please check.`\n        )\n        break\n      } else {\n        duplicateValue.set(v, true)\n      }\n    }\n  })\n\n  onMounted(() => {\n    initStates()\n  })\n  useResizeObserver(selectRef, handleResize)\n  useResizeObserver(selectionRef, resetSelectionWidth)\n  useResizeObserver(menuRef, updateTooltip)\n  useResizeObserver(wrapperRef, updateTooltip)\n  useResizeObserver(tagMenuRef, updateTagTooltip)\n  useResizeObserver(collapseItemRef, resetCollapseItemWidth)\n\n  return {\n    // data exports\n    inputId,\n    collapseTagSize,\n    currentPlaceholder,\n    expanded,\n    emptyText,\n    popupHeight,\n    debounce,\n    allOptions,\n    allOptionsValueMap,\n    filteredOptions,\n    iconComponent,\n    iconReverse,\n    tagStyle,\n    collapseTagStyle,\n    popperSize,\n    dropdownMenuVisible,\n    hasModelValue,\n    shouldShowPlaceholder,\n    selectDisabled,\n    selectSize,\n    needStatusIcon,\n    showClearBtn,\n    states,\n    isFocused,\n    nsSelect,\n    nsInput,\n\n    // refs items exports\n    inputRef,\n    menuRef,\n    tagMenuRef,\n    tooltipRef,\n    tagTooltipRef,\n    selectRef,\n    wrapperRef,\n    selectionRef,\n    prefixRef,\n    suffixRef,\n    collapseItemRef,\n\n    popperRef,\n\n    validateState,\n    validateIcon,\n    showTagList,\n    collapseTagList,\n\n    // methods exports\n    debouncedOnInputChange,\n    deleteTag,\n    getLabel,\n    getValue,\n    getDisabled,\n    getValueKey,\n    getIndex,\n    handleClear,\n    handleClickOutside,\n    handleDel,\n    handleEsc,\n    focus,\n    blur,\n    handleMenuEnter,\n    handleResize,\n    resetSelectionWidth,\n    updateTooltip,\n    updateTagTooltip,\n    updateOptions,\n    toggleMenu,\n    scrollTo: scrollToItem,\n    onInput,\n    onKeyboardNavigate,\n    onKeyboardSelect,\n    onSelect,\n    onHover: onHoverOption,\n    handleCompositionStart,\n    handleCompositionEnd,\n    handleCompositionUpdate,\n  }\n}\n\nexport default useSelect\n"],"names":["debounce","lodashDebounce","_a","option"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAsDM,MAAA,SAAA,GAAY,CAAC,KAAA,EAAsB,IAAyB,KAAA;AAEhE,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,SAAU,EAAA,CAAA;AACxB,EAAM,MAAA,QAAA,GAAW,aAAa,QAAQ,CAAA,CAAA;AACtC,EAAM,MAAA,OAAA,GAAU,aAAa,OAAO,CAAA,CAAA;AACpC,EAAA,MAAM,EAAE,IAAM,EAAA,MAAA,EAAQ,QAAU,EAAA,UAAA,KAAe,WAAY,EAAA,CAAA;AAC3D,EAAA,MAAM,EAAE,OAAA,EAAY,GAAA,kBAAA,CAAmB,KAAO,EAAA;AAAA,IAC5C,eAAiB,EAAA,UAAA;AAAA,GAClB,CAAA,CAAA;AACD,EAAM,MAAA,EAAE,YAAY,QAAU,EAAA,QAAA,EAAU,aAAa,UAAW,EAAA,GAC9D,SAAS,KAAK,CAAA,CAAA;AAChB,EAAA,MAAM,EAAE,YAAA,EAAc,YAAa,EAAA,GAAI,eAAe,KAAK,CAAA,CAAA;AAE3D,EAAA,MAAM,SAAuB,QAAS,CAAA;AAAA,IACpC,UAAY,EAAA,EAAA;AAAA,IACZ,eAAe,EAAC;AAAA,IAChB,gBAAgB,EAAC;AAAA,IACjB,aAAe,EAAA,CAAA,CAAA;AAAA,IACf,aAAe,EAAA,KAAA;AAAA,IACf,cAAgB,EAAA,CAAA;AAAA,IAChB,iBAAmB,EAAA,CAAA;AAAA,IACnB,aAAe,EAAA,IAAA;AAAA,IACf,aAAe,EAAA,KAAA,CAAA;AAAA,IACf,aAAe,EAAA,EAAA;AAAA,IACf,kBAAoB,EAAA,KAAA;AAAA,IACpB,YAAc,EAAA,KAAA;AAAA,GACf,CAAA,CAAA;AAGD,EAAM,MAAA,UAAA,GAAa,IAAI,CAAE,CAAA,CAAA,CAAA;AAGzB,EAAA,MAAM,YAAY,GAAiB,EAAA,CAAA;AACnC,EAAA,MAAM,eAAe,GAAiB,EAAA,CAAA;AACtC,EAAA,MAAM,aAAa,GAAqB,EAAA,CAAA;AACxC,EAAA,MAAM,gBAAgB,GAAqB,EAAA,CAAA;AAC3C,EAAA,MAAM,WAAW,GAAiB,EAAA,CAAA;AAClC,EAAA,MAAM,YAAY,GAAiB,EAAA,CAAA;AACnC,EAAA,MAAM,YAAY,GAAiB,EAAA,CAAA;AACnC,EAAA,MAAM,UAAU,GAA4B,EAAA,CAAA;AAC5C,EAAA,MAAM,aAAa,GAAiB,EAAA,CAAA;AACpC,EAAA,MAAM,kBAAkB,GAAiB,EAAA,CAAA;AAEzC,EAAM,MAAA;AAAA,IACJ,WAAA;AAAA,IACA,sBAAA;AAAA,IACA,oBAAA;AAAA,IACA,uBAAA;AAAA,MACE,cAAe,CAAA;AAAA,IACjB,gBAAkB,EAAA,CAAC,CAAM,KAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,GACnC,CAAA,CAAA;AAED,EAAM,MAAA,cAAA,GAAiB,SAAS,MAAM,KAAA,CAAM,YAAY,CAAC,EAAC,iCAAQ,QAAQ,CAAA,CAAA,CAAA;AAE1E,EAAA,MAAM,EAAE,UAAY,EAAA,SAAA,EAAW,UAAW,EAAA,GAAI,mBAAmB,QAAU,EAAA;AAAA,IACzE,QAAU,EAAA,cAAA;AAAA,IACV,UAAa,GAAA;AACX,MAAA,IAAI,KAAM,CAAA,iBAAA,IAAqB,CAAC,QAAA,CAAS,KAAO,EAAA;AAC9C,QAAA,QAAA,CAAS,KAAQ,GAAA,IAAA,CAAA;AACjB,QAAA,MAAA,CAAO,kBAAqB,GAAA,IAAA,CAAA;AAAA,OAC9B;AAAA,KACF;AAAA,IACA,WAAW,KAAO,EAAA;AApHtB,MAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAqHM,MACE,OAAA,CAAA,CAAA,EAAA,GAAA,UAAA,CAAW,UAAX,IAAkB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,oBAAA,CAAqB,aACvC,EAAc,GAAA,aAAA,CAAA,KAAA,KAAd,mBAAqB,oBAAqB,CAAA,KAAA,CAAA,CAAA,CAAA;AAAA,KAE9C;AAAA,IACA,SAAY,GAAA;AA1HhB,MAAA,IAAA,EAAA,CAAA;AA2HM,MAAA,QAAA,CAAS,KAAQ,GAAA,KAAA,CAAA;AACjB,MAAA,MAAA,CAAO,kBAAqB,GAAA,KAAA,CAAA;AAC5B,MAAA,IAAI,MAAM,aAAe,EAAA;AACvB,QAAA,CAAA,EAAA,GAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,aAAZ,IAAuB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,UAAA,EAAA,MAAA,CAAA,CAAQ,MAAM,CAAC,GAAA,KAAQ,UAAa,CAAA,CAAA,CAAA;AAAA,OAC7D;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AAED,EAAA,MAAM,UAAa,GAAA,QAAA,CAAS,MAAM,aAAA,CAAc,EAAE,CAAC,CAAA,CAAA;AAEnD,EAAM,MAAA,UAAA,GAAa,SAAS,MAAM;AAChC,IAAA,IAAI,KAAM,CAAA,OAAA;AAAS,MAAO,OAAA,KAAA,CAAA;AAC1B,IAAA,OAAO,MAAM,OAAQ,CAAA,MAAA,GAAS,CAAK,IAAA,MAAA,CAAO,eAAe,MAAS,GAAA,CAAA,CAAA;AAAA,GACnE,CAAA,CAAA;AAED,EAAM,MAAA,eAAA,GAAkB,GAAkB,CAAA,EAAE,CAAA,CAAA;AAE5C,EAAM,MAAA,QAAA,GAAW,IAAI,KAAK,CAAA,CAAA;AAE1B,EAAM,MAAA,cAAA,GAAiB,SAAS,MAAG;AA9IrC,IAAA,IAAA,EAAA,CAAA;AA8IwC,IAAA,OAAA,CAAA,EAAA,GAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAQ,eAAR,IAAsB,GAAA,EAAA,GAAA,KAAA,CAAA;AAAA,GAAK,CAAA,CAAA;AAEjE,EAAM,MAAA,WAAA,GAAc,SAAS,MAAM;AACjC,IAAA,MAAM,WAAc,GAAA,eAAA,CAAgB,KAAM,CAAA,MAAA,GAAS,KAAM,CAAA,UAAA,CAAA;AACzD,IAAA,OAAO,WAAc,GAAA,KAAA,CAAM,MAAS,GAAA,KAAA,CAAM,MAAS,GAAA,WAAA,CAAA;AAAA,GACpD,CAAA,CAAA;AAED,EAAM,MAAA,aAAA,GAAgB,SAAS,MAAM;AACnC,IAAA,OAAO,KAAM,CAAA,QAAA,GACT,OAAQ,CAAA,KAAA,CAAM,UAAU,CAAA,IAAK,KAAM,CAAA,UAAA,CAAW,MAAS,GAAA,CAAA,GACvD,CAAC,YAAA,CAAa,MAAM,UAAU,CAAA,CAAA;AAAA,GACnC,CAAA,CAAA;AAED,EAAM,MAAA,YAAA,GAAe,SAAS,MAAM;AAClC,IACE,OAAA,KAAA,CAAM,aACN,CAAC,cAAA,CAAe,SAChB,aAAc,CAAA,KAAA,KACb,SAAU,CAAA,KAAA,IAAS,MAAO,CAAA,aAAA,CAAA,CAAA;AAAA,GAE9B,CAAA,CAAA;AAED,EAAA,MAAM,aAAgB,GAAA,QAAA;AAAA,IAAS,MAC7B,KAAM,CAAA,MAAA,IAAU,KAAM,CAAA,UAAA,GAAa,KAAK,KAAM,CAAA,UAAA;AAAA,GAChD,CAAA;AAEA,EAAA,MAAM,WAAc,GAAA,QAAA;AAAA,IAClB,MAAM,aAAc,CAAA,KAAA,IAAS,SAAS,EAAG,CAAA,SAAA,EAAW,SAAS,KAAK,CAAA;AAAA,GACpE,CAAA;AAEA,EAAA,MAAM,aAAgB,GAAA,QAAA,CAAS,MAAM,CAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,kBAAiB,EAAE,CAAA,CAAA;AACpE,EAAM,MAAA,YAAA,GAAe,SAAS,MAAM;AAIlC,IAAA,IAAI,CAAC,aAAc,CAAA,KAAA;AAAO,MAAA,OAAA;AAC1B,IAAA,OAAO,sBAAsB,aAAc,CAAA,KAAA,CAAA,CAAA;AAAA,GAC5C,CAAA,CAAA;AAED,EAAA,MAAMA,aAAW,QAAS,CAAA,MAAO,KAAM,CAAA,MAAA,GAAS,MAAM,CAAE,CAAA,CAAA;AAGxD,EAAM,MAAA,SAAA,GAAY,SAAS,MAAM;AAC/B,IAAA,IAAI,MAAM,OAAS,EAAA;AACjB,MAAO,OAAA,KAAA,CAAM,WAAe,IAAA,CAAA,CAAE,mBAAmB,CAAA,CAAA;AAAA,KAC5C,MAAA;AACL,MAAA,IAAI,MAAM,MAAU,IAAA,CAAC,MAAO,CAAA,UAAA,IAAc,CAAC,UAAW,CAAA,KAAA;AAAO,QAAO,OAAA,KAAA,CAAA;AACpE,MACE,IAAA,KAAA,CAAM,cACN,MAAO,CAAA,UAAA,IACP,WAAW,KACX,IAAA,eAAA,CAAgB,KAAM,CAAA,MAAA,KAAW,CACjC,EAAA;AACA,QAAO,OAAA,KAAA,CAAM,WAAe,IAAA,CAAA,CAAE,mBAAmB,CAAA,CAAA;AAAA,OACnD;AACA,MAAI,IAAA,CAAC,WAAW,KAAO,EAAA;AACrB,QAAO,OAAA,KAAA,CAAM,UAAc,IAAA,CAAA,CAAE,kBAAkB,CAAA,CAAA;AAAA,OACjD;AAAA,KACF;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAA,MAAM,mBAAsB,GAAA,QAAA;AAAA,IAC1B,MAAM,KAAA,CAAM,UAAc,IAAA,UAAA,CAAW,MAAM,YAAY,CAAA;AAAA,GACzD,CAAA;AACA,EAAA,MAAM,mBAAsB,GAAA,QAAA;AAAA,IAC1B,MAAM,KAAM,CAAA,UAAA,IAAc,MAAM,MAAU,IAAA,UAAA,CAAW,MAAM,YAAY,CAAA;AAAA,GACzE,CAAA;AAEA,EAAM,MAAA,aAAA,GAAgB,CAAC,KAAkB,KAAA;AACvC,IAAA,MAAM,SAAS,IAAI,MAAA,CAAO,kBAAmB,CAAA,KAAK,GAAG,GAAG,CAAA,CAAA;AAExD,IAAM,MAAA,aAAA,GAAgB,CAAC,CAAuB,KAAA;AAC5C,MAAI,IAAA,mBAAA,CAAoB,SAAS,mBAAoB,CAAA,KAAA;AAAO,QAAO,OAAA,IAAA,CAAA;AAEnE,MAAA,OAAO,QAAQ,MAAO,CAAA,IAAA,CAAK,SAAS,CAAC,CAAA,IAAK,EAAE,CAAI,GAAA,IAAA,CAAA;AAAA,KAClD,CAAA;AACA,IAAA,IAAI,MAAM,OAAS,EAAA;AACjB,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AAEA,IAAO,OAAA,CAAC,GAAG,MAAA,CAAO,cAAgB,EAAA,GAAG,KAAM,CAAA,OAAO,CAAE,CAAA,MAAA,CAAO,CAAC,GAAA,EAAK,IAAS,KAAA;AACxE,MAAM,MAAA,OAAA,GAAU,WAAW,IAAI,CAAA,CAAA;AAE/B,MAAI,IAAA,OAAA,CAAQ,OAAO,CAAG,EAAA;AACpB,QAAM,MAAA,QAAA,GAAW,OAAQ,CAAA,MAAA,CAAO,aAAa,CAAA,CAAA;AAE7C,QAAI,IAAA,QAAA,CAAS,SAAS,CAAG,EAAA;AACvB,UAAI,GAAA,CAAA,IAAA;AAAA,YACF;AAAA,cACE,KAAA,EAAO,SAAS,IAAI,CAAA;AAAA,cACpB,IAAM,EAAA,OAAA;AAAA,aACR;AAAA,YACA,GAAG,QAAA;AAAA,WACL,CAAA;AAAA,SACF;AAAA,OACS,MAAA,IAAA,KAAA,CAAM,MAAU,IAAA,aAAA,CAAc,IAAI,CAAG,EAAA;AAC9C,QAAA,GAAA,CAAI,KAAK,IAAI,CAAA,CAAA;AAAA,OACf;AAEA,MAAO,OAAA,GAAA,CAAA;AAAA,KACT,EAAG,EAAE,CAAA,CAAA;AAAA,GACP,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAgB,eAAA,CAAA,KAAA,GAAQ,aAAc,CAAA,MAAA,CAAO,UAAU,CAAA,CAAA;AAAA,GACzD,CAAA;AAEA,EAAM,MAAA,kBAAA,GAAqB,SAAS,MAAM;AACxC,IAAM,MAAA,QAAA,uBAAe,GAAI,EAAA,CAAA;AAEzB,IAAA,UAAA,CAAW,KAAM,CAAA,OAAA,CAAQ,CAAC,MAAA,EAAQ,KAAU,KAAA;AAC1C,MAAS,QAAA,CAAA,GAAA,CAAI,YAAY,QAAS,CAAA,MAAM,CAAC,CAAG,EAAA,EAAE,MAAQ,EAAA,KAAA,EAAO,CAAA,CAAA;AAAA,KAC9D,CAAA,CAAA;AACD,IAAO,OAAA,QAAA,CAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAM,MAAA,uBAAA,GAA0B,SAAS,MAAM;AAC7C,IAAM,MAAA,QAAA,uBAAe,GAAI,EAAA,CAAA;AAEzB,IAAA,eAAA,CAAgB,KAAM,CAAA,OAAA,CAAQ,CAAC,MAAA,EAAQ,KAAU,KAAA;AAC/C,MAAS,QAAA,CAAA,GAAA,CAAI,YAAY,QAAS,CAAA,MAAM,CAAC,CAAG,EAAA,EAAE,MAAQ,EAAA,KAAA,EAAO,CAAA,CAAA;AAAA,KAC9D,CAAA,CAAA;AACD,IAAO,OAAA,QAAA,CAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAA,MAAM,kBAAqB,GAAA,QAAA;AAAA,IAAS,MAClC,gBAAgB,KAAM,CAAA,KAAA,CAAM,CAAC,MAAW,KAAA,WAAA,CAAY,MAAM,CAAC,CAAA;AAAA,GAC7D,CAAA;AAEA,EAAA,MAAM,aAAa,WAAY,EAAA,CAAA;AAE/B,EAAA,MAAM,eAAkB,GAAA,QAAA;AAAA,IAAS,MAC/B,OAAA,KAAY,UAAW,CAAA,KAAA,GAAQ,OAAU,GAAA,SAAA;AAAA,GAC3C,CAAA;AAEA,EAAA,MAAM,sBAAsB,MAAM;AAtRpC,IAAA,IAAA,EAAA,CAAA;AAuRI,IAAI,IAAA,QAAA,CAAS,KAAM,CAAA,aAAa,CAAG,EAAA;AACjC,MAAA,UAAA,CAAW,QAAQ,KAAM,CAAA,aAAA,CAAA;AACzB,MAAA,OAAA;AAAA,KACF;AACA,IAAA,MAAM,KAAQ,GAAA,CAAA,CAAA,EAAA,GAAA,SAAA,CAAU,KAAV,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,WAAe,KAAA,GAAA,CAAA;AAC9C,IAAA,IAAI,CAAC,KAAA,CAAM,aAAiB,IAAA,UAAA,CAAW,KAAO,EAAA;AAC5C,MAAA,QAAA,CAAS,MAAM;AACb,QAAA,UAAA,CAAW,KAAQ,GAAA,IAAA,CAAK,GAAI,CAAA,KAAA,EAAO,wBAAwB,CAAA,CAAA;AAAA,OAC5D,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAA,UAAA,CAAW,KAAQ,GAAA,KAAA,CAAA;AAAA,KACrB;AAAA,GACF,CAAA;AAKA,EAAA,MAAM,yBAAyB,MAAM;AAxSvC,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAySI,IAAM,MAAA,MAAA,GAAS,QAAS,CAAA,aAAA,CAAc,QAAQ,CAAA,CAAA;AAC9C,IAAM,MAAA,GAAA,GAAM,MAAO,CAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAClC,IAAA,MAAM,QAAW,GAAA,QAAA,CAAS,EAAG,CAAA,UAAA,EAAY,MAAM,CAAA,CAAA;AAC/C,IAAA,MAAM,QAAM,EAAQ,GAAA,CAAA,EAAA,GAAA,OAAA,CAAA,KAAA,KAAR,IAAe,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAA,KAAf,mBAAwB,QAAY,KAAA,QAAA,CAAA;AAChD,IAAA,MAAM,cAAiB,GAAA,GAAA,CAAI,aAAc,CAAA,CAAA,CAAA,EAAI,QAAU,CAAA,CAAA,CAAA,CAAA;AACvD,IAAI,IAAA,cAAA,KAAmB,QAAQ,GAAQ,KAAA,IAAA;AAAM,MAAO,OAAA,CAAA,CAAA;AACpD,IAAM,MAAA,KAAA,GAAQ,iBAAiB,cAAc,CAAA,CAAA;AAC7C,IAAM,MAAA,OAAA,GACJ,OAAO,UAAW,CAAA,KAAA,CAAM,WAAW,CACnC,GAAA,MAAA,CAAO,UAAW,CAAA,KAAA,CAAM,YAAY,CAAA,CAAA;AACtC,IAAI,GAAA,CAAA,IAAA,GAAO,CAAQ,KAAA,EAAA,KAAA,CAAM,IAAK,CAAA,OAAA;AAAA,MAC5B,IAAI,MAAA,CAAO,CAAM,GAAA,EAAA,KAAA,CAAM,UAAe,CAAA,GAAA,CAAA,CAAA;AAAA,MACtC,EAAA;AAAA,KACF,CAAA,CAAA,CAAA;AACA,IAAA,MAAM,WAAW,eAAgB,CAAA,KAAA,CAAM,MAAO,CAAA,CAAC,KAAK,MAAW,KAAA;AAC7D,MAAA,MAAM,OAAU,GAAA,GAAA,CAAI,WAAY,CAAA,QAAA,CAAS,MAAM,CAAC,CAAA,CAAA;AAChD,MAAA,OAAO,IAAK,CAAA,GAAA,CAAI,OAAQ,CAAA,KAAA,EAAO,GAAG,CAAA,CAAA;AAAA,OACjC,CAAC,CAAA,CAAA;AACJ,IAAA,OAAO,QAAW,GAAA,OAAA,CAAA;AAAA,GACpB,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,IAAI,CAAC,YAAa,CAAA,KAAA;AAAO,MAAO,OAAA,CAAA,CAAA;AAChC,IAAA,MAAM,KAAQ,GAAA,MAAA,CAAO,gBAAiB,CAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AACxD,IAAA,OAAO,MAAO,CAAA,UAAA,CAAW,KAAM,CAAA,GAAA,IAAO,KAAK,CAAA,CAAA;AAAA,GAC7C,CAAA;AAGA,EAAM,MAAA,QAAA,GAAW,SAAS,MAAM;AAC9B,IAAA,MAAM,WAAW,WAAY,EAAA,CAAA;AAC7B,IAAA,MAAM,cAAiB,GAAA,KAAA,CAAM,UAAa,GAAA,QAAA,GAAW,mBAAsB,GAAA,CAAA,CAAA;AAC3E,IAAA,MAAM,QACJ,GAAA,eAAA,CAAgB,KAAS,IAAA,KAAA,CAAM,eAAoB,KAAA,CAAA,GAC/C,MAAO,CAAA,cAAA,GACP,MAAO,CAAA,iBAAA,GACP,QACA,GAAA,cAAA,GACA,OAAO,cAAiB,GAAA,cAAA,CAAA;AAC9B,IAAO,OAAA,EAAE,QAAU,EAAA,CAAA,EAAG,QAAa,CAAA,EAAA,CAAA,EAAA,CAAA;AAAA,GACpC,CAAA,CAAA;AAED,EAAM,MAAA,gBAAA,GAAmB,SAAS,MAAM;AACtC,IAAA,OAAO,EAAE,QAAA,EAAU,CAAG,EAAA,MAAA,CAAO,cAAmB,CAAA,EAAA,CAAA,EAAA,CAAA;AAAA,GACjD,CAAA,CAAA;AAED,EAAM,MAAA,qBAAA,GAAwB,SAAS,MAAM;AAC3C,IAAI,IAAA,OAAA,CAAQ,KAAM,CAAA,UAAU,CAAG,EAAA;AAC7B,MAAA,OAAO,KAAM,CAAA,UAAA,CAAW,MAAW,KAAA,CAAA,IAAK,CAAC,MAAO,CAAA,UAAA,CAAA;AAAA,KAClD;AAIA,IAAA,OAAO,KAAM,CAAA,UAAA,GAAa,CAAC,MAAA,CAAO,UAAa,GAAA,IAAA,CAAA;AAAA,GAChD,CAAA,CAAA;AAED,EAAM,MAAA,kBAAA,GAAqB,SAAS,MAAM;AAhW5C,IAAA,IAAA,EAAA,CAAA;AAiWI,IAAA,MAAM,YAAe,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,WAAN,KAAA,IAAA,GAAA,EAAA,GAAqB,EAAE,uBAAuB,CAAA,CAAA;AACnE,IAAA,OAAO,MAAM,QAAY,IAAA,CAAC,aAAc,CAAA,KAAA,GACpC,eACA,MAAO,CAAA,aAAA,CAAA;AAAA,GACZ,CAAA,CAAA;AAGD,EAAM,MAAA,SAAA,GAAY,SAAS,MAAG;AAxWhC,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAwWmC,IAAW,OAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,UAAA,CAAA,KAAA,KAAX,IAAkB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA,KAAlB,IAA6B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,CAAA;AAAA,GAAU,CAAA,CAAA;AAGxE,EAAM,MAAA,QAAA,GAAW,SAAiB,MAAM;AACtC,IAAA,IAAI,MAAM,QAAU,EAAA;AAClB,MAAM,MAAA,GAAA,GAAO,MAAM,UAAkB,CAAA,MAAA,CAAA;AACrC,MACG,IAAA,KAAA,CAAM,UAA0B,CAAA,MAAA,GAAS,CAC1C,IAAA,uBAAA,CAAwB,KAAM,CAAA,GAAA,CAAI,KAAM,CAAA,UAAA,CAAW,GAAM,GAAA,CAAA,CAAE,CAC3D,EAAA;AACA,QAAA,MAAM,EAAE,KAAA,EAAU,GAAA,uBAAA,CAAwB,KAAM,CAAA,GAAA;AAAA,UAC9C,KAAA,CAAM,WAAW,GAAM,GAAA,CAAA,CAAA;AAAA,SACzB,CAAA;AACA,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACK,MAAA;AACL,MACE,IAAA,CAAC,YAAa,CAAA,KAAA,CAAM,UAAU,CAAA,IAC9B,wBAAwB,KAAM,CAAA,GAAA,CAAI,KAAM,CAAA,UAAU,CAClD,EAAA;AACA,QAAA,MAAM,EAAE,KAAM,EAAA,GAAI,wBAAwB,KAAM,CAAA,GAAA,CAAI,MAAM,UAAU,CAAA,CAAA;AACpE,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACF;AACA,IAAO,OAAA,CAAA,CAAA,CAAA;AAAA,GACR,CAAA,CAAA;AAED,EAAA,MAAM,sBAAsB,QAAS,CAAA;AAAA,IACnC,GAAM,GAAA;AACJ,MAAO,OAAA,QAAA,CAAS,KAAS,IAAA,SAAA,CAAU,KAAU,KAAA,KAAA,CAAA;AAAA,KAC/C;AAAA,IACA,IAAI,GAAc,EAAA;AAChB,MAAA,QAAA,CAAS,KAAQ,GAAA,GAAA,CAAA;AAAA,KACnB;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,WAAA,GAAc,SAAS,MAAM;AACjC,IAAI,IAAA,CAAC,MAAM,QAAU,EAAA;AACnB,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AACA,IAAO,OAAA,KAAA,CAAM,eACT,MAAO,CAAA,aAAA,CAAc,MAAM,CAAG,EAAA,KAAA,CAAM,eAAe,CAAA,GACnD,MAAO,CAAA,aAAA,CAAA;AAAA,GACZ,CAAA,CAAA;AAED,EAAM,MAAA,eAAA,GAAkB,SAAS,MAAM;AACrC,IAAI,IAAA,CAAC,MAAM,QAAU,EAAA;AACnB,MAAA,OAAO,EAAC,CAAA;AAAA,KACV;AACA,IAAO,OAAA,KAAA,CAAM,eACT,MAAO,CAAA,aAAA,CAAc,MAAM,KAAM,CAAA,eAAe,IAChD,EAAC,CAAA;AAAA,GACN,CAAA,CAAA;AAGD,EAAM,MAAA;AAAA,IACJ,eAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,GACF,GAAI,cAAe,CAAA,KAAA,EAAO,MAAM,CAAA,CAAA;AAGhC,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,IAAI,cAAe,CAAA,KAAA;AAAO,MAAA,OAAA;AAE1B,IAAA,IAAI,OAAO,kBAAoB,EAAA;AAE7B,MAAA,MAAA,CAAO,kBAAqB,GAAA,KAAA,CAAA;AAAA,KACvB,MAAA;AACL,MAAS,QAAA,CAAA,KAAA,GAAQ,CAAC,QAAS,CAAA,KAAA,CAAA;AAAA,KAC7B;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,IAAI,OAAO,UAAW,CAAA,MAAA,GAAS,CAAK,IAAA,CAAC,SAAS,KAAO,EAAA;AACnD,MAAA,QAAA,CAAS,KAAQ,GAAA,IAAA,CAAA;AAAA,KACnB;AACA,IAAA,eAAA,CAAgB,OAAO,UAAU,CAAA,CAAA;AACjC,IAAA,QAAA,CAAS,MAAM;AACb,MAAA,iBAAA,CAAkB,OAAO,UAAU,CAAA,CAAA;AAAA,KACpC,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAA,MAAM,sBAAyB,GAAAC,QAAA,CAAe,aAAe,EAAAD,UAAA,CAAS,KAAK,CAAA,CAAA;AAE3E,EAAM,MAAA,iBAAA,GAAoB,CAAC,GAAgB,KAAA;AACzC,IAAA,IAAI,MAAO,CAAA,aAAA,KAAkB,GAAO,IAAA,WAAA,CAAY,KAAO,EAAA;AACrD,MAAA,OAAA;AAAA,KACF;AACA,IAAA,MAAA,CAAO,aAAgB,GAAA,GAAA,CAAA;AACvB,IAAA,IAAI,KAAM,CAAA,UAAA,IAAc,UAAW,CAAA,KAAA,CAAM,YAAY,CAAG,EAAA;AACtD,MAAA,KAAA,CAAM,aAAa,GAAG,CAAA,CAAA;AAAA,KACxB,MAAA,IACE,MAAM,UACN,IAAA,KAAA,CAAM,UACN,UAAW,CAAA,KAAA,CAAM,YAAY,CAC7B,EAAA;AACA,MAAA,KAAA,CAAM,aAAa,GAAG,CAAA,CAAA;AAAA,KACxB;AACA,IACE,IAAA,KAAA,CAAM,uBACL,KAAM,CAAA,UAAA,IAAc,MAAM,MAC3B,CAAA,IAAA,eAAA,CAAgB,MAAM,MACtB,EAAA;AACA,MAAA,QAAA,CAAS,uBAAuB,CAAA,CAAA;AAAA,KAC3B,MAAA;AACL,MAAA,QAAA,CAAS,mBAAmB,CAAA,CAAA;AAAA,KAC9B;AAAA,GACF,CAAA;AAYA,EAAA,MAAM,0BAA0B,MAAM;AACpC,IAAM,MAAA,iBAAA,GAAoB,gBAAgB,KAAM,CAAA,MAAA;AAAA,MAC9C,CAAC,CAAM,KAAA,CAAC,CAAE,CAAA,QAAA,IAAY,EAAE,IAAS,KAAA,OAAA;AAAA,KACnC,CAAA;AACA,IAAA,MAAM,oBAAoB,iBAAkB,CAAA,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA,CAAA;AACjE,IAAA,MAAM,oBAAoB,iBAAkB,CAAA,CAAA,CAAA,CAAA;AAC5C,IAAA,MAAA,CAAO,aAAgB,GAAA,aAAA;AAAA,MACrB,eAAgB,CAAA,KAAA;AAAA,MAChB,iBAAqB,IAAA,iBAAA;AAAA,KACvB,CAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,UAAA,GAAa,CAAC,GAAqB,KAAA;AACvC,IAAA,IAAI,CAAC,OAAA,CAAQ,KAAM,CAAA,UAAA,EAAY,GAAG,CAAG,EAAA;AACnC,MAAA,IAAA,CAAK,cAAc,GAAG,CAAA,CAAA;AAAA,KACxB;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,MAAA,GAAS,CAAC,GAAa,KAAA;AAC3B,IAAA,IAAA,CAAK,oBAAoB,GAAG,CAAA,CAAA;AAC5B,IAAA,UAAA,CAAW,GAAG,CAAA,CAAA;AACd,IAAA,MAAA,CAAO,aAAgB,GAAA,KAAA,CAAM,QAAW,GAAA,MAAA,CAAO,GAAG,CAAI,GAAA,GAAA,CAAA;AAEtD,IAAA,QAAA,CAAS,MAAM;AACb,MAAA,IAAI,KAAM,CAAA,QAAA,IAAY,OAAQ,CAAA,KAAA,CAAM,UAAU,CAAG,EAAA;AAC/C,QAAM,MAAA,aAAA,GAAgB,MAAO,CAAA,aAAA,CAAc,KAAM,EAAA,CAAA;AACjD,QAAM,MAAA,eAAA,GAAkB,MAAM,UAAW,CAAA,GAAA;AAAA,UAAI,CAAC,KAAA,KAC5C,SAAU,CAAA,KAAA,EAAO,aAAa,CAAA;AAAA,SAChC,CAAA;AAEA,QAAA,IAAI,CAAC,OAAA,CAAQ,MAAO,CAAA,aAAA,EAAe,eAAe,CAAG,EAAA;AACnD,UAAA,MAAA,CAAO,aAAgB,GAAA,eAAA,CAAA;AAAA,SACzB;AAAA,OACK,MAAA;AACL,QAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAAA,OACjB;AAAA,KACD,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAA,MAAM,aAAgB,GAAA,CAAC,GAAiB,GAAA,IAAI,KAAmB,KAAA;AAC7D,IAAI,IAAA,CAAC,QAAS,CAAA,KAAK,CAAG,EAAA;AACpB,MAAO,OAAA,GAAA,CAAI,QAAQ,KAAK,CAAA,CAAA;AAAA,KAC1B;AACA,IAAA,MAAM,WAAW,KAAM,CAAA,QAAA,CAAA;AACvB,IAAA,IAAI,KAAQ,GAAA,CAAA,CAAA,CAAA;AACZ,IAAI,GAAA,CAAA,IAAA,CAAK,CAAC,IAAA,EAAM,CAAM,KAAA;AACpB,MAAA,IAAI,IAAI,IAAM,EAAA,QAAQ,MAAM,GAAI,CAAA,KAAA,EAAO,QAAQ,CAAG,EAAA;AAChD,QAAQ,KAAA,GAAA,CAAA,CAAA;AACR,QAAO,OAAA,IAAA,CAAA;AAAA,OACT;AACA,MAAO,OAAA,KAAA,CAAA;AAAA,KACR,CAAA,CAAA;AACD,IAAO,OAAA,KAAA,CAAA;AAAA,GACT,CAAA;AAEA,EAAM,MAAA,WAAA,GAAc,CAAC,IAAkB,KAAA;AACrC,IAAA,OAAO,SAAS,IAAI,CAAA,GAAI,IAAI,IAAM,EAAA,KAAA,CAAM,QAAQ,CAAI,GAAA,IAAA,CAAA;AAAA,GACtD,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAoB,mBAAA,EAAA,CAAA;AAAA,GACtB,CAAA;AAEA,EAAA,MAAM,sBAAsB,MAAM;AAChC,IAAA,MAAA,CAAO,iBAAiB,MAAO,CAAA,UAAA;AAAA,MAC7B,MAAO,CAAA,gBAAA,CAAiB,YAAa,CAAA,KAAM,CAAE,CAAA,KAAA;AAAA,KAC/C,CAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,yBAAyB,MAAM;AACnC,IAAA,MAAA,CAAO,iBACL,GAAA,eAAA,CAAgB,KAAO,CAAA,qBAAA,EAAwB,CAAA,KAAA,CAAA;AAAA,GACnD,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AA3iB9B,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AA4iBI,IAAW,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,UAAA,CAAA,KAAA,KAAX,mBAAkB,YAAlB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,mBAAmB,MAAM;AA/iBjC,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAgjBI,IAAc,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,aAAA,CAAA,KAAA,KAAd,mBAAqB,YAArB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,CAAA,CAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,QAAA,GAAW,CAAC,MAAmB,KAAA;AACnC,IAAM,MAAA,WAAA,GAAc,SAAS,MAAM,CAAA,CAAA;AAEnC,IAAA,IAAI,MAAM,QAAU,EAAA;AAClB,MAAI,IAAA,eAAA,GAAmB,KAAM,CAAA,UAAA,CAAqB,KAAM,EAAA,CAAA;AAExD,MAAM,MAAA,KAAA,GAAQ,aAAc,CAAA,eAAA,EAAiB,WAAW,CAAA,CAAA;AACxD,MAAA,IAAI,QAAQ,CAAI,CAAA,EAAA;AACd,QAAkB,eAAA,GAAA;AAAA,UAChB,GAAG,eAAA,CAAgB,KAAM,CAAA,CAAA,EAAG,KAAK,CAAA;AAAA,UACjC,GAAG,eAAA,CAAgB,KAAM,CAAA,KAAA,GAAQ,CAAC,CAAA;AAAA,SACpC,CAAA;AACA,QAAO,MAAA,CAAA,aAAA,CAAc,MAAO,CAAA,KAAA,EAAO,CAAC,CAAA,CAAA;AACpC,QAAA,eAAA,CAAgB,MAAM,CAAA,CAAA;AAAA,iBAEtB,KAAM,CAAA,aAAA,IAAiB,KACvB,eAAgB,CAAA,MAAA,GAAS,MAAM,aAC/B,EAAA;AACA,QAAkB,eAAA,GAAA,CAAC,GAAG,eAAA,EAAiB,WAAW,CAAA,CAAA;AAClD,QAAO,MAAA,CAAA,aAAA,CAAc,KAAK,MAAM,CAAA,CAAA;AAChC,QAAA,eAAA,CAAgB,MAAM,CAAA,CAAA;AAAA,OACxB;AACA,MAAA,MAAA,CAAO,eAAe,CAAA,CAAA;AACtB,MAAA,IAAI,OAAO,OAAS,EAAA;AAClB,QAAA,iBAAA,CAAkB,EAAE,CAAA,CAAA;AAAA,OACtB;AACA,MAAA,IAAI,KAAM,CAAA,UAAA,IAAc,CAAC,KAAA,CAAM,cAAgB,EAAA;AAC7C,QAAA,MAAA,CAAO,UAAa,GAAA,EAAA,CAAA;AAAA,OACtB;AAAA,KACK,MAAA;AACL,MAAO,MAAA,CAAA,aAAA,GAAgB,SAAS,MAAM,CAAA,CAAA;AACtC,MAAA,CAAC,QAAQ,KAAM,CAAA,UAAA,EAAY,WAAW,CAAA,IAAK,OAAO,WAAW,CAAA,CAAA;AAC7D,MAAA,QAAA,CAAS,KAAQ,GAAA,KAAA,CAAA;AACjB,MAAA,eAAA,CAAgB,MAAM,CAAA,CAAA;AACtB,MAAI,IAAA,CAAC,OAAO,OAAS,EAAA;AACnB,QAAkB,iBAAA,EAAA,CAAA;AAAA,OACpB;AAAA,KACF;AACA,IAAM,KAAA,EAAA,CAAA;AAAA,GACR,CAAA;AAEA,EAAM,MAAA,SAAA,GAAY,CAAC,KAAA,EAAmB,MAAmB,KAAA;AACvD,IAAI,IAAA,eAAA,GAAmB,KAAM,CAAA,UAAA,CAAqB,KAAM,EAAA,CAAA;AAExD,IAAA,MAAM,KAAQ,GAAA,aAAA,CAAc,eAAiB,EAAA,QAAA,CAAS,MAAM,CAAC,CAAA,CAAA;AAE7D,IAAA,IAAI,KAAQ,GAAA,CAAA,CAAA,IAAM,CAAC,cAAA,CAAe,KAAO,EAAA;AACvC,MAAkB,eAAA,GAAA;AAAA,QAChB,GAAI,KAAA,CAAM,UAA8B,CAAA,KAAA,CAAM,GAAG,KAAK,CAAA;AAAA,QACtD,GAAI,KAAA,CAAM,UAA8B,CAAA,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,OACzD,CAAA;AACA,MAAO,MAAA,CAAA,aAAA,CAAc,MAAO,CAAA,KAAA,EAAO,CAAC,CAAA,CAAA;AACpC,MAAA,MAAA,CAAO,eAAe,CAAA,CAAA;AACtB,MAAK,IAAA,CAAA,YAAA,EAAc,QAAS,CAAA,MAAM,CAAC,CAAA,CAAA;AACnC,MAAA,eAAA,CAAgB,MAAM,CAAA,CAAA;AAAA,KACxB;AACA,IAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AACtB,IAAM,KAAA,EAAA,CAAA;AAAA,GACR,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AA/mBtB,IAAA,IAAA,EAAA,CAAA;AAgnBI,IAAA,CAAA,EAAA,GAAA,QAAA,CAAS,UAAT,IAAgB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,EAAA,CAAA;AAAA,GAClB,CAAA;AAEA,EAAA,MAAM,OAAO,MAAM;AAnnBrB,IAAA,IAAA,EAAA,CAAA;AAonBI,IAAA,IAAI,SAAS,KAAO,EAAA;AAClB,MAAA,QAAA,CAAS,KAAQ,GAAA,KAAA,CAAA;AACjB,MAAA,QAAA,CAAS,MAAG;AAtnBlB,QAAAE,IAAAA,GAAAA,CAAAA;AAsnBqB,QAAA,OAAA,CAAAA,GAAA,GAAA,QAAA,CAAS,KAAT,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAgB,CAAA,IAAA,EAAA,CAAA;AAAA,OAAM,CAAA,CAAA;AACrC,MAAA,OAAA;AAAA,KACF;AACA,IAAA,CAAA,EAAA,GAAA,QAAA,CAAS,UAAT,IAAgB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,EAAA,CAAA;AAAA,GAClB,CAAA;AAGA,EAAA,MAAM,YAAY,MAAM;AACtB,IAAI,IAAA,MAAA,CAAO,UAAW,CAAA,MAAA,GAAS,CAAG,EAAA;AAChC,MAAA,MAAA,CAAO,UAAa,GAAA,EAAA,CAAA;AAAA,KACf,MAAA;AACL,MAAA,QAAA,CAAS,KAAQ,GAAA,KAAA,CAAA;AAAA,KACnB;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,uBAAA,GAA0B,CAAC,KAC/B,KAAA,aAAA;AAAA,IACE,KAAA;AAAA,IACA,CAAC,EAAA,KACC,CAAC,MAAA,CAAO,aAAc,CAAA,IAAA;AAAA,MACpB,CAAC,MAAW,KAAA,QAAA,CAAS,MAAM,CAAM,KAAA,EAAA,IAAM,YAAY,MAAM,CAAA;AAAA,KAC3D;AAAA,GACJ,CAAA;AAEF,EAAM,MAAA,SAAA,GAAY,CAAC,CAAqB,KAAA;AACtC,IAAM,MAAA,IAAA,GAAO,aAAa,CAAC,CAAA,CAAA;AAC3B,IAAA,IAAI,CAAC,KAAM,CAAA,QAAA;AAAU,MAAA,OAAA;AACrB,IAAA,IAAI,SAAS,UAAW,CAAA,MAAA;AAAQ,MAAA,OAAA;AAChC,IAAI,IAAA,MAAA,CAAO,UAAW,CAAA,MAAA,KAAW,CAAG,EAAA;AAClC,MAAA,CAAA,CAAE,cAAe,EAAA,CAAA;AACjB,MAAM,MAAA,QAAA,GAAY,KAAM,CAAA,UAAA,CAA0B,KAAM,EAAA,CAAA;AACxD,MAAM,MAAA,oBAAA,GAAuB,wBAAwB,QAAQ,CAAA,CAAA;AAC7D,MAAA,IAAI,oBAAuB,GAAA,CAAA;AAAG,QAAA,OAAA;AAC9B,MAAA,MAAM,iBAAiB,QAAS,CAAA,oBAAA,CAAA,CAAA;AAChC,MAAS,QAAA,CAAA,MAAA,CAAO,sBAAsB,CAAC,CAAA,CAAA;AACvC,MAAM,MAAA,MAAA,GAAS,OAAO,aAAc,CAAA,oBAAA,CAAA,CAAA;AACpC,MAAO,MAAA,CAAA,aAAA,CAAc,MAAO,CAAA,oBAAA,EAAsB,CAAC,CAAA,CAAA;AACnD,MAAA,eAAA,CAAgB,MAAM,CAAA,CAAA;AACtB,MAAA,MAAA,CAAO,QAAQ,CAAA,CAAA;AACf,MAAA,IAAA,CAAK,cAAc,cAAc,CAAA,CAAA;AAAA,KACnC;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAI,IAAA,UAAA,CAAA;AACJ,IAAI,IAAA,OAAA,CAAQ,KAAM,CAAA,UAAU,CAAG,EAAA;AAC7B,MAAA,UAAA,GAAa,EAAC,CAAA;AAAA,KACT,MAAA;AACL,MAAA,UAAA,GAAa,YAAa,CAAA,KAAA,CAAA;AAAA,KAC5B;AAEA,IAAA,MAAA,CAAO,aAAgB,GAAA,EAAA,CAAA;AAEvB,IAAA,QAAA,CAAS,KAAQ,GAAA,KAAA,CAAA;AACjB,IAAA,MAAA,CAAO,UAAU,CAAA,CAAA;AACjB,IAAA,IAAA,CAAK,OAAO,CAAA,CAAA;AACZ,IAAkB,iBAAA,EAAA,CAAA;AAClB,IAAM,KAAA,EAAA,CAAA;AAAA,GACR,CAAA;AAEA,EAAA,MAAM,kBAAqB,GAAA,CACzB,SACA,EAAA,aAAA,GAAoC,KAC3B,CAAA,KAAA;AACT,IAAA,MAAM,UAAU,eAAgB,CAAA,KAAA,CAAA;AAChC,IAAA,IACE,CAAC,CAAC,SAAA,EAAW,UAAU,CAAA,CAAE,SAAS,SAAS,CAAA,IAC3C,cAAe,CAAA,KAAA,IACf,QAAQ,MAAU,IAAA,CAAA,IAClB,kBAAmB,CAAA,KAAA,IACnB,YAAY,KACZ,EAAA;AACA,MAAA,OAAA;AAAA,KACF;AACA,IAAI,IAAA,CAAC,SAAS,KAAO,EAAA;AACnB,MAAA,OAAO,UAAW,EAAA,CAAA;AAAA,KACpB;AACA,IAAI,IAAA,WAAA,CAAY,aAAa,CAAG,EAAA;AAC9B,MAAA,aAAA,GAAgB,MAAO,CAAA,aAAA,CAAA;AAAA,KACzB;AACA,IAAA,IAAI,QAAW,GAAA,CAAA,CAAA,CAAA;AACf,IAAA,IAAI,cAAc,SAAW,EAAA;AAC3B,MAAA,QAAA,GAAW,aAAgB,GAAA,CAAA,CAAA;AAC3B,MAAI,IAAA,QAAA,IAAY,QAAQ,MAAQ,EAAA;AAE9B,QAAW,QAAA,GAAA,CAAA,CAAA;AAAA,OACb;AAAA,KACF,MAAA,IAAW,cAAc,UAAY,EAAA;AACnC,MAAA,QAAA,GAAW,aAAgB,GAAA,CAAA,CAAA;AAC3B,MAAA,IAAI,QAAW,GAAA,CAAA,IAAK,QAAY,IAAA,OAAA,CAAQ,MAAQ,EAAA;AAE9C,QAAA,QAAA,GAAW,QAAQ,MAAS,GAAA,CAAA,CAAA;AAAA,OAC9B;AAAA,KACF;AACA,IAAA,MAAM,SAAS,OAAQ,CAAA,QAAA,CAAA,CAAA;AACvB,IAAA,IAAI,WAAY,CAAA,MAAM,CAAK,IAAA,MAAA,CAAO,SAAS,OAAS,EAAA;AAElD,MAAO,OAAA,kBAAA,CAAmB,WAAW,QAAQ,CAAA,CAAA;AAAA,KACxC,MAAA;AACL,MAAA,MAAA,CAAO,aAAgB,GAAA,QAAA,CAAA;AACvB,MAAA,YAAA,CAAa,QAAQ,CAAA,CAAA;AAAA,KACvB;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAI,IAAA,CAAC,SAAS,KAAO,EAAA;AACnB,MAAA,OAAO,UAAW,EAAA,CAAA;AAAA,eAElB,CAAC,MAAA,CAAO,iBACR,eAAgB,CAAA,KAAA,CAAM,OAAO,aAC7B,CAAA,EAAA;AACA,MAAS,QAAA,CAAA,eAAA,CAAgB,KAAM,CAAA,MAAA,CAAO,aAAc,CAAA,CAAA,CAAA;AAAA,KACtD;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,aAAA,GAAgB,CAAC,GAAiB,KAAA;AACtC,IAAA,MAAA,CAAO,gBAAgB,GAAO,IAAA,IAAA,GAAA,GAAA,GAAA,CAAA,CAAA,CAAA;AAAA,GAChC,CAAA;AAEA,EAAA,MAAM,sBAAsB,MAAM;AAChC,IAAI,IAAA,CAAC,MAAM,QAAU,EAAA;AACnB,MAAA,MAAA,CAAO,aAAgB,GAAA,eAAA,CAAgB,KAAM,CAAA,SAAA,CAAU,CAAC,IAAS,KAAA;AAC/D,QAAA,OAAO,YAAY,QAAS,CAAA,IAAI,CAAC,CAAM,KAAA,WAAA,CAAY,MAAM,UAAU,CAAA,CAAA;AAAA,OACpE,CAAA,CAAA;AAAA,KACI,MAAA;AACL,MAAO,MAAA,CAAA,aAAA,GAAgB,gBAAgB,KAAM,CAAA,SAAA;AAAA,QAAU,CAAC,IACtD,KAAA,KAAA,CAAM,UAAW,CAAA,IAAA;AAAA,UACf,CAAC,eACC,WAAY,CAAA,UAAU,MAAM,WAAY,CAAA,QAAA,CAAS,IAAI,CAAC,CAAA;AAAA,SAC1D;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,OAAA,GAAU,CAAC,KAAiB,KAAA;AAChC,IAAO,MAAA,CAAA,UAAA,GAAc,MAAM,MAA4B,CAAA,KAAA,CAAA;AACvD,IAAA,IAAI,MAAM,MAAQ,EAAA;AAChB,MAAuB,sBAAA,EAAA,CAAA;AAAA,KAClB,MAAA;AACL,MAAA,OAAO,aAAc,EAAA,CAAA;AAAA,KACvB;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,kBAAA,GAAqB,CAAC,KAAiB,KAAA;AAC3C,IAAA,QAAA,CAAS,KAAQ,GAAA,KAAA,CAAA;AAEjB,IAAA,IAAI,UAAU,KAAO,EAAA;AACnB,MAAA,MAAM,MAAS,GAAA,IAAI,UAAW,CAAA,MAAA,EAAQ,KAAK,CAAA,CAAA;AAC3C,MAAA,UAAA,CAAW,MAAM,CAAA,CAAA;AAAA,KACnB;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,MAAA,CAAO,YAAe,GAAA,KAAA,CAAA;AACtB,IAAA,OAAO,SAAS,MAAM;AACpB,MAAI,IAAA,CAAC,SAAS,KAAO,EAAA;AACnB,QAAA,YAAA,CAAa,OAAO,aAAa,CAAA,CAAA;AAAA,OACnC;AAAA,KACD,CAAA,CAAA;AAAA,GACH,CAAA;AAEA,EAAM,MAAA,YAAA,GAAe,CAAC,KAAkB,KAAA;AACtC,IAAQ,OAAA,CAAA,KAAA,CAAO,aAAa,KAAK,CAAA,CAAA;AAAA,GACnC,CAAA;AAEA,EAAM,MAAA,SAAA,GAAY,CAAC,KAAA,EAAgB,aAA6B,KAAA;AAE9D,IAAM,MAAA,WAAA,GAAc,YAAY,KAAK,CAAA,CAAA;AAErC,IAAA,IAAI,kBAAmB,CAAA,KAAA,CAAM,GAAI,CAAA,WAAW,CAAG,EAAA;AAC7C,MAAA,MAAM,EAAE,MAAO,EAAA,GAAI,kBAAmB,CAAA,KAAA,CAAM,IAAI,WAAW,CAAA,CAAA;AAE3D,MAAO,OAAA,MAAA,CAAA;AAAA,KACT;AACA,IAAI,IAAA,aAAA,IAAiB,cAAc,MAAQ,EAAA;AACzC,MAAA,MAAM,SAAS,aAAc,CAAA,IAAA;AAAA,QAC3B,CAACC,OAAW,KAAA,WAAA,CAAY,QAASA,CAAAA,OAAM,CAAC,CAAM,KAAA,WAAA;AAAA,OAChD,CAAA;AACA,MAAA,IAAI,MAAQ,EAAA;AACV,QAAO,OAAA,MAAA,CAAA;AAAA,OACT;AAAA,KACF;AAEA,IAAO,OAAA;AAAA,MACL,CAAC,UAAW,CAAA,KAAA,CAAM,KAAQ,GAAA,KAAA;AAAA,MAC1B,CAAC,UAAW,CAAA,KAAA,CAAM,KAAQ,GAAA,KAAA;AAAA,KAC5B,CAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,QAAA,GAAW,CAAC,MAAgB,KAAA;AAnzBpC,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAozBI,IAAmB,OAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,kBAAA,CAAA,KAAA,CAAM,IAAI,QAAS,CAAA,MAAM,CAAC,CAA7C,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAgD,UAAhD,IAAyD,GAAA,EAAA,GAAA,CAAA,CAAA,CAAA;AAAA,GAAA,CAAA;AAE3D,EAAM,MAAA,UAAA,GAAa,CAAC,uBAAA,GAA0B,KAAU,KAAA;AACtD,IAAA,IAAI,MAAM,QAAU,EAAA;AAClB,MAAK,IAAA,KAAA,CAAM,UAA0B,CAAA,MAAA,GAAS,CAAG,EAAA;AAC/C,QAAM,MAAA,aAAA,GAAgB,MAAO,CAAA,aAAA,CAAc,KAAM,EAAA,CAAA;AACjD,QAAA,MAAA,CAAO,cAAc,MAAS,GAAA,CAAA,CAAA;AAC9B,QAAO,MAAA,CAAA,aAAA,GAAgB,KAAM,CAAA,UAAA,CAAW,QAAS,EAAA,CAAA;AAEjD,QAAW,KAAA,MAAA,KAAA,IAAS,MAAM,UAAY,EAAA;AACpC,UAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAA,EAAO,aAAa,CAAA,CAAA;AAC7C,UAAO,MAAA,CAAA,aAAA,CAAc,KAAK,MAAM,CAAA,CAAA;AAAA,SAClC;AAAA,OACK,MAAA;AACL,QAAA,MAAA,CAAO,gBAAgB,EAAC,CAAA;AACxB,QAAA,MAAA,CAAO,aAAgB,GAAA,KAAA,CAAA,CAAA;AAAA,OACzB;AAAA,KACK,MAAA;AACL,MAAA,IAAI,cAAc,KAAO,EAAA;AACvB,QAAA,MAAA,CAAO,gBAAgB,KAAM,CAAA,UAAA,CAAA;AAC7B,QAAA,MAAM,UAAU,eAAgB,CAAA,KAAA,CAAA;AAChC,QAAA,MAAM,oBAAoB,OAAQ,CAAA,SAAA;AAAA,UAChC,CAAC,WACC,WAAY,CAAA,QAAA,CAAS,MAAM,CAAC,CAAA,KAAM,WAAY,CAAA,KAAA,CAAM,UAAU,CAAA;AAAA,SAClE,CAAA;AACA,QAAA,IAAI,CAAC,iBAAmB,EAAA;AACtB,UAAO,MAAA,CAAA,aAAA,GAAgB,QAAS,CAAA,OAAA,CAAQ,iBAAkB,CAAA,CAAA,CAAA;AAAA,SACrD,MAAA;AACL,UAAI,IAAA,CAAC,MAAO,CAAA,aAAA,IAAiB,uBAAyB,EAAA;AACpD,YAAO,MAAA,CAAA,aAAA,GAAgB,WAAY,CAAA,KAAA,CAAM,UAAU,CAAA,CAAA;AAAA,WACrD;AAAA,SACF;AAAA,OACK,MAAA;AACL,QAAA,MAAA,CAAO,aAAgB,GAAA,EAAA,CAAA;AACvB,QAAA,MAAA,CAAO,aAAgB,GAAA,KAAA,CAAA,CAAA;AAAA,OACzB;AAAA,KACF;AACA,IAAkB,iBAAA,EAAA,CAAA;AAClB,IAAoB,mBAAA,EAAA,CAAA;AAAA,GACtB,CAAA;AAEA,EAAA,KAAA;AAAA,IACE,MAAM,KAAM,CAAA,aAAA;AAAA,IACZ,MAAM;AACJ,MAAoB,mBAAA,EAAA,CAAA;AAAA,KACtB;AAAA,GACF,CAAA;AAMA,EAAM,KAAA,CAAA,QAAA,EAAU,CAAC,GAAQ,KAAA;AACvB,IAAA,IAAI,GAAK,EAAA;AACP,MAAI,IAAA,CAAC,MAAM,UAAY,EAAA;AACrB,QAAoB,mBAAA,EAAA,CAAA;AAAA,OACtB;AACA,MAAA,iBAAA,CAAkB,EAAE,CAAA,CAAA;AAAA,KACf,MAAA;AACL,MAAA,MAAA,CAAO,UAAa,GAAA,EAAA,CAAA;AACpB,MAAA,MAAA,CAAO,aAAgB,GAAA,IAAA,CAAA;AACvB,MAAA,MAAA,CAAO,YAAe,GAAA,IAAA,CAAA;AACtB,MAAA,eAAA,CAAgB,EAAE,CAAA,CAAA;AAAA,KACpB;AACA,IAAA,IAAA,CAAK,kBAAkB,GAAG,CAAA,CAAA;AAAA,GAC3B,CAAA,CAAA;AAED,EAAA,KAAA;AAAA,IACE,MAAM,KAAM,CAAA,UAAA;AAAA,IACZ,CAAC,KAAK,MAAW,KAAA;AAz3BrB,MAAA,IAAA,EAAA,CAAA;AA03BM,MAAA,MAAM,aAAa,CAAC,GAAA,IAAQ,QAAQ,GAAG,CAAA,IAAK,IAAI,MAAW,KAAA,CAAA,CAAA;AAE3D,MACE,IAAA,UAAA,IACC,MAAM,QAAY,IAAA,CAAC,QAAQ,GAAI,CAAA,QAAA,IAAY,MAAO,CAAA,aAAa,KAC/D,CAAC,KAAA,CAAM,YACN,WAAY,CAAA,GAAG,MAAM,WAAY,CAAA,MAAA,CAAO,aAAa,CACvD,EAAA;AACA,QAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAAA,OACjB;AACA,MAAA,IAAI,CAAC,OAAQ,CAAA,GAAA,EAAK,MAAM,CAAA,IAAK,MAAM,aAAe,EAAA;AAChD,QAAA,CAAA,EAAA,GAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,aAAZ,IAAuB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,UAAA,EAAA,QAAA,CAAA,CAAU,MAAM,CAAC,GAAA,KAAQ,UAAa,CAAA,CAAA,CAAA;AAAA,OAC/D;AAAA,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA,IAAA;AAAA,KACR;AAAA,GACF,CAAA;AAEA,EAAA,KAAA;AAAA,IACE,MAAM,KAAM,CAAA,OAAA;AAAA,IACZ,MAAM;AACJ,MAAA,MAAM,QAAQ,QAAS,CAAA,KAAA,CAAA;AAEvB,MAAA,IAAI,CAAC,KAAA,IAAU,KAAS,IAAA,QAAA,CAAS,kBAAkB,KAAQ,EAAA;AACzD,QAAW,UAAA,EAAA,CAAA;AAAA,OACb;AAAA,KACF;AAAA,IACA;AAAA,MACE,IAAM,EAAA,IAAA;AAAA,MACN,KAAO,EAAA,MAAA;AAAA,KACT;AAAA,GACF,CAAA;AAGA,EAAA,KAAA;AAAA,IACE,MAAM,eAAgB,CAAA,KAAA;AAAA,IACtB,MAAM;AACJ,MAAoB,mBAAA,EAAA,CAAA;AACpB,MAAA,OAAO,OAAQ,CAAA,KAAA,IAAS,QAAS,CAAA,OAAA,CAAQ,MAAM,cAAc,CAAA,CAAA;AAAA,KAC/D;AAAA,GACF,CAAA;AAEA,EAAA,WAAA,CAAY,MAAM;AAGhB,IAAA,IAAI,MAAO,CAAA,YAAA;AAAc,MAAA,OAAA;AACzB,IAAc,aAAA,EAAA,CAAA;AAAA,GACf,CAAA,CAAA;AAED,EAAA,WAAA,CAAY,MAAM;AAChB,IAAM,MAAA,EAAE,QAAU,EAAA,OAAA,EAAY,GAAA,KAAA,CAAA;AAC9B,IAAM,MAAA,cAAA,uBAAqB,GAAI,EAAA,CAAA;AAC/B,IAAA,KAAA,MAAW,QAAQ,OAAS,EAAA;AAC1B,MAAM,MAAA,WAAA,GAAc,SAAS,IAAI,CAAA,CAAA;AACjC,MAAA,IAAI,CAAI,GAAA,WAAA,CAAA;AACR,MAAI,IAAA,QAAA,CAAS,CAAC,CAAG,EAAA;AACf,QAAI,CAAA,GAAA,GAAA,CAAI,aAAa,QAAQ,CAAA,CAAA;AAAA,OAC/B;AACA,MAAI,IAAA,cAAA,CAAe,GAAI,CAAA,CAAC,CAAG,EAAA;AAKzB,QAAA,MAAA;AAAA,OACK,MAAA;AACL,QAAe,cAAA,CAAA,GAAA,CAAI,GAAG,IAAI,CAAA,CAAA;AAAA,OAC5B;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAW,UAAA,EAAA,CAAA;AAAA,GACZ,CAAA,CAAA;AACD,EAAA,iBAAA,CAAkB,WAAW,YAAY,CAAA,CAAA;AACzC,EAAA,iBAAA,CAAkB,cAAc,mBAAmB,CAAA,CAAA;AACnD,EAAA,iBAAA,CAAkB,SAAS,aAAa,CAAA,CAAA;AACxC,EAAA,iBAAA,CAAkB,YAAY,aAAa,CAAA,CAAA;AAC3C,EAAA,iBAAA,CAAkB,YAAY,gBAAgB,CAAA,CAAA;AAC9C,EAAA,iBAAA,CAAkB,iBAAiB,sBAAsB,CAAA,CAAA;AAEzD,EAAO,OAAA;AAAA,IAEL,OAAA;AAAA,IACA,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,cACAH,UAAA;AAAA,IACA,UAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA,UAAA;AAAA,IACA,mBAAA;AAAA,IACA,aAAA;AAAA,IACA,qBAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IAGA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IAEA,SAAA;AAAA,IAEA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAA;AAAA,IAGA,sBAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,kBAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,mBAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAU,EAAA,YAAA;AAAA,IACV,OAAA;AAAA,IACA,kBAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAS,EAAA,aAAA;AAAA,IACT,sBAAA;AAAA,IACA,oBAAA;AAAA,IACA,uBAAA;AAAA,GACF,CAAA;AACF;;;;"}