{"version":3,"file":"index.esm-CKf4JwMq.js","sources":["../../../node_modules/react-hook-form/dist/index.esm.mjs"],"sourcesContent":["import React from 'react';\n\nvar isCheckBoxInput = (element) => element.type === 'checkbox';\n\nvar isDateObject = (value) => value instanceof Date;\n\nvar isNullOrUndefined = (value) => value == null;\n\nconst isObjectType = (value) => typeof value === 'object';\r\nvar isObject = (value) => !isNullOrUndefined(value) &&\r\n !Array.isArray(value) &&\r\n isObjectType(value) &&\r\n !isDateObject(value);\n\nvar getEventValue = (event) => isObject(event) && event.target\r\n ? isCheckBoxInput(event.target)\r\n ? event.target.checked\r\n : event.target.value\r\n : event;\n\nvar getNodeParentName = (name) => name.substring(0, name.search(/\\.\\d+(\\.|$)/)) || name;\n\nvar isNameInFieldArray = (names, name) => names.has(getNodeParentName(name));\n\nvar compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];\n\nvar isUndefined = (val) => val === undefined;\n\nvar get = (obj, path, defaultValue) => {\r\n if (!path || !isObject(obj)) {\r\n return defaultValue;\r\n }\r\n const result = compact(path.split(/[,[\\].]+?/)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], obj);\r\n return isUndefined(result) || result === obj\r\n ? isUndefined(obj[path])\r\n ? defaultValue\r\n : obj[path]\r\n : result;\r\n};\n\nconst EVENTS = {\r\n BLUR: 'blur',\r\n FOCUS_OUT: 'focusout',\r\n CHANGE: 'change',\r\n};\r\nconst VALIDATION_MODE = {\r\n onBlur: 'onBlur',\r\n onChange: 'onChange',\r\n onSubmit: 'onSubmit',\r\n onTouched: 'onTouched',\r\n all: 'all',\r\n};\r\nconst INPUT_VALIDATION_RULES = {\r\n max: 'max',\r\n min: 'min',\r\n maxLength: 'maxLength',\r\n minLength: 'minLength',\r\n pattern: 'pattern',\r\n required: 'required',\r\n validate: 'validate',\r\n};\n\nconst HookFormContext = React.createContext(null);\r\n/**\r\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\r\n *\r\n * @returns return all useForm methods\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const methods = useForm();\r\n * const onSubmit = data => console.log(data);\r\n *\r\n * return (\r\n * \r\n *
\r\n * \r\n * \r\n * \r\n *
\r\n * );\r\n * }\r\n *\r\n * function NestedInput() {\r\n * const { register } = useFormContext(); // retrieve all hook methods\r\n * return ;\r\n * }\r\n * ```\r\n */\r\nconst useFormContext = () => React.useContext(HookFormContext);\r\n/**\r\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://reactjs.org/docs/context.html) API. To be used with {@link useFormContext}.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\r\n *\r\n * @param props - all useFrom methods\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const methods = useForm();\r\n * const onSubmit = data => console.log(data);\r\n *\r\n * return (\r\n * \r\n *
\r\n * \r\n * \r\n * \r\n *
\r\n * );\r\n * }\r\n *\r\n * function NestedInput() {\r\n * const { register } = useFormContext(); // retrieve all hook methods\r\n * return ;\r\n * }\r\n * ```\r\n */\r\nconst FormProvider = (props) => {\r\n const { children, ...data } = props;\r\n return (React.createElement(HookFormContext.Provider, { value: data }, children));\r\n};\n\nvar getProxyFormState = (formState, _proxyFormState, localProxyFormState, isRoot = true) => {\r\n const result = {};\r\n for (const key in formState) {\r\n Object.defineProperty(result, key, {\r\n get: () => {\r\n const _key = key;\r\n if (_proxyFormState[_key] !== VALIDATION_MODE.all) {\r\n _proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\r\n }\r\n localProxyFormState && (localProxyFormState[_key] = true);\r\n return formState[_key];\r\n },\r\n });\r\n }\r\n return result;\r\n};\n\nvar isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;\n\nvar shouldRenderFormState = (formStateData, _proxyFormState, isRoot) => {\r\n const { name, ...formState } = formStateData;\r\n return (isEmptyObject(formState) ||\r\n Object.keys(formState).length >= Object.keys(_proxyFormState).length ||\r\n Object.keys(formState).find((key) => _proxyFormState[key] ===\r\n (!isRoot || VALIDATION_MODE.all)));\r\n};\n\nvar convertToArrayPayload = (value) => (Array.isArray(value) ? value : [value]);\n\nvar shouldSubscribeByName = (name, signalName, exact) => exact && signalName\r\n ? name === signalName\r\n : !name ||\r\n !signalName ||\r\n name === signalName ||\r\n convertToArrayPayload(name).some((currentName) => currentName &&\r\n (currentName.startsWith(signalName) ||\r\n signalName.startsWith(currentName)));\n\nfunction useSubscribe(props) {\r\n const _props = React.useRef(props);\r\n _props.current = props;\r\n React.useEffect(() => {\r\n const tearDown = (subscription) => {\r\n if (subscription) {\r\n subscription.unsubscribe();\r\n }\r\n };\r\n const subscription = !props.disabled &&\r\n _props.current.subject.subscribe({\r\n next: _props.current.callback,\r\n });\r\n return () => tearDown(subscription);\r\n }, [props.disabled]);\r\n}\n\n/**\r\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\r\n *\r\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const { register, handleSubmit, control } = useForm({\r\n * defaultValues: {\r\n * firstName: \"firstName\"\r\n * }});\r\n * const { dirtyFields } = useFormState({\r\n * control\r\n * });\r\n * const onSubmit = (data) => console.log(data);\r\n *\r\n * return (\r\n *
\r\n * \r\n * {dirtyFields.firstName &&

Field is dirty.

}\r\n * \r\n *
\r\n * );\r\n * }\r\n * ```\r\n */\r\nfunction useFormState(props) {\r\n const methods = useFormContext();\r\n const { control = methods.control, disabled, name, exact } = props || {};\r\n const [formState, updateFormState] = React.useState(control._formState);\r\n const _localProxyFormState = React.useRef({\r\n isDirty: false,\r\n dirtyFields: false,\r\n touchedFields: false,\r\n isValidating: false,\r\n isValid: false,\r\n errors: false,\r\n });\r\n const _name = React.useRef(name);\r\n const _mounted = React.useRef(true);\r\n _name.current = name;\r\n const callback = React.useCallback((value) => _mounted.current &&\r\n shouldSubscribeByName(_name.current, value.name, exact) &&\r\n shouldRenderFormState(value, _localProxyFormState.current) &&\r\n updateFormState({\r\n ...control._formState,\r\n ...value,\r\n }), [control, exact]);\r\n useSubscribe({\r\n disabled,\r\n callback,\r\n subject: control._subjects.state,\r\n });\r\n React.useEffect(() => {\r\n _mounted.current = true;\r\n return () => {\r\n _mounted.current = false;\r\n };\r\n }, []);\r\n return getProxyFormState(formState, control._proxyFormState, _localProxyFormState.current, false);\r\n}\n\nvar isString = (value) => typeof value === 'string';\n\nvar generateWatchOutput = (names, _names, formValues, isGlobal) => {\r\n const isArray = Array.isArray(names);\r\n if (isString(names)) {\r\n isGlobal && _names.watch.add(names);\r\n return get(formValues, names);\r\n }\r\n if (isArray) {\r\n return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName),\r\n get(formValues, fieldName)));\r\n }\r\n isGlobal && (_names.watchAll = true);\r\n return formValues;\r\n};\n\nvar isFunction = (value) => typeof value === 'function';\n\nvar objectHasFunction = (data) => {\r\n for (const key in data) {\r\n if (isFunction(data[key])) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\n\n/**\r\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\r\n *\r\n * @remarks\r\n *\r\n * [API](https://react-hook-form.com/api/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\r\n *\r\n * @example\r\n * ```tsx\r\n * const { watch } = useForm();\r\n * const values = useWatch({\r\n * name: \"fieldName\"\r\n * control,\r\n * })\r\n * ```\r\n */\r\nfunction useWatch(props) {\r\n const methods = useFormContext();\r\n const { control = methods.control, name, defaultValue, disabled, exact, } = props || {};\r\n const _name = React.useRef(name);\r\n _name.current = name;\r\n const callback = React.useCallback((formState) => {\r\n if (shouldSubscribeByName(_name.current, formState.name, exact)) {\r\n const fieldValues = generateWatchOutput(_name.current, control._names, formState.values || control._formValues);\r\n updateValue(isUndefined(_name.current) ||\r\n (isObject(fieldValues) && !objectHasFunction(fieldValues))\r\n ? { ...fieldValues }\r\n : Array.isArray(fieldValues)\r\n ? [...fieldValues]\r\n : isUndefined(fieldValues)\r\n ? defaultValue\r\n : fieldValues);\r\n }\r\n }, [control, exact, defaultValue]);\r\n useSubscribe({\r\n disabled,\r\n subject: control._subjects.watch,\r\n callback,\r\n });\r\n const [value, updateValue] = React.useState(isUndefined(defaultValue)\r\n ? control._getWatch(name)\r\n : defaultValue);\r\n React.useEffect(() => {\r\n control._removeUnmounted();\r\n });\r\n return value;\r\n}\n\n/**\r\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\r\n *\r\n * @param props - the path name to the form field value, and validation rules.\r\n *\r\n * @returns field properties, field and form state. {@link UseControllerReturn}\r\n *\r\n * @example\r\n * ```tsx\r\n * function Input(props) {\r\n * const { field, fieldState, formState } = useController(props);\r\n * return (\r\n *
\r\n * \r\n *

{fieldState.isTouched && \"Touched\"}

\r\n *

{formState.isSubmitted ? \"submitted\" : \"\"}

\r\n *
\r\n * );\r\n * }\r\n * ```\r\n */\r\nfunction useController(props) {\r\n const methods = useFormContext();\r\n const { name, control = methods.control, shouldUnregister } = props;\r\n const isArrayField = isNameInFieldArray(control._names.array, name);\r\n const value = useWatch({\r\n control,\r\n name,\r\n defaultValue: get(control._formValues, name, get(control._defaultValues, name, props.defaultValue)),\r\n exact: true,\r\n });\r\n const formState = useFormState({\r\n control,\r\n name,\r\n });\r\n const _registerProps = React.useRef(control.register(name, {\r\n ...props.rules,\r\n value,\r\n }));\r\n React.useEffect(() => {\r\n const updateMounted = (name, value) => {\r\n const field = get(control._fields, name);\r\n if (field) {\r\n field._f.mount = value;\r\n }\r\n };\r\n updateMounted(name, true);\r\n return () => {\r\n const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;\r\n (isArrayField\r\n ? _shouldUnregisterField && !control._stateFlags.action\r\n : _shouldUnregisterField)\r\n ? control.unregister(name)\r\n : updateMounted(name, false);\r\n };\r\n }, [name, control, isArrayField, shouldUnregister]);\r\n return {\r\n field: {\r\n name,\r\n value,\r\n onChange: React.useCallback((event) => {\r\n _registerProps.current.onChange({\r\n target: {\r\n value: getEventValue(event),\r\n name: name,\r\n },\r\n type: EVENTS.CHANGE,\r\n });\r\n }, [name]),\r\n onBlur: React.useCallback(() => {\r\n _registerProps.current.onBlur({\r\n target: {\r\n value: get(control._formValues, name),\r\n name: name,\r\n },\r\n type: EVENTS.BLUR,\r\n });\r\n }, [name, control]),\r\n ref: React.useCallback((elm) => {\r\n const field = get(control._fields, name);\r\n if (elm && field && elm.focus) {\r\n field._f.ref = {\r\n focus: () => elm.focus(),\r\n select: () => elm.select(),\r\n setCustomValidity: (message) => elm.setCustomValidity(message),\r\n reportValidity: () => elm.reportValidity(),\r\n };\r\n }\r\n }, [name, control._fields]),\r\n },\r\n formState,\r\n fieldState: Object.defineProperties({}, {\r\n invalid: {\r\n get: () => !!get(formState.errors, name),\r\n },\r\n isDirty: {\r\n get: () => !!get(formState.dirtyFields, name),\r\n },\r\n isTouched: {\r\n get: () => !!get(formState.touchedFields, name),\r\n },\r\n error: {\r\n get: () => get(formState.errors, name),\r\n },\r\n }),\r\n };\r\n}\n\n/**\r\n * Component based on `useController` hook to work with controlled component.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\r\n *\r\n * @param props - the path name to the form field value, and validation rules.\r\n *\r\n * @returns provide field handler functions, field and form state.\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const { control } = useForm({\r\n * defaultValues: {\r\n * test: \"\"\r\n * }\r\n * });\r\n *\r\n * return (\r\n *
\r\n * (\r\n * <>\r\n * \r\n *

{formState.isSubmitted ? \"submitted\" : \"\"}

\r\n *

{fieldState.isTouched ? \"touched\" : \"\"}

\r\n * \r\n * )}\r\n * />\r\n * \r\n * );\r\n * }\r\n * ```\r\n */\r\nconst Controller = (props) => props.render(useController(props));\n\nvar appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria\r\n ? {\r\n ...errors[name],\r\n types: {\r\n ...(errors[name] && errors[name].types ? errors[name].types : {}),\r\n [type]: message || true,\r\n },\r\n }\r\n : {};\n\nvar isKey = (value) => /^\\w*$/.test(value);\n\nvar stringToPath = (input) => compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n\nfunction set(object, path, value) {\r\n let index = -1;\r\n const tempPath = isKey(path) ? [path] : stringToPath(path);\r\n const length = tempPath.length;\r\n const lastIndex = length - 1;\r\n while (++index < length) {\r\n const key = tempPath[index];\r\n let newValue = value;\r\n if (index !== lastIndex) {\r\n const objValue = object[key];\r\n newValue =\r\n isObject(objValue) || Array.isArray(objValue)\r\n ? objValue\r\n : !isNaN(+tempPath[index + 1])\r\n ? []\r\n : {};\r\n }\r\n object[key] = newValue;\r\n object = object[key];\r\n }\r\n return object;\r\n}\n\nconst focusFieldBy = (fields, callback, fieldsNames) => {\r\n for (const key of fieldsNames || Object.keys(fields)) {\r\n const field = get(fields, key);\r\n if (field) {\r\n const { _f, ...currentField } = field;\r\n if (_f && callback(_f.name)) {\r\n if (_f.ref.focus && isUndefined(_f.ref.focus())) {\r\n break;\r\n }\r\n else if (_f.refs) {\r\n _f.refs[0].focus();\r\n break;\r\n }\r\n }\r\n else if (isObject(currentField)) {\r\n focusFieldBy(currentField, callback);\r\n }\r\n }\r\n }\r\n};\n\nvar generateId = () => {\r\n const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = (Math.random() * 16 + d) % 16 | 0;\r\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\r\n });\r\n};\n\nvar getFocusFieldName = (name, index, options = {}) => options.shouldFocus || isUndefined(options.shouldFocus)\r\n ? options.focusName ||\r\n `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\r\n : '';\n\nvar isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&\r\n (_names.watchAll ||\r\n _names.watch.has(name) ||\r\n [..._names.watch].some((watchName) => name.startsWith(watchName) &&\r\n /^\\.\\w+/.test(name.slice(watchName.length))));\n\nvar updateFieldArrayRootError = (errors, error, name) => {\r\n const fieldArrayErrors = compact(get(errors, name));\r\n set(fieldArrayErrors, 'root', error[name]);\r\n set(errors, name, fieldArrayErrors);\r\n return errors;\r\n};\n\nvar isBoolean = (value) => typeof value === 'boolean';\n\nvar isFileInput = (element) => element.type === 'file';\n\nvar isMessage = (value) => isString(value) || React.isValidElement(value);\n\nvar isRadioInput = (element) => element.type === 'radio';\n\nvar isRegex = (value) => value instanceof RegExp;\n\nconst defaultResult = {\r\n value: false,\r\n isValid: false,\r\n};\r\nconst validResult = { value: true, isValid: true };\r\nvar getCheckboxValue = (options) => {\r\n if (Array.isArray(options)) {\r\n if (options.length > 1) {\r\n const values = options\r\n .filter((option) => option && option.checked && !option.disabled)\r\n .map((option) => option.value);\r\n return { value: values, isValid: !!values.length };\r\n }\r\n return options[0].checked && !options[0].disabled\r\n ? // @ts-expect-error expected to work in the browser\r\n options[0].attributes && !isUndefined(options[0].attributes.value)\r\n ? isUndefined(options[0].value) || options[0].value === ''\r\n ? validResult\r\n : { value: options[0].value, isValid: true }\r\n : validResult\r\n : defaultResult;\r\n }\r\n return defaultResult;\r\n};\n\nconst defaultReturn = {\r\n isValid: false,\r\n value: null,\r\n};\r\nvar getRadioValue = (options) => Array.isArray(options)\r\n ? options.reduce((previous, option) => option && option.checked && !option.disabled\r\n ? {\r\n isValid: true,\r\n value: option.value,\r\n }\r\n : previous, defaultReturn)\r\n : defaultReturn;\n\nfunction getValidateError(result, ref, type = 'validate') {\r\n if (isMessage(result) ||\r\n (Array.isArray(result) && result.every(isMessage)) ||\r\n (isBoolean(result) && !result)) {\r\n return {\r\n type,\r\n message: isMessage(result) ? result : '',\r\n ref,\r\n };\r\n }\r\n}\n\nvar getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData)\r\n ? validationData\r\n : {\r\n value: validationData,\r\n message: '',\r\n };\n\nvar validateField = async (field, inputValue, validateAllFieldCriteria, shouldUseNativeValidation, isFieldArray) => {\r\n const { ref, refs, required, maxLength, minLength, min, max, pattern, validate, name, valueAsNumber, mount, disabled, } = field._f;\r\n if (!mount || disabled) {\r\n return {};\r\n }\r\n const inputRef = refs ? refs[0] : ref;\r\n const setCustomValidity = (message) => {\r\n if (shouldUseNativeValidation && inputRef.reportValidity) {\r\n inputRef.setCustomValidity(isBoolean(message) ? '' : message || ' ');\r\n inputRef.reportValidity();\r\n }\r\n };\r\n const error = {};\r\n const isRadio = isRadioInput(ref);\r\n const isCheckBox = isCheckBoxInput(ref);\r\n const isRadioOrCheckbox = isRadio || isCheckBox;\r\n const isEmpty = ((valueAsNumber || isFileInput(ref)) && !ref.value) ||\r\n inputValue === '' ||\r\n (Array.isArray(inputValue) && !inputValue.length);\r\n const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);\r\n const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {\r\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\r\n error[name] = {\r\n type: exceedMax ? maxType : minType,\r\n message,\r\n ref,\r\n ...appendErrorsCurry(exceedMax ? maxType : minType, message),\r\n };\r\n };\r\n if (isFieldArray\r\n ? !Array.isArray(inputValue) || !inputValue.length\r\n : required &&\r\n ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\r\n (isBoolean(inputValue) && !inputValue) ||\r\n (isCheckBox && !getCheckboxValue(refs).isValid) ||\r\n (isRadio && !getRadioValue(refs).isValid))) {\r\n const { value, message } = isMessage(required)\r\n ? { value: !!required, message: required }\r\n : getValueAndMessage(required);\r\n if (value) {\r\n error[name] = {\r\n type: INPUT_VALIDATION_RULES.required,\r\n message,\r\n ref: inputRef,\r\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\r\n };\r\n if (!validateAllFieldCriteria) {\r\n setCustomValidity(message);\r\n return error;\r\n }\r\n }\r\n }\r\n if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\r\n let exceedMax;\r\n let exceedMin;\r\n const maxOutput = getValueAndMessage(max);\r\n const minOutput = getValueAndMessage(min);\r\n if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {\r\n const valueNumber = ref.valueAsNumber || +inputValue;\r\n if (!isNullOrUndefined(maxOutput.value)) {\r\n exceedMax = valueNumber > maxOutput.value;\r\n }\r\n if (!isNullOrUndefined(minOutput.value)) {\r\n exceedMin = valueNumber < minOutput.value;\r\n }\r\n }\r\n else {\r\n const valueDate = ref.valueAsDate || new Date(inputValue);\r\n if (isString(maxOutput.value)) {\r\n exceedMax = valueDate > new Date(maxOutput.value);\r\n }\r\n if (isString(minOutput.value)) {\r\n exceedMin = valueDate < new Date(minOutput.value);\r\n }\r\n }\r\n if (exceedMax || exceedMin) {\r\n getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);\r\n if (!validateAllFieldCriteria) {\r\n setCustomValidity(error[name].message);\r\n return error;\r\n }\r\n }\r\n }\r\n if ((maxLength || minLength) &&\r\n !isEmpty &&\r\n (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))) {\r\n const maxLengthOutput = getValueAndMessage(maxLength);\r\n const minLengthOutput = getValueAndMessage(minLength);\r\n const exceedMax = !isNullOrUndefined(maxLengthOutput.value) &&\r\n inputValue.length > maxLengthOutput.value;\r\n const exceedMin = !isNullOrUndefined(minLengthOutput.value) &&\r\n inputValue.length < minLengthOutput.value;\r\n if (exceedMax || exceedMin) {\r\n getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);\r\n if (!validateAllFieldCriteria) {\r\n setCustomValidity(error[name].message);\r\n return error;\r\n }\r\n }\r\n }\r\n if (pattern && !isEmpty && isString(inputValue)) {\r\n const { value: patternValue, message } = getValueAndMessage(pattern);\r\n if (isRegex(patternValue) && !inputValue.match(patternValue)) {\r\n error[name] = {\r\n type: INPUT_VALIDATION_RULES.pattern,\r\n message,\r\n ref,\r\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\r\n };\r\n if (!validateAllFieldCriteria) {\r\n setCustomValidity(message);\r\n return error;\r\n }\r\n }\r\n }\r\n if (validate) {\r\n if (isFunction(validate)) {\r\n const result = await validate(inputValue);\r\n const validateError = getValidateError(result, inputRef);\r\n if (validateError) {\r\n error[name] = {\r\n ...validateError,\r\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message),\r\n };\r\n if (!validateAllFieldCriteria) {\r\n setCustomValidity(validateError.message);\r\n return error;\r\n }\r\n }\r\n }\r\n else if (isObject(validate)) {\r\n let validationResult = {};\r\n for (const key in validate) {\r\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\r\n break;\r\n }\r\n const validateError = getValidateError(await validate[key](inputValue), inputRef, key);\r\n if (validateError) {\r\n validationResult = {\r\n ...validateError,\r\n ...appendErrorsCurry(key, validateError.message),\r\n };\r\n setCustomValidity(validateError.message);\r\n if (validateAllFieldCriteria) {\r\n error[name] = validationResult;\r\n }\r\n }\r\n }\r\n if (!isEmptyObject(validationResult)) {\r\n error[name] = {\r\n ref: inputRef,\r\n ...validationResult,\r\n };\r\n if (!validateAllFieldCriteria) {\r\n return error;\r\n }\r\n }\r\n }\r\n }\r\n setCustomValidity(true);\r\n return error;\r\n};\n\nfunction append(data, value) {\r\n return [...data, ...convertToArrayPayload(value)];\r\n}\n\nvar isWeb = typeof window !== 'undefined' &&\r\n typeof window.HTMLElement !== 'undefined' &&\r\n typeof document !== 'undefined';\n\nfunction cloneObject(data) {\r\n let copy;\r\n const isArray = Array.isArray(data);\r\n if (data instanceof Date) {\r\n copy = new Date(data);\r\n }\r\n else if (data instanceof Set) {\r\n copy = new Set(data);\r\n }\r\n else if (!(isWeb && (data instanceof Blob || data instanceof FileList)) &&\r\n (isArray || isObject(data))) {\r\n copy = isArray ? [] : {};\r\n for (const key in data) {\r\n if (isFunction(data[key])) {\r\n copy = data;\r\n break;\r\n }\r\n copy[key] = cloneObject(data[key]);\r\n }\r\n }\r\n else {\r\n return data;\r\n }\r\n return copy;\r\n}\n\nvar fillEmptyArray = (value) => Array.isArray(value) ? value.map(() => undefined) : undefined;\n\nvar getValidationModes = (mode) => ({\r\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\r\n isOnBlur: mode === VALIDATION_MODE.onBlur,\r\n isOnChange: mode === VALIDATION_MODE.onChange,\r\n isOnAll: mode === VALIDATION_MODE.all,\r\n isOnTouch: mode === VALIDATION_MODE.onTouched,\r\n});\n\nfunction insert(data, index, value) {\r\n return [\r\n ...data.slice(0, index),\r\n ...convertToArrayPayload(value),\r\n ...data.slice(index),\r\n ];\r\n}\n\nvar moveArrayAt = (data, from, to) => {\r\n if (!Array.isArray(data)) {\r\n return [];\r\n }\r\n if (isUndefined(data[to])) {\r\n data[to] = undefined;\r\n }\r\n data.splice(to, 0, data.splice(from, 1)[0]);\r\n return data;\r\n};\n\nfunction prepend(data, value) {\r\n return [...convertToArrayPayload(value), ...convertToArrayPayload(data)];\r\n}\n\nfunction removeAtIndexes(data, indexes) {\r\n let i = 0;\r\n const temp = [...data];\r\n for (const index of indexes) {\r\n temp.splice(index - i, 1);\r\n i++;\r\n }\r\n return compact(temp).length ? temp : [];\r\n}\r\nvar removeArrayAt = (data, index) => isUndefined(index)\r\n ? []\r\n : removeAtIndexes(data, convertToArrayPayload(index).sort((a, b) => a - b));\n\nvar swapArrayAt = (data, indexA, indexB) => {\r\n data[indexA] = [data[indexB], (data[indexB] = data[indexA])][0];\r\n};\n\nfunction baseGet(object, updatePath) {\r\n const length = updatePath.slice(0, -1).length;\r\n let index = 0;\r\n while (index < length) {\r\n object = isUndefined(object) ? index++ : object[updatePath[index++]];\r\n }\r\n return object;\r\n}\r\nfunction isEmptyArray(obj) {\r\n for (const key in obj) {\r\n if (!isUndefined(obj[key])) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\nfunction unset(object, path) {\r\n const updatePath = isKey(path) ? [path] : stringToPath(path);\r\n const childObject = updatePath.length == 1 ? object : baseGet(object, updatePath);\r\n const key = updatePath[updatePath.length - 1];\r\n let previousObjRef;\r\n if (childObject) {\r\n delete childObject[key];\r\n }\r\n for (let k = 0; k < updatePath.slice(0, -1).length; k++) {\r\n let index = -1;\r\n let objectRef;\r\n const currentPaths = updatePath.slice(0, -(k + 1));\r\n const currentPathsLength = currentPaths.length - 1;\r\n if (k > 0) {\r\n previousObjRef = object;\r\n }\r\n while (++index < currentPaths.length) {\r\n const item = currentPaths[index];\r\n objectRef = objectRef ? objectRef[item] : object[item];\r\n if (currentPathsLength === index &&\r\n ((isObject(objectRef) && isEmptyObject(objectRef)) ||\r\n (Array.isArray(objectRef) && isEmptyArray(objectRef)))) {\r\n previousObjRef ? delete previousObjRef[item] : delete object[item];\r\n }\r\n previousObjRef = objectRef;\r\n }\r\n }\r\n return object;\r\n}\n\nvar updateAt = (fieldValues, index, value) => {\r\n fieldValues[index] = value;\r\n return fieldValues;\r\n};\n\n/**\r\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\r\n *\r\n * @param props - useFieldArray props\r\n *\r\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const { register, control, handleSubmit, reset, trigger, setError } = useForm({\r\n * defaultValues: {\r\n * test: []\r\n * }\r\n * });\r\n * const { fields, append } = useFieldArray({\r\n * control,\r\n * name: \"test\"\r\n * });\r\n *\r\n * return (\r\n *
console.log(data))}>\r\n * {fields.map((item, index) => (\r\n * \r\n * ))}\r\n * \r\n * \r\n *
\r\n * );\r\n * }\r\n * ```\r\n */\r\nfunction useFieldArray(props) {\r\n const methods = useFormContext();\r\n const { control = methods.control, name, keyName = 'id', shouldUnregister, } = props;\r\n const [fields, setFields] = React.useState(control._getFieldArray(name));\r\n const ids = React.useRef(control._getFieldArray(name).map(generateId));\r\n const _fieldIds = React.useRef(fields);\r\n const _name = React.useRef(name);\r\n const _actioned = React.useRef(false);\r\n _name.current = name;\r\n _fieldIds.current = fields;\r\n control._names.array.add(name);\r\n props.rules &&\r\n control.register(name, props.rules);\r\n const callback = React.useCallback(({ values, name: fieldArrayName, }) => {\r\n if (fieldArrayName === _name.current || !fieldArrayName) {\r\n const fieldValues = get(values, _name.current, []);\r\n setFields(fieldValues);\r\n ids.current = fieldValues.map(generateId);\r\n }\r\n }, []);\r\n useSubscribe({\r\n callback,\r\n subject: control._subjects.array,\r\n });\r\n const updateValues = React.useCallback((updatedFieldArrayValues) => {\r\n _actioned.current = true;\r\n control._updateFieldArray(name, updatedFieldArrayValues);\r\n }, [control, name]);\r\n const append$1 = (value, options) => {\r\n const appendValue = convertToArrayPayload(cloneObject(value));\r\n const updatedFieldArrayValues = append(control._getFieldArray(name), appendValue);\r\n control._names.focus = getFocusFieldName(name, updatedFieldArrayValues.length - 1, options);\r\n ids.current = append(ids.current, appendValue.map(generateId));\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, append, {\r\n argA: fillEmptyArray(value),\r\n });\r\n };\r\n const prepend$1 = (value, options) => {\r\n const prependValue = convertToArrayPayload(cloneObject(value));\r\n const updatedFieldArrayValues = prepend(control._getFieldArray(name), prependValue);\r\n control._names.focus = getFocusFieldName(name, 0, options);\r\n ids.current = prepend(ids.current, prependValue.map(generateId));\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, prepend, {\r\n argA: fillEmptyArray(value),\r\n });\r\n };\r\n const remove = (index) => {\r\n const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);\r\n ids.current = removeArrayAt(ids.current, index);\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\r\n argA: index,\r\n });\r\n };\r\n const insert$1 = (index, value, options) => {\r\n const insertValue = convertToArrayPayload(cloneObject(value));\r\n const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);\r\n control._names.focus = getFocusFieldName(name, index, options);\r\n ids.current = insert(ids.current, index, insertValue.map(generateId));\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, insert, {\r\n argA: index,\r\n argB: fillEmptyArray(value),\r\n });\r\n };\r\n const swap = (indexA, indexB) => {\r\n const updatedFieldArrayValues = control._getFieldArray(name);\r\n swapArrayAt(updatedFieldArrayValues, indexA, indexB);\r\n swapArrayAt(ids.current, indexA, indexB);\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, swapArrayAt, {\r\n argA: indexA,\r\n argB: indexB,\r\n }, false);\r\n };\r\n const move = (from, to) => {\r\n const updatedFieldArrayValues = control._getFieldArray(name);\r\n moveArrayAt(updatedFieldArrayValues, from, to);\r\n moveArrayAt(ids.current, from, to);\r\n updateValues(updatedFieldArrayValues);\r\n setFields(updatedFieldArrayValues);\r\n control._updateFieldArray(name, updatedFieldArrayValues, moveArrayAt, {\r\n argA: from,\r\n argB: to,\r\n }, false);\r\n };\r\n const update = (index, value) => {\r\n const updateValue = cloneObject(value);\r\n const updatedFieldArrayValues = updateAt(control._getFieldArray(name), index, updateValue);\r\n ids.current = [...updatedFieldArrayValues].map((item, i) => !item || i === index ? generateId() : ids.current[i]);\r\n updateValues(updatedFieldArrayValues);\r\n setFields([...updatedFieldArrayValues]);\r\n control._updateFieldArray(name, updatedFieldArrayValues, updateAt, {\r\n argA: index,\r\n argB: updateValue,\r\n }, true, false);\r\n };\r\n const replace = (value) => {\r\n const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\r\n ids.current = updatedFieldArrayValues.map(generateId);\r\n updateValues([...updatedFieldArrayValues]);\r\n setFields([...updatedFieldArrayValues]);\r\n control._updateFieldArray(name, [...updatedFieldArrayValues], (data) => data, {}, true, false);\r\n };\r\n React.useEffect(() => {\r\n control._stateFlags.action = false;\r\n isWatched(name, control._names) && control._subjects.state.next({});\r\n if (_actioned.current) {\r\n if (control._options.resolver) {\r\n control._executeSchema([name]).then((result) => {\r\n const error = get(result.errors, name);\r\n const existingError = get(control._formState.errors, name);\r\n if (existingError ? !error && existingError.type : error && error.type) {\r\n error\r\n ? set(control._formState.errors, name, error)\r\n : unset(control._formState.errors, name);\r\n control._subjects.state.next({\r\n errors: control._formState.errors,\r\n });\r\n }\r\n });\r\n }\r\n else {\r\n const field = get(control._fields, name);\r\n const validationModeBeforeSubmit = getValidationModes(control._options.mode);\r\n if ((!validationModeBeforeSubmit.isOnSubmit ||\r\n control._formState.isSubmitted) &&\r\n field &&\r\n field._f) {\r\n validateField(field, get(control._formValues, name), control._options.criteriaMode === VALIDATION_MODE.all, control._options.shouldUseNativeValidation, true).then((error) => !isEmptyObject(error) &&\r\n control._subjects.state.next({\r\n errors: updateFieldArrayRootError(control._formState.errors, error, name),\r\n }));\r\n }\r\n }\r\n }\r\n control._subjects.watch.next({\r\n name,\r\n values: control._formValues,\r\n });\r\n control._names.focus &&\r\n focusFieldBy(control._fields, (key) => key.startsWith(control._names.focus));\r\n control._names.focus = '';\r\n control._proxyFormState.isValid && control._updateValid();\r\n }, [fields, name, control]);\r\n React.useEffect(() => {\r\n !get(control._formValues, name) && control._updateFieldArray(name);\r\n return () => {\r\n (control._options.shouldUnregister || shouldUnregister) &&\r\n control.unregister(name);\r\n };\r\n }, [name, control, keyName, shouldUnregister]);\r\n return {\r\n swap: React.useCallback(swap, [updateValues, name, control]),\r\n move: React.useCallback(move, [updateValues, name, control]),\r\n prepend: React.useCallback(prepend$1, [updateValues, name, control]),\r\n append: React.useCallback(append$1, [updateValues, name, control]),\r\n remove: React.useCallback(remove, [updateValues, name, control]),\r\n insert: React.useCallback(insert$1, [updateValues, name, control]),\r\n update: React.useCallback(update, [updateValues, name, control]),\r\n replace: React.useCallback(replace, [updateValues, name, control]),\r\n fields: React.useMemo(() => fields.map((field, index) => ({\r\n ...field,\r\n [keyName]: ids.current[index] || generateId(),\r\n })), [fields, keyName]),\r\n };\r\n}\n\nfunction createSubject() {\r\n let _observers = [];\r\n const next = (value) => {\r\n for (const observer of _observers) {\r\n observer.next(value);\r\n }\r\n };\r\n const subscribe = (observer) => {\r\n _observers.push(observer);\r\n return {\r\n unsubscribe: () => {\r\n _observers = _observers.filter((o) => o !== observer);\r\n },\r\n };\r\n };\r\n const unsubscribe = () => {\r\n _observers = [];\r\n };\r\n return {\r\n get observers() {\r\n return _observers;\r\n },\r\n next,\r\n subscribe,\r\n unsubscribe,\r\n };\r\n}\n\nvar isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);\n\nfunction deepEqual(object1, object2) {\r\n if (isPrimitive(object1) || isPrimitive(object2)) {\r\n return object1 === object2;\r\n }\r\n if (isDateObject(object1) && isDateObject(object2)) {\r\n return object1.getTime() === object2.getTime();\r\n }\r\n const keys1 = Object.keys(object1);\r\n const keys2 = Object.keys(object2);\r\n if (keys1.length !== keys2.length) {\r\n return false;\r\n }\r\n for (const key of keys1) {\r\n const val1 = object1[key];\r\n if (!keys2.includes(key)) {\r\n return false;\r\n }\r\n if (key !== 'ref') {\r\n const val2 = object2[key];\r\n if ((isDateObject(val1) && isDateObject(val2)) ||\r\n (isObject(val1) && isObject(val2)) ||\r\n (Array.isArray(val1) && Array.isArray(val2))\r\n ? !deepEqual(val1, val2)\r\n : val1 !== val2) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n}\n\nvar isHTMLElement = (value) => {\r\n const owner = value ? value.ownerDocument : 0;\r\n const ElementClass = owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement;\r\n return value instanceof ElementClass;\r\n};\n\nvar isMultipleSelect = (element) => element.type === `select-multiple`;\n\nvar isRadioOrCheckbox = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);\n\nvar live = (ref) => isHTMLElement(ref) && ref.isConnected;\n\nfunction markFieldsDirty(data, fields = {}) {\r\n const isParentNodeArray = Array.isArray(data);\r\n if (isObject(data) || isParentNodeArray) {\r\n for (const key in data) {\r\n if (Array.isArray(data[key]) ||\r\n (isObject(data[key]) && !objectHasFunction(data[key]))) {\r\n fields[key] = Array.isArray(data[key]) ? [] : {};\r\n markFieldsDirty(data[key], fields[key]);\r\n }\r\n else if (!isNullOrUndefined(data[key])) {\r\n fields[key] = true;\r\n }\r\n }\r\n }\r\n return fields;\r\n}\r\nfunction getDirtyFieldsFromDefaultValues(data, formValues, dirtyFieldsFromValues) {\r\n const isParentNodeArray = Array.isArray(data);\r\n if (isObject(data) || isParentNodeArray) {\r\n for (const key in data) {\r\n if (Array.isArray(data[key]) ||\r\n (isObject(data[key]) && !objectHasFunction(data[key]))) {\r\n if (isUndefined(formValues) ||\r\n isPrimitive(dirtyFieldsFromValues[key])) {\r\n dirtyFieldsFromValues[key] = Array.isArray(data[key])\r\n ? markFieldsDirty(data[key], [])\r\n : { ...markFieldsDirty(data[key]) };\r\n }\r\n else {\r\n getDirtyFieldsFromDefaultValues(data[key], isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);\r\n }\r\n }\r\n else {\r\n dirtyFieldsFromValues[key] = !deepEqual(data[key], formValues[key]);\r\n }\r\n }\r\n }\r\n return dirtyFieldsFromValues;\r\n}\r\nvar getDirtyFields = (defaultValues, formValues) => getDirtyFieldsFromDefaultValues(defaultValues, formValues, markFieldsDirty(formValues));\n\nvar getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value)\r\n ? value\r\n : valueAsNumber\r\n ? value === '' || isNullOrUndefined(value)\r\n ? NaN\r\n : +value\r\n : valueAsDate && isString(value)\r\n ? new Date(value)\r\n : setValueAs\r\n ? setValueAs(value)\r\n : value;\n\nfunction getFieldValue(_f) {\r\n const ref = _f.ref;\r\n if (_f.refs ? _f.refs.every((ref) => ref.disabled) : ref.disabled) {\r\n return;\r\n }\r\n if (isFileInput(ref)) {\r\n return ref.files;\r\n }\r\n if (isRadioInput(ref)) {\r\n return getRadioValue(_f.refs).value;\r\n }\r\n if (isMultipleSelect(ref)) {\r\n return [...ref.selectedOptions].map(({ value }) => value);\r\n }\r\n if (isCheckBoxInput(ref)) {\r\n return getCheckboxValue(_f.refs).value;\r\n }\r\n return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\r\n}\n\nvar getResolverOptions = (fieldsNames, _fields, criteriaMode, shouldUseNativeValidation) => {\r\n const fields = {};\r\n for (const name of fieldsNames) {\r\n const field = get(_fields, name);\r\n field && set(fields, name, field._f);\r\n }\r\n return {\r\n criteriaMode,\r\n names: [...fieldsNames],\r\n fields,\r\n shouldUseNativeValidation,\r\n };\r\n};\n\nvar getRuleValue = (rule) => isUndefined(rule)\r\n ? undefined\r\n : isRegex(rule)\r\n ? rule.source\r\n : isObject(rule)\r\n ? isRegex(rule.value)\r\n ? rule.value.source\r\n : rule.value\r\n : rule;\n\nvar hasValidation = (options) => options.mount &&\r\n (options.required ||\r\n options.min ||\r\n options.max ||\r\n options.maxLength ||\r\n options.minLength ||\r\n options.pattern ||\r\n options.validate);\n\nfunction schemaErrorLookup(errors, _fields, name) {\r\n const error = get(errors, name);\r\n if (error || isKey(name)) {\r\n return {\r\n error,\r\n name,\r\n };\r\n }\r\n const names = name.split('.');\r\n while (names.length) {\r\n const fieldName = names.join('.');\r\n const field = get(_fields, fieldName);\r\n const foundError = get(errors, fieldName);\r\n if (field && !Array.isArray(field) && name !== fieldName) {\r\n return { name };\r\n }\r\n if (foundError && foundError.type) {\r\n return {\r\n name: fieldName,\r\n error: foundError,\r\n };\r\n }\r\n names.pop();\r\n }\r\n return {\r\n name,\r\n };\r\n}\n\nvar skipValidation = (isBlurEvent, isTouched, isSubmitted, reValidateMode, mode) => {\r\n if (mode.isOnAll) {\r\n return false;\r\n }\r\n else if (!isSubmitted && mode.isOnTouch) {\r\n return !(isTouched || isBlurEvent);\r\n }\r\n else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\r\n return !isBlurEvent;\r\n }\r\n else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\r\n return isBlurEvent;\r\n }\r\n return true;\r\n};\n\nvar unsetEmptyArray = (ref, name) => !compact(get(ref, name)).length && unset(ref, name);\n\nconst defaultOptions = {\r\n mode: VALIDATION_MODE.onSubmit,\r\n reValidateMode: VALIDATION_MODE.onChange,\r\n shouldFocusError: true,\r\n};\r\nfunction createFormControl(props = {}) {\r\n let _options = {\r\n ...defaultOptions,\r\n ...props,\r\n };\r\n let _formState = {\r\n isDirty: false,\r\n isValidating: false,\r\n dirtyFields: {},\r\n isSubmitted: false,\r\n submitCount: 0,\r\n touchedFields: {},\r\n isSubmitting: false,\r\n isSubmitSuccessful: false,\r\n isValid: false,\r\n errors: {},\r\n };\r\n let _fields = {};\r\n let _defaultValues = cloneObject(_options.defaultValues) || {};\r\n let _formValues = _options.shouldUnregister\r\n ? {}\r\n : cloneObject(_defaultValues);\r\n let _stateFlags = {\r\n action: false,\r\n mount: false,\r\n watch: false,\r\n };\r\n let _names = {\r\n mount: new Set(),\r\n unMount: new Set(),\r\n array: new Set(),\r\n watch: new Set(),\r\n };\r\n let delayErrorCallback;\r\n let timer = 0;\r\n let validateFields = {};\r\n const _proxyFormState = {\r\n isDirty: false,\r\n dirtyFields: false,\r\n touchedFields: false,\r\n isValidating: false,\r\n isValid: false,\r\n errors: false,\r\n };\r\n const _subjects = {\r\n watch: createSubject(),\r\n array: createSubject(),\r\n state: createSubject(),\r\n };\r\n const validationModeBeforeSubmit = getValidationModes(_options.mode);\r\n const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\r\n const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;\r\n const debounce = (callback) => (wait) => {\r\n clearTimeout(timer);\r\n timer = window.setTimeout(callback, wait);\r\n };\r\n const _updateValid = async (shouldSkipRender) => {\r\n let isValid = false;\r\n if (_proxyFormState.isValid) {\r\n isValid = _options.resolver\r\n ? isEmptyObject((await _executeSchema()).errors)\r\n : await executeBuiltInValidation(_fields, true);\r\n if (!shouldSkipRender && isValid !== _formState.isValid) {\r\n _formState.isValid = isValid;\r\n _subjects.state.next({\r\n isValid,\r\n });\r\n }\r\n }\r\n return isValid;\r\n };\r\n const _updateFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => {\r\n if (args && method) {\r\n _stateFlags.action = true;\r\n if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\r\n const fieldValues = method(get(_fields, name), args.argA, args.argB);\r\n shouldSetValues && set(_fields, name, fieldValues);\r\n }\r\n if (_proxyFormState.errors &&\r\n shouldUpdateFieldsAndState &&\r\n Array.isArray(get(_formState.errors, name))) {\r\n const errors = method(get(_formState.errors, name), args.argA, args.argB);\r\n shouldSetValues && set(_formState.errors, name, errors);\r\n unsetEmptyArray(_formState.errors, name);\r\n }\r\n if (_proxyFormState.touchedFields &&\r\n shouldUpdateFieldsAndState &&\r\n Array.isArray(get(_formState.touchedFields, name))) {\r\n const touchedFields = method(get(_formState.touchedFields, name), args.argA, args.argB);\r\n shouldSetValues && set(_formState.touchedFields, name, touchedFields);\r\n }\r\n if (_proxyFormState.dirtyFields) {\r\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\r\n }\r\n _subjects.state.next({\r\n isDirty: _getDirty(name, values),\r\n dirtyFields: _formState.dirtyFields,\r\n errors: _formState.errors,\r\n isValid: _formState.isValid,\r\n });\r\n }\r\n else {\r\n set(_formValues, name, values);\r\n }\r\n };\r\n const updateErrors = (name, error) => {\r\n set(_formState.errors, name, error);\r\n _subjects.state.next({\r\n errors: _formState.errors,\r\n });\r\n };\r\n const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {\r\n const field = get(_fields, name);\r\n if (field) {\r\n const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);\r\n isUndefined(defaultValue) ||\r\n (ref && ref.defaultChecked) ||\r\n shouldSkipSetValueAs\r\n ? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f))\r\n : setFieldValue(name, defaultValue);\r\n _stateFlags.mount && _updateValid();\r\n }\r\n };\r\n const updateTouchAndDirty = (name, fieldValue, isBlurEvent, shouldDirty, shouldRender) => {\r\n let isFieldDirty = false;\r\n const output = {\r\n name,\r\n };\r\n const isPreviousFieldTouched = get(_formState.touchedFields, name);\r\n if (_proxyFormState.isDirty) {\r\n const isPreviousFormDirty = _formState.isDirty;\r\n _formState.isDirty = output.isDirty = _getDirty();\r\n isFieldDirty = isPreviousFormDirty !== output.isDirty;\r\n }\r\n if (_proxyFormState.dirtyFields && (!isBlurEvent || shouldDirty)) {\r\n const isPreviousFieldDirty = get(_formState.dirtyFields, name);\r\n const isCurrentFieldPristine = deepEqual(get(_defaultValues, name), fieldValue);\r\n isCurrentFieldPristine\r\n ? unset(_formState.dirtyFields, name)\r\n : set(_formState.dirtyFields, name, true);\r\n output.dirtyFields = _formState.dirtyFields;\r\n isFieldDirty =\r\n isFieldDirty ||\r\n isPreviousFieldDirty !== get(_formState.dirtyFields, name);\r\n }\r\n if (isBlurEvent && !isPreviousFieldTouched) {\r\n set(_formState.touchedFields, name, isBlurEvent);\r\n output.touchedFields = _formState.touchedFields;\r\n isFieldDirty =\r\n isFieldDirty ||\r\n (_proxyFormState.touchedFields &&\r\n isPreviousFieldTouched !== isBlurEvent);\r\n }\r\n isFieldDirty && shouldRender && _subjects.state.next(output);\r\n return isFieldDirty ? output : {};\r\n };\r\n const shouldRenderByError = async (name, isValid, error, fieldState) => {\r\n const previousFieldError = get(_formState.errors, name);\r\n const shouldUpdateValid = _proxyFormState.isValid && _formState.isValid !== isValid;\r\n if (props.delayError && error) {\r\n delayErrorCallback = debounce(() => updateErrors(name, error));\r\n delayErrorCallback(props.delayError);\r\n }\r\n else {\r\n clearTimeout(timer);\r\n delayErrorCallback = null;\r\n error\r\n ? set(_formState.errors, name, error)\r\n : unset(_formState.errors, name);\r\n }\r\n if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\r\n !isEmptyObject(fieldState) ||\r\n shouldUpdateValid) {\r\n const updatedFormState = {\r\n ...fieldState,\r\n ...(shouldUpdateValid ? { isValid } : {}),\r\n errors: _formState.errors,\r\n name,\r\n };\r\n _formState = {\r\n ..._formState,\r\n ...updatedFormState,\r\n };\r\n _subjects.state.next(updatedFormState);\r\n }\r\n validateFields[name]--;\r\n if (_proxyFormState.isValidating &&\r\n !Object.values(validateFields).some((v) => v)) {\r\n _subjects.state.next({\r\n isValidating: false,\r\n });\r\n validateFields = {};\r\n }\r\n };\r\n const _executeSchema = async (name) => _options.resolver\r\n ? await _options.resolver({ ..._formValues }, _options.context, getResolverOptions(name || _names.mount, _fields, _options.criteriaMode, _options.shouldUseNativeValidation))\r\n : {};\r\n const executeSchemaAndUpdateState = async (names) => {\r\n const { errors } = await _executeSchema();\r\n if (names) {\r\n for (const name of names) {\r\n const error = get(errors, name);\r\n error\r\n ? set(_formState.errors, name, error)\r\n : unset(_formState.errors, name);\r\n }\r\n }\r\n else {\r\n _formState.errors = errors;\r\n }\r\n return errors;\r\n };\r\n const executeBuiltInValidation = async (fields, shouldOnlyCheckValid, context = {\r\n valid: true,\r\n }) => {\r\n for (const name in fields) {\r\n const field = fields[name];\r\n if (field) {\r\n const { _f, ...fieldValue } = field;\r\n if (_f) {\r\n const isFieldArrayRoot = _names.array.has(_f.name);\r\n const fieldError = await validateField(field, get(_formValues, _f.name), shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation, isFieldArrayRoot);\r\n if (fieldError[_f.name]) {\r\n context.valid = false;\r\n if (shouldOnlyCheckValid) {\r\n break;\r\n }\r\n }\r\n !shouldOnlyCheckValid &&\r\n (get(fieldError, _f.name)\r\n ? isFieldArrayRoot\r\n ? updateFieldArrayRootError(_formState.errors, fieldError, _f.name)\r\n : set(_formState.errors, _f.name, fieldError[_f.name])\r\n : unset(_formState.errors, _f.name));\r\n }\r\n fieldValue &&\r\n (await executeBuiltInValidation(fieldValue, shouldOnlyCheckValid, context));\r\n }\r\n }\r\n return context.valid;\r\n };\r\n const _removeUnmounted = () => {\r\n for (const name of _names.unMount) {\r\n const field = get(_fields, name);\r\n field &&\r\n (field._f.refs\r\n ? field._f.refs.every((ref) => !live(ref))\r\n : !live(field._f.ref)) &&\r\n unregister(name);\r\n }\r\n _names.unMount = new Set();\r\n };\r\n const _getDirty = (name, data) => (name && data && set(_formValues, name, data),\r\n !deepEqual(getValues(), _defaultValues));\r\n const _getWatch = (names, defaultValue, isGlobal) => {\r\n const fieldValues = {\r\n ...(_stateFlags.mount\r\n ? _formValues\r\n : isUndefined(defaultValue)\r\n ? _defaultValues\r\n : isString(names)\r\n ? { [names]: defaultValue }\r\n : defaultValue),\r\n };\r\n return generateWatchOutput(names, _names, fieldValues, isGlobal);\r\n };\r\n const _getFieldArray = (name) => compact(get(_stateFlags.mount ? _formValues : _defaultValues, name, props.shouldUnregister ? get(_defaultValues, name, []) : []));\r\n const setFieldValue = (name, value, options = {}) => {\r\n const field = get(_fields, name);\r\n let fieldValue = value;\r\n if (field) {\r\n const fieldReference = field._f;\r\n if (fieldReference) {\r\n !fieldReference.disabled &&\r\n set(_formValues, name, getFieldValueAs(value, fieldReference));\r\n fieldValue =\r\n isWeb && isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\r\n ? ''\r\n : value;\r\n if (isMultipleSelect(fieldReference.ref)) {\r\n [...fieldReference.ref.options].forEach((selectRef) => (selectRef.selected = fieldValue.includes(selectRef.value)));\r\n }\r\n else if (fieldReference.refs) {\r\n if (isCheckBoxInput(fieldReference.ref)) {\r\n fieldReference.refs.length > 1\r\n ? fieldReference.refs.forEach((checkboxRef) => !checkboxRef.disabled &&\r\n (checkboxRef.checked = Array.isArray(fieldValue)\r\n ? !!fieldValue.find((data) => data === checkboxRef.value)\r\n : fieldValue === checkboxRef.value))\r\n : fieldReference.refs[0] &&\r\n (fieldReference.refs[0].checked = !!fieldValue);\r\n }\r\n else {\r\n fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));\r\n }\r\n }\r\n else if (isFileInput(fieldReference.ref)) {\r\n fieldReference.ref.value = '';\r\n }\r\n else {\r\n fieldReference.ref.value = fieldValue;\r\n if (!fieldReference.ref.type) {\r\n _subjects.watch.next({\r\n name,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n (options.shouldDirty || options.shouldTouch) &&\r\n updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, true);\r\n options.shouldValidate && trigger(name);\r\n };\r\n const setValues = (name, value, options) => {\r\n for (const fieldKey in value) {\r\n const fieldValue = value[fieldKey];\r\n const fieldName = `${name}.${fieldKey}`;\r\n const field = get(_fields, fieldName);\r\n (_names.array.has(name) ||\r\n !isPrimitive(fieldValue) ||\r\n (field && !field._f)) &&\r\n !isDateObject(fieldValue)\r\n ? setValues(fieldName, fieldValue, options)\r\n : setFieldValue(fieldName, fieldValue, options);\r\n }\r\n };\r\n const setValue = (name, value, options = {}) => {\r\n const field = get(_fields, name);\r\n const isFieldArray = _names.array.has(name);\r\n const cloneValue = cloneObject(value);\r\n set(_formValues, name, cloneValue);\r\n if (isFieldArray) {\r\n _subjects.array.next({\r\n name,\r\n values: _formValues,\r\n });\r\n if ((_proxyFormState.isDirty || _proxyFormState.dirtyFields) &&\r\n options.shouldDirty) {\r\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\r\n _subjects.state.next({\r\n name,\r\n dirtyFields: _formState.dirtyFields,\r\n isDirty: _getDirty(name, cloneValue),\r\n });\r\n }\r\n }\r\n else {\r\n field && !field._f && !isNullOrUndefined(cloneValue)\r\n ? setValues(name, cloneValue, options)\r\n : setFieldValue(name, cloneValue, options);\r\n }\r\n isWatched(name, _names) && _subjects.state.next({});\r\n _subjects.watch.next({\r\n name,\r\n });\r\n };\r\n const onChange = async (event) => {\r\n const target = event.target;\r\n let name = target.name;\r\n const field = get(_fields, name);\r\n if (field) {\r\n let error;\r\n let isValid;\r\n const fieldValue = target.type\r\n ? getFieldValue(field._f)\r\n : getEventValue(event);\r\n const isBlurEvent = event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\r\n const shouldSkipValidation = (!hasValidation(field._f) &&\r\n !_options.resolver &&\r\n !get(_formState.errors, name) &&\r\n !field._f.deps) ||\r\n skipValidation(isBlurEvent, get(_formState.touchedFields, name), _formState.isSubmitted, validationModeAfterSubmit, validationModeBeforeSubmit);\r\n const watched = isWatched(name, _names, isBlurEvent);\r\n set(_formValues, name, fieldValue);\r\n if (isBlurEvent) {\r\n field._f.onBlur && field._f.onBlur(event);\r\n delayErrorCallback && delayErrorCallback(0);\r\n }\r\n else if (field._f.onChange) {\r\n field._f.onChange(event);\r\n }\r\n const fieldState = updateTouchAndDirty(name, fieldValue, isBlurEvent, false);\r\n const shouldRender = !isEmptyObject(fieldState) || watched;\r\n !isBlurEvent &&\r\n _subjects.watch.next({\r\n name,\r\n type: event.type,\r\n });\r\n if (shouldSkipValidation) {\r\n return (shouldRender &&\r\n _subjects.state.next({ name, ...(watched ? {} : fieldState) }));\r\n }\r\n !isBlurEvent && watched && _subjects.state.next({});\r\n validateFields[name] = validateFields[name] ? +1 : 1;\r\n _subjects.state.next({\r\n isValidating: true,\r\n });\r\n if (_options.resolver) {\r\n const { errors } = await _executeSchema([name]);\r\n const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);\r\n const errorLookupResult = schemaErrorLookup(errors, _fields, previousErrorLookupResult.name || name);\r\n error = errorLookupResult.error;\r\n name = errorLookupResult.name;\r\n isValid = isEmptyObject(errors);\r\n }\r\n else {\r\n error = (await validateField(field, get(_formValues, name), shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation))[name];\r\n isValid = await _updateValid(true);\r\n }\r\n field._f.deps &&\r\n trigger(field._f.deps);\r\n shouldRenderByError(name, isValid, error, fieldState);\r\n }\r\n };\r\n const trigger = async (name, options = {}) => {\r\n let isValid;\r\n let validationResult;\r\n const fieldNames = convertToArrayPayload(name);\r\n _subjects.state.next({\r\n isValidating: true,\r\n });\r\n if (_options.resolver) {\r\n const errors = await executeSchemaAndUpdateState(isUndefined(name) ? name : fieldNames);\r\n isValid = isEmptyObject(errors);\r\n validationResult = name\r\n ? !fieldNames.some((name) => get(errors, name))\r\n : isValid;\r\n }\r\n else if (name) {\r\n validationResult = (await Promise.all(fieldNames.map(async (fieldName) => {\r\n const field = get(_fields, fieldName);\r\n return await executeBuiltInValidation(field && field._f ? { [fieldName]: field } : field);\r\n }))).every(Boolean);\r\n !(!validationResult && !_formState.isValid) && _updateValid();\r\n }\r\n else {\r\n validationResult = isValid = await executeBuiltInValidation(_fields);\r\n }\r\n _subjects.state.next({\r\n ...(!isString(name) ||\r\n (_proxyFormState.isValid && isValid !== _formState.isValid)\r\n ? {}\r\n : { name }),\r\n ...(_options.resolver ? { isValid } : {}),\r\n errors: _formState.errors,\r\n isValidating: false,\r\n });\r\n options.shouldFocus &&\r\n !validationResult &&\r\n focusFieldBy(_fields, (key) => get(_formState.errors, key), name ? fieldNames : _names.mount);\r\n return validationResult;\r\n };\r\n const getValues = (fieldNames) => {\r\n const values = {\r\n ..._defaultValues,\r\n ...(_stateFlags.mount ? _formValues : {}),\r\n };\r\n return isUndefined(fieldNames)\r\n ? values\r\n : isString(fieldNames)\r\n ? get(values, fieldNames)\r\n : fieldNames.map((name) => get(values, name));\r\n };\r\n const getFieldState = (name, formState) => ({\r\n invalid: !!get((formState || _formState).errors, name),\r\n isDirty: !!get((formState || _formState).dirtyFields, name),\r\n isTouched: !!get((formState || _formState).touchedFields, name),\r\n error: get((formState || _formState).errors, name),\r\n });\r\n const clearErrors = (name) => {\r\n name\r\n ? convertToArrayPayload(name).forEach((inputName) => unset(_formState.errors, inputName))\r\n : (_formState.errors = {});\r\n _subjects.state.next({\r\n errors: _formState.errors,\r\n });\r\n };\r\n const setError = (name, error, options) => {\r\n const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\r\n set(_formState.errors, name, {\r\n ...error,\r\n ref,\r\n });\r\n _subjects.state.next({\r\n name,\r\n errors: _formState.errors,\r\n isValid: false,\r\n });\r\n options && options.shouldFocus && ref && ref.focus && ref.focus();\r\n };\r\n const watch = (name, defaultValue) => isFunction(name)\r\n ? _subjects.watch.subscribe({\r\n next: (info) => name(_getWatch(undefined, defaultValue), info),\r\n })\r\n : _getWatch(name, defaultValue, true);\r\n const unregister = (name, options = {}) => {\r\n for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\r\n _names.mount.delete(fieldName);\r\n _names.array.delete(fieldName);\r\n if (get(_fields, fieldName)) {\r\n if (!options.keepValue) {\r\n unset(_fields, fieldName);\r\n unset(_formValues, fieldName);\r\n }\r\n !options.keepError && unset(_formState.errors, fieldName);\r\n !options.keepDirty && unset(_formState.dirtyFields, fieldName);\r\n !options.keepTouched && unset(_formState.touchedFields, fieldName);\r\n !_options.shouldUnregister &&\r\n !options.keepDefaultValue &&\r\n unset(_defaultValues, fieldName);\r\n }\r\n }\r\n _subjects.watch.next({});\r\n _subjects.state.next({\r\n ..._formState,\r\n ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\r\n });\r\n !options.keepIsValid && _updateValid();\r\n };\r\n const register = (name, options = {}) => {\r\n let field = get(_fields, name);\r\n const disabledIsDefined = isBoolean(options.disabled);\r\n set(_fields, name, {\r\n _f: {\r\n ...(field && field._f ? field._f : { ref: { name } }),\r\n name,\r\n mount: true,\r\n ...options,\r\n },\r\n });\r\n _names.mount.add(name);\r\n field\r\n ? disabledIsDefined &&\r\n set(_formValues, name, options.disabled\r\n ? undefined\r\n : get(_formValues, name, getFieldValue(field._f)))\r\n : updateValidAndValue(name, true, options.value);\r\n return {\r\n ...(disabledIsDefined ? { disabled: options.disabled } : {}),\r\n ...(_options.shouldUseNativeValidation\r\n ? {\r\n required: !!options.required,\r\n min: getRuleValue(options.min),\r\n max: getRuleValue(options.max),\r\n minLength: getRuleValue(options.minLength),\r\n maxLength: getRuleValue(options.maxLength),\r\n pattern: getRuleValue(options.pattern),\r\n }\r\n : {}),\r\n name,\r\n onChange,\r\n onBlur: onChange,\r\n ref: (ref) => {\r\n if (ref) {\r\n register(name, options);\r\n field = get(_fields, name);\r\n const fieldRef = isUndefined(ref.value)\r\n ? ref.querySelectorAll\r\n ? ref.querySelectorAll('input,select,textarea')[0] || ref\r\n : ref\r\n : ref;\r\n const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\r\n const refs = field._f.refs || [];\r\n if (radioOrCheckbox\r\n ? refs.find((option) => option === fieldRef)\r\n : fieldRef === field._f.ref) {\r\n return;\r\n }\r\n set(_fields, name, {\r\n _f: {\r\n ...field._f,\r\n ...(radioOrCheckbox\r\n ? {\r\n refs: [\r\n ...refs.filter(live),\r\n fieldRef,\r\n ...(!!Array.isArray(get(_defaultValues, name))\r\n ? [{}]\r\n : []),\r\n ],\r\n ref: { type: fieldRef.type, name },\r\n }\r\n : { ref: fieldRef }),\r\n },\r\n });\r\n updateValidAndValue(name, false, undefined, fieldRef);\r\n }\r\n else {\r\n field = get(_fields, name, {});\r\n if (field._f) {\r\n field._f.mount = false;\r\n }\r\n (_options.shouldUnregister || options.shouldUnregister) &&\r\n !(isNameInFieldArray(_names.array, name) && _stateFlags.action) &&\r\n _names.unMount.add(name);\r\n }\r\n },\r\n };\r\n };\r\n const handleSubmit = (onValid, onInvalid) => async (e) => {\r\n if (e) {\r\n e.preventDefault && e.preventDefault();\r\n e.persist && e.persist();\r\n }\r\n let hasNoPromiseError = true;\r\n let fieldValues = cloneObject(_formValues);\r\n _subjects.state.next({\r\n isSubmitting: true,\r\n });\r\n try {\r\n if (_options.resolver) {\r\n const { errors, values } = await _executeSchema();\r\n _formState.errors = errors;\r\n fieldValues = values;\r\n }\r\n else {\r\n await executeBuiltInValidation(_fields);\r\n }\r\n if (isEmptyObject(_formState.errors)) {\r\n _subjects.state.next({\r\n errors: {},\r\n isSubmitting: true,\r\n });\r\n await onValid(fieldValues, e);\r\n }\r\n else {\r\n if (onInvalid) {\r\n await onInvalid({ ..._formState.errors }, e);\r\n }\r\n _options.shouldFocusError &&\r\n focusFieldBy(_fields, (key) => get(_formState.errors, key), _names.mount);\r\n }\r\n }\r\n catch (err) {\r\n hasNoPromiseError = false;\r\n throw err;\r\n }\r\n finally {\r\n _formState.isSubmitted = true;\r\n _subjects.state.next({\r\n isSubmitted: true,\r\n isSubmitting: false,\r\n isSubmitSuccessful: isEmptyObject(_formState.errors) && hasNoPromiseError,\r\n submitCount: _formState.submitCount + 1,\r\n errors: _formState.errors,\r\n });\r\n }\r\n };\r\n const resetField = (name, options = {}) => {\r\n if (get(_fields, name)) {\r\n if (isUndefined(options.defaultValue)) {\r\n setValue(name, get(_defaultValues, name));\r\n }\r\n else {\r\n setValue(name, options.defaultValue);\r\n set(_defaultValues, name, options.defaultValue);\r\n }\r\n if (!options.keepTouched) {\r\n unset(_formState.touchedFields, name);\r\n }\r\n if (!options.keepDirty) {\r\n unset(_formState.dirtyFields, name);\r\n _formState.isDirty = options.defaultValue\r\n ? _getDirty(name, get(_defaultValues, name))\r\n : _getDirty();\r\n }\r\n if (!options.keepError) {\r\n unset(_formState.errors, name);\r\n _proxyFormState.isValid && _updateValid();\r\n }\r\n _subjects.state.next({ ..._formState });\r\n }\r\n };\r\n const reset = (formValues, keepStateOptions = {}) => {\r\n const updatedValues = formValues || _defaultValues;\r\n const cloneUpdatedValues = cloneObject(updatedValues);\r\n const values = formValues && !isEmptyObject(formValues)\r\n ? cloneUpdatedValues\r\n : _defaultValues;\r\n if (!keepStateOptions.keepDefaultValues) {\r\n _defaultValues = updatedValues;\r\n }\r\n if (!keepStateOptions.keepValues) {\r\n if (keepStateOptions.keepDirtyValues) {\r\n for (const fieldName of _names.mount) {\r\n get(_formState.dirtyFields, fieldName)\r\n ? set(values, fieldName, get(_formValues, fieldName))\r\n : setValue(fieldName, get(values, fieldName));\r\n }\r\n }\r\n else {\r\n if (isWeb && isUndefined(formValues)) {\r\n for (const name of _names.mount) {\r\n const field = get(_fields, name);\r\n if (field && field._f) {\r\n const fieldReference = Array.isArray(field._f.refs)\r\n ? field._f.refs[0]\r\n : field._f.ref;\r\n try {\r\n if (isHTMLElement(fieldReference)) {\r\n fieldReference.closest('form').reset();\r\n break;\r\n }\r\n }\r\n catch (_a) { }\r\n }\r\n }\r\n }\r\n _fields = {};\r\n }\r\n _formValues = props.shouldUnregister\r\n ? keepStateOptions.keepDefaultValues\r\n ? cloneObject(_defaultValues)\r\n : {}\r\n : cloneUpdatedValues;\r\n _subjects.array.next({\r\n values,\r\n });\r\n _subjects.watch.next({\r\n values,\r\n });\r\n }\r\n _names = {\r\n mount: new Set(),\r\n unMount: new Set(),\r\n array: new Set(),\r\n watch: new Set(),\r\n watchAll: false,\r\n focus: '',\r\n };\r\n _stateFlags.mount =\r\n !_proxyFormState.isValid || !!keepStateOptions.keepIsValid;\r\n _stateFlags.watch = !!props.shouldUnregister;\r\n _subjects.state.next({\r\n submitCount: keepStateOptions.keepSubmitCount\r\n ? _formState.submitCount\r\n : 0,\r\n isDirty: keepStateOptions.keepDirty || keepStateOptions.keepDirtyValues\r\n ? _formState.isDirty\r\n : !!(keepStateOptions.keepDefaultValues &&\r\n !deepEqual(formValues, _defaultValues)),\r\n isSubmitted: keepStateOptions.keepIsSubmitted\r\n ? _formState.isSubmitted\r\n : false,\r\n dirtyFields: keepStateOptions.keepDirty || keepStateOptions.keepDirtyValues\r\n ? _formState.dirtyFields\r\n : keepStateOptions.keepDefaultValues && formValues\r\n ? getDirtyFields(_defaultValues, formValues)\r\n : {},\r\n touchedFields: keepStateOptions.keepTouched\r\n ? _formState.touchedFields\r\n : {},\r\n errors: keepStateOptions.keepErrors\r\n ? _formState.errors\r\n : {},\r\n isSubmitting: false,\r\n isSubmitSuccessful: false,\r\n });\r\n };\r\n const setFocus = (name, options = {}) => {\r\n const field = get(_fields, name)._f;\r\n const fieldRef = field.refs ? field.refs[0] : field.ref;\r\n fieldRef.focus();\r\n options.shouldSelect && fieldRef.select();\r\n };\r\n return {\r\n control: {\r\n register,\r\n unregister,\r\n getFieldState,\r\n _executeSchema,\r\n _getWatch,\r\n _getDirty,\r\n _updateValid,\r\n _removeUnmounted,\r\n _updateFieldArray,\r\n _getFieldArray,\r\n _subjects,\r\n _proxyFormState,\r\n get _fields() {\r\n return _fields;\r\n },\r\n get _formValues() {\r\n return _formValues;\r\n },\r\n get _stateFlags() {\r\n return _stateFlags;\r\n },\r\n set _stateFlags(value) {\r\n _stateFlags = value;\r\n },\r\n get _defaultValues() {\r\n return _defaultValues;\r\n },\r\n get _names() {\r\n return _names;\r\n },\r\n set _names(value) {\r\n _names = value;\r\n },\r\n get _formState() {\r\n return _formState;\r\n },\r\n set _formState(value) {\r\n _formState = value;\r\n },\r\n get _options() {\r\n return _options;\r\n },\r\n set _options(value) {\r\n _options = {\r\n ..._options,\r\n ...value,\r\n };\r\n },\r\n },\r\n trigger,\r\n register,\r\n handleSubmit,\r\n watch,\r\n setValue,\r\n getValues,\r\n reset,\r\n resetField,\r\n clearErrors,\r\n unregister,\r\n setError,\r\n setFocus,\r\n getFieldState,\r\n };\r\n}\n\n/**\r\n * Custom hook to manage the entire form.\r\n *\r\n * @remarks\r\n * [API](https://react-hook-form.com/api/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\r\n *\r\n * @param props - form configuration and validation parameters.\r\n *\r\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\r\n *\r\n * @example\r\n * ```tsx\r\n * function App() {\r\n * const { register, handleSubmit, watch, formState: { errors } } = useForm();\r\n * const onSubmit = data => console.log(data);\r\n *\r\n * console.log(watch(\"example\"));\r\n *\r\n * return (\r\n *
\r\n * \r\n * \r\n * {errors.exampleRequired && This field is required}\r\n * \r\n *
\r\n * );\r\n * }\r\n * ```\r\n */\r\nfunction useForm(props = {}) {\r\n const _formControl = React.useRef();\r\n const [formState, updateFormState] = React.useState({\r\n isDirty: false,\r\n isValidating: false,\r\n dirtyFields: {},\r\n isSubmitted: false,\r\n submitCount: 0,\r\n touchedFields: {},\r\n isSubmitting: false,\r\n isSubmitSuccessful: false,\r\n isValid: false,\r\n errors: {},\r\n });\r\n if (_formControl.current) {\r\n _formControl.current.control._options = props;\r\n }\r\n else {\r\n _formControl.current = {\r\n ...createFormControl(props),\r\n formState,\r\n };\r\n }\r\n const control = _formControl.current.control;\r\n const callback = React.useCallback((value) => {\r\n if (shouldRenderFormState(value, control._proxyFormState, true)) {\r\n control._formState = {\r\n ...control._formState,\r\n ...value,\r\n };\r\n updateFormState({ ...control._formState });\r\n }\r\n }, [control]);\r\n useSubscribe({\r\n subject: control._subjects.state,\r\n callback,\r\n });\r\n React.useEffect(() => {\r\n if (!control._stateFlags.mount) {\r\n control._proxyFormState.isValid && control._updateValid();\r\n control._stateFlags.mount = true;\r\n }\r\n if (control._stateFlags.watch) {\r\n control._stateFlags.watch = false;\r\n control._subjects.state.next({});\r\n }\r\n control._removeUnmounted();\r\n });\r\n _formControl.current.formState = getProxyFormState(formState, control._proxyFormState);\r\n return _formControl.current;\r\n}\n\nexport { Controller, FormProvider, appendErrors, get, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };\n//# sourceMappingURL=index.esm.mjs.map\n"],"names":["isCheckBoxInput","element","isDateObject","value","isNullOrUndefined","isObjectType","isObject","getEventValue","event","getNodeParentName","name","isNameInFieldArray","names","compact","isUndefined","val","get","obj","path","defaultValue","result","key","EVENTS","VALIDATION_MODE","INPUT_VALIDATION_RULES","HookFormContext","React","useFormContext","FormProvider","props","children","data","getProxyFormState","formState","_proxyFormState","localProxyFormState","isRoot","_key","isEmptyObject","shouldRenderFormState","formStateData","convertToArrayPayload","shouldSubscribeByName","signalName","exact","currentName","useSubscribe","_props","tearDown","subscription","useFormState","methods","control","disabled","updateFormState","_localProxyFormState","_name","_mounted","callback","isString","generateWatchOutput","_names","formValues","isGlobal","isArray","fieldName","isFunction","objectHasFunction","useWatch","fieldValues","updateValue","useController","shouldUnregister","isArrayField","_registerProps","updateMounted","field","_shouldUnregisterField","elm","message","Controller","appendErrors","validateAllFieldCriteria","errors","type","isKey","stringToPath","input","set","object","index","tempPath","length","lastIndex","newValue","objValue","focusFieldBy","fields","fieldsNames","_f","currentField","isWatched","isBlurEvent","watchName","updateFieldArrayRootError","error","fieldArrayErrors","isBoolean","isFileInput","isMessage","isRadioInput","isRegex","defaultResult","validResult","getCheckboxValue","options","values","option","defaultReturn","getRadioValue","previous","getValidateError","ref","getValueAndMessage","validationData","validateField","inputValue","shouldUseNativeValidation","isFieldArray","refs","required","maxLength","minLength","min","max","pattern","validate","valueAsNumber","mount","inputRef","setCustomValidity","isRadio","isCheckBox","isRadioOrCheckbox","isEmpty","appendErrorsCurry","getMinMaxMessage","exceedMax","maxLengthMessage","minLengthMessage","maxType","minType","exceedMin","maxOutput","minOutput","valueNumber","valueDate","maxLengthOutput","minLengthOutput","patternValue","validateError","validationResult","isWeb","cloneObject","copy","getValidationModes","mode","baseGet","updatePath","isEmptyArray","unset","childObject","previousObjRef","k","objectRef","currentPaths","currentPathsLength","item","createSubject","_observers","observer","o","isPrimitive","deepEqual","object1","object2","keys1","keys2","val1","val2","isHTMLElement","owner","ElementClass","isMultipleSelect","live","markFieldsDirty","isParentNodeArray","getDirtyFieldsFromDefaultValues","dirtyFieldsFromValues","getDirtyFields","defaultValues","getFieldValueAs","valueAsDate","setValueAs","getFieldValue","getResolverOptions","_fields","criteriaMode","getRuleValue","rule","hasValidation","schemaErrorLookup","foundError","skipValidation","isTouched","isSubmitted","reValidateMode","unsetEmptyArray","defaultOptions","createFormControl","_options","_formState","_defaultValues","_formValues","_stateFlags","delayErrorCallback","timer","validateFields","_subjects","validationModeBeforeSubmit","validationModeAfterSubmit","shouldDisplayAllAssociatedErrors","debounce","wait","_updateValid","shouldSkipRender","isValid","_executeSchema","executeBuiltInValidation","_updateFieldArray","method","args","shouldSetValues","shouldUpdateFieldsAndState","touchedFields","_getDirty","updateErrors","updateValidAndValue","shouldSkipSetValueAs","setFieldValue","updateTouchAndDirty","fieldValue","shouldDirty","shouldRender","isFieldDirty","output","isPreviousFieldTouched","isPreviousFormDirty","isPreviousFieldDirty","shouldRenderByError","fieldState","previousFieldError","shouldUpdateValid","updatedFormState","v","executeSchemaAndUpdateState","shouldOnlyCheckValid","context","isFieldArrayRoot","fieldError","_removeUnmounted","unregister","getValues","_getWatch","_getFieldArray","fieldReference","selectRef","checkboxRef","radioRef","trigger","setValues","fieldKey","setValue","cloneValue","onChange","target","shouldSkipValidation","watched","previousErrorLookupResult","errorLookupResult","fieldNames","getFieldState","clearErrors","inputName","setError","watch","info","register","disabledIsDefined","fieldRef","radioOrCheckbox","onValid","onInvalid","e","hasNoPromiseError","err","keepStateOptions","updatedValues","cloneUpdatedValues","useForm","_formControl"],"mappings":"wCAEA,IAAIA,GAAmBC,GAAYA,EAAQ,OAAS,WAEhDC,EAAgBC,GAAUA,aAAiB,KAE3CC,EAAqBD,GAAUA,GAAS,KAE5C,MAAME,GAAgBF,GAAU,OAAOA,GAAU,SACjD,IAAIG,EAAYH,GAAU,CAACC,EAAkBD,CAAK,GAC9C,CAAC,MAAM,QAAQA,CAAK,GACpBE,GAAaF,CAAK,GAClB,CAACD,EAAaC,CAAK,EAEnBI,GAAiBC,GAAUF,EAASE,CAAK,GAAKA,EAAM,OAClDR,GAAgBQ,EAAM,MAAM,EACxBA,EAAM,OAAO,QACbA,EAAM,OAAO,MACjBA,EAEFC,GAAqBC,GAASA,EAAK,UAAU,EAAGA,EAAK,OAAO,aAAa,CAAC,GAAKA,EAE/EC,GAAqB,CAACC,EAAOF,IAASE,EAAM,IAAIH,GAAkBC,CAAI,CAAC,EAEvEG,GAAWV,GAAU,MAAM,QAAQA,CAAK,EAAIA,EAAM,OAAO,OAAO,EAAI,CAAE,EAEtEW,EAAeC,GAAQA,IAAQ,OAE/BC,EAAM,CAACC,EAAKC,EAAMC,IAAiB,CACnC,GAAI,CAACD,GAAQ,CAACZ,EAASW,CAAG,EACtB,OAAOE,EAEX,MAAMC,EAASP,GAAQK,EAAK,MAAM,WAAW,CAAC,EAAE,OAAO,CAACE,EAAQC,IAAQjB,EAAkBgB,CAAM,EAAIA,EAASA,EAAOC,CAAG,EAAGJ,CAAG,EAC7H,OAAOH,EAAYM,CAAM,GAAKA,IAAWH,EACnCH,EAAYG,EAAIC,CAAI,CAAC,EACjBC,EACAF,EAAIC,CAAI,EACZE,CACV,EAEA,MAAME,GAAS,CACX,KAAM,OACN,UAAW,WACX,OAAQ,QACZ,EACMC,EAAkB,CACpB,OAAQ,SACR,SAAU,WACV,SAAU,WACV,UAAW,YACX,IAAK,KACT,EACMC,EAAyB,CAC3B,IAAK,MACL,IAAK,MACL,UAAW,YACX,UAAW,YACX,QAAS,UACT,SAAU,WACV,SAAU,UACd,EAEMC,GAAkBC,EAAM,cAAc,IAAI,EA+B1CC,GAAiB,IAAMD,EAAM,WAAWD,EAAe,EA+BvDG,GAAgBC,GAAU,CAC5B,KAAM,CAAE,SAAAC,EAAU,GAAGC,CAAI,EAAKF,EAC9B,OAAQH,EAAM,cAAcD,GAAgB,SAAU,CAAE,MAAOM,GAAQD,CAAQ,CACnF,EAEA,IAAIE,GAAoB,CAACC,EAAWC,EAAiBC,EAAqBC,EAAS,KAAS,CACxF,MAAMhB,EAAS,CAAA,EACf,UAAWC,KAAOY,EACd,OAAO,eAAeb,EAAQC,EAAK,CAC/B,IAAK,IAAM,CACP,MAAMgB,EAAOhB,EACb,OAAIa,EAAgBG,CAAI,IAAMd,EAAgB,MAC1CW,EAAgBG,CAAI,EAAI,CAACD,GAAUb,EAAgB,KAEvDY,IAAwBA,EAAoBE,CAAI,EAAI,IAC7CJ,EAAUI,CAAI,CACxB,CACb,CAAS,EAEL,OAAOjB,CACX,EAEIkB,EAAiBnC,GAAUG,EAASH,CAAK,GAAK,CAAC,OAAO,KAAKA,CAAK,EAAE,OAElEoC,GAAwB,CAACC,EAAeN,EAAiBE,IAAW,CACpE,KAAM,CAAE,KAAA1B,EAAM,GAAGuB,CAAS,EAAKO,EAC/B,OAAQF,EAAcL,CAAS,GAC3B,OAAO,KAAKA,CAAS,EAAE,QAAU,OAAO,KAAKC,CAAe,EAAE,QAC9D,OAAO,KAAKD,CAAS,EAAE,KAAMZ,GAAQa,EAAgBb,CAAG,KACnD,CAACe,GAAUb,EAAgB,IAAI,CAC5C,EAEIkB,GAAyBtC,GAAW,MAAM,QAAQA,CAAK,EAAIA,EAAQ,CAACA,CAAK,EAEzEuC,GAAwB,CAAChC,EAAMiC,EAAYC,IAAUA,GAASD,EAC5DjC,IAASiC,EACT,CAACjC,GACC,CAACiC,GACDjC,IAASiC,GACTF,GAAsB/B,CAAI,EAAE,KAAMmC,GAAgBA,IAC7CA,EAAY,WAAWF,CAAU,GAC9BA,EAAW,WAAWE,CAAW,EAAE,EAEnD,SAASC,GAAajB,EAAO,CACzB,MAAMkB,EAASrB,EAAM,OAAOG,CAAK,EACjCkB,EAAO,QAAUlB,EACjBH,EAAM,UAAU,IAAM,CAClB,MAAMsB,EAAYC,GAAiB,CAC3BA,GACAA,EAAa,YAAW,CAExC,EACcA,EAAe,CAACpB,EAAM,UACxBkB,EAAO,QAAQ,QAAQ,UAAU,CAC7B,KAAMA,EAAO,QAAQ,QACrC,CAAa,EACL,MAAO,IAAMC,EAASC,CAAY,CAC1C,EAAO,CAACpB,EAAM,QAAQ,CAAC,CACvB,CAgCA,SAASqB,GAAarB,EAAO,CACzB,MAAMsB,EAAUxB,KACV,CAAE,QAAAyB,EAAUD,EAAQ,QAAS,SAAAE,EAAU,KAAA3C,EAAM,MAAAkC,CAAO,EAAGf,EACvD,CAACI,EAAWqB,CAAe,EAAI5B,EAAM,SAAS0B,EAAQ,UAAU,EAChEG,EAAuB7B,EAAM,OAAO,CACtC,QAAS,GACT,YAAa,GACb,cAAe,GACf,aAAc,GACd,QAAS,GACT,OAAQ,EAChB,CAAK,EACK8B,EAAQ9B,EAAM,OAAOhB,CAAI,EACzB+C,EAAW/B,EAAM,OAAO,EAAI,EAClC8B,EAAM,QAAU9C,EAChB,MAAMgD,EAAWhC,EAAM,YAAavB,GAAUsD,EAAS,SACnDf,GAAsBc,EAAM,QAASrD,EAAM,KAAMyC,CAAK,GACtDL,GAAsBpC,EAAOoD,EAAqB,OAAO,GACzDD,EAAgB,CACZ,GAAGF,EAAQ,WACX,GAAGjD,CACN,CAAA,EAAG,CAACiD,EAASR,CAAK,CAAC,EACxB,OAAAE,GAAa,CACT,SAAAO,EACA,SAAAK,EACA,QAASN,EAAQ,UAAU,KACnC,CAAK,EACD1B,EAAM,UAAU,KACZ+B,EAAS,QAAU,GACZ,IAAM,CACTA,EAAS,QAAU,EAC/B,GACO,CAAE,CAAA,EACEzB,GAAkBC,EAAWmB,EAAQ,gBAAiBG,EAAqB,QAAS,EAAK,CACpG,CAEA,IAAII,EAAYxD,GAAU,OAAOA,GAAU,SAEvCyD,GAAsB,CAAChD,EAAOiD,EAAQC,EAAYC,IAAa,CAC/D,MAAMC,EAAU,MAAM,QAAQpD,CAAK,EACnC,OAAI+C,EAAS/C,CAAK,GACdmD,GAAYF,EAAO,MAAM,IAAIjD,CAAK,EAC3BI,EAAI8C,EAAYlD,CAAK,GAE5BoD,EACOpD,EAAM,IAAKqD,IAAeF,GAAYF,EAAO,MAAM,IAAII,CAAS,EACnEjD,EAAI8C,EAAYG,CAAS,EAAE,GAEnCF,IAAaF,EAAO,SAAW,IACxBC,EACX,EAEII,GAAc/D,GAAU,OAAOA,GAAU,WAEzCgE,GAAqBpC,GAAS,CAC9B,UAAWV,KAAOU,EACd,GAAImC,GAAWnC,EAAKV,CAAG,CAAC,EACpB,MAAO,GAGf,MAAO,EACX,EAkBA,SAAS+C,GAASvC,EAAO,CACrB,MAAMsB,EAAUxB,KACV,CAAE,QAAAyB,EAAUD,EAAQ,QAAS,KAAAzC,EAAM,aAAAS,EAAc,SAAAkC,EAAU,MAAAT,CAAK,EAAMf,GAAS,GAC/E2B,EAAQ9B,EAAM,OAAOhB,CAAI,EAC/B8C,EAAM,QAAU9C,EAChB,MAAMgD,EAAWhC,EAAM,YAAaO,GAAc,CAC9C,GAAIS,GAAsBc,EAAM,QAASvB,EAAU,KAAMW,CAAK,EAAG,CAC7D,MAAMyB,EAAcT,GAAoBJ,EAAM,QAASJ,EAAQ,OAAQnB,EAAU,QAAUmB,EAAQ,WAAW,EAC9GkB,EAAYxD,EAAY0C,EAAM,OAAO,GAChClD,EAAS+D,CAAW,GAAK,CAACF,GAAkBE,CAAW,EACtD,CAAE,GAAGA,CAAa,EAClB,MAAM,QAAQA,CAAW,EACrB,CAAC,GAAGA,CAAW,EACfvD,EAAYuD,CAAW,EACnBlD,EACAkD,CAAW,CAC5B,CACJ,EAAE,CAACjB,EAASR,EAAOzB,CAAY,CAAC,EACjC2B,GAAa,CACT,SAAAO,EACA,QAASD,EAAQ,UAAU,MAC3B,SAAAM,CACR,CAAK,EACD,KAAM,CAACvD,EAAOmE,CAAW,EAAI5C,EAAM,SAASZ,EAAYK,CAAY,EAC9DiC,EAAQ,UAAU1C,CAAI,EACtBS,CAAY,EAClB,OAAAO,EAAM,UAAU,IAAM,CAClB0B,EAAQ,iBAAgB,CAChC,CAAK,EACMjD,CACX,CA0BA,SAASoE,GAAc1C,EAAO,CAC1B,MAAMsB,EAAUxB,KACV,CAAE,KAAAjB,EAAM,QAAA0C,EAAUD,EAAQ,QAAS,iBAAAqB,CAAkB,EAAG3C,EACxD4C,EAAe9D,GAAmByC,EAAQ,OAAO,MAAO1C,CAAI,EAC5DP,EAAQiE,GAAS,CACnB,QAAAhB,EACA,KAAA1C,EACA,aAAcM,EAAIoC,EAAQ,YAAa1C,EAAMM,EAAIoC,EAAQ,eAAgB1C,EAAMmB,EAAM,YAAY,CAAC,EAClG,MAAO,EACf,CAAK,EACKI,EAAYiB,GAAa,CAC3B,QAAAE,EACA,KAAA1C,CACR,CAAK,EACKgE,EAAiBhD,EAAM,OAAO0B,EAAQ,SAAS1C,EAAM,CACvD,GAAGmB,EAAM,MACT,MAAA1B,CACH,CAAA,CAAC,EACF,OAAAuB,EAAM,UAAU,IAAM,CAClB,MAAMiD,EAAgB,CAACjE,EAAMP,IAAU,CACnC,MAAMyE,EAAQ5D,EAAIoC,EAAQ,QAAS1C,CAAI,EACnCkE,IACAA,EAAM,GAAG,MAAQzE,EAEjC,EACQ,OAAAwE,EAAcjE,EAAM,EAAI,EACjB,IAAM,CACT,MAAMmE,EAAyBzB,EAAQ,SAAS,kBAAoBoB,GACnEC,EACKI,GAA0B,CAACzB,EAAQ,YAAY,OAC/CyB,GACAzB,EAAQ,WAAW1C,CAAI,EACvBiE,EAAcjE,EAAM,EAAK,CAC3C,CACK,EAAE,CAACA,EAAM0C,EAASqB,EAAcD,CAAgB,CAAC,EAC3C,CACH,MAAO,CACH,KAAA9D,EACA,MAAAP,EACA,SAAUuB,EAAM,YAAalB,GAAU,CACnCkE,EAAe,QAAQ,SAAS,CAC5B,OAAQ,CACJ,MAAOnE,GAAcC,CAAK,EAC1B,KAAME,CACT,EACD,KAAMY,GAAO,MACjC,CAAiB,CACjB,EAAe,CAACZ,CAAI,CAAC,EACT,OAAQgB,EAAM,YAAY,IAAM,CAC5BgD,EAAe,QAAQ,OAAO,CAC1B,OAAQ,CACJ,MAAO1D,EAAIoC,EAAQ,YAAa1C,CAAI,EACpC,KAAMA,CACT,EACD,KAAMY,GAAO,IACjC,CAAiB,CACjB,EAAe,CAACZ,EAAM0C,CAAO,CAAC,EAClB,IAAK1B,EAAM,YAAaoD,GAAQ,CAC5B,MAAMF,EAAQ5D,EAAIoC,EAAQ,QAAS1C,CAAI,EACnCoE,GAAOF,GAASE,EAAI,QACpBF,EAAM,GAAG,IAAM,CACX,MAAO,IAAME,EAAI,MAAO,EACxB,OAAQ,IAAMA,EAAI,OAAQ,EAC1B,kBAAoBC,GAAYD,EAAI,kBAAkBC,CAAO,EAC7D,eAAgB,IAAMD,EAAI,eAAgB,CAClE,EAEa,EAAE,CAACpE,EAAM0C,EAAQ,OAAO,CAAC,CAC7B,EACD,UAAAnB,EACA,WAAY,OAAO,iBAAiB,GAAI,CACpC,QAAS,CACL,IAAK,IAAM,CAAC,CAACjB,EAAIiB,EAAU,OAAQvB,CAAI,CAC1C,EACD,QAAS,CACL,IAAK,IAAM,CAAC,CAACM,EAAIiB,EAAU,YAAavB,CAAI,CAC/C,EACD,UAAW,CACP,IAAK,IAAM,CAAC,CAACM,EAAIiB,EAAU,cAAevB,CAAI,CACjD,EACD,MAAO,CACH,IAAK,IAAMM,EAAIiB,EAAU,OAAQvB,CAAI,CACxC,CACb,CAAS,CACT,CACA,CA4CK,MAACsE,GAAcnD,GAAUA,EAAM,OAAO0C,GAAc1C,CAAK,CAAC,EAE/D,IAAIoD,GAAe,CAACvE,EAAMwE,EAA0BC,EAAQC,EAAML,IAAYG,EACxE,CACE,GAAGC,EAAOzE,CAAI,EACd,MAAO,CACH,GAAIyE,EAAOzE,CAAI,GAAKyE,EAAOzE,CAAI,EAAE,MAAQyE,EAAOzE,CAAI,EAAE,MAAQ,CAAA,EAC9D,CAAC0E,CAAI,EAAGL,GAAW,EACtB,CACJ,EACC,CAAE,EAEJM,GAASlF,GAAU,QAAQ,KAAKA,CAAK,EAErCmF,GAAgBC,GAAU1E,GAAQ0E,EAAM,QAAQ,YAAa,EAAE,EAAE,MAAM,OAAO,CAAC,EAEnF,SAASC,EAAIC,EAAQvE,EAAMf,EAAO,CAC9B,IAAIuF,EAAQ,GACZ,MAAMC,EAAWN,GAAMnE,CAAI,EAAI,CAACA,CAAI,EAAIoE,GAAapE,CAAI,EACnD0E,EAASD,EAAS,OAClBE,EAAYD,EAAS,EAC3B,KAAO,EAAEF,EAAQE,GAAQ,CACrB,MAAMvE,EAAMsE,EAASD,CAAK,EAC1B,IAAII,EAAW3F,EACf,GAAIuF,IAAUG,EAAW,CACrB,MAAME,EAAWN,EAAOpE,CAAG,EAC3ByE,EACIxF,EAASyF,CAAQ,GAAK,MAAM,QAAQA,CAAQ,EACtCA,EACC,MAAM,CAACJ,EAASD,EAAQ,CAAC,CAAC,EAEvB,GADA,CAAE,CAEnB,CACDD,EAAOpE,CAAG,EAAIyE,EACdL,EAASA,EAAOpE,CAAG,CACtB,CACD,OAAOoE,CACX,CAEA,MAAMO,GAAe,CAACC,EAAQvC,EAAUwC,IAAgB,CACpD,UAAW7E,KAAO6E,GAAe,OAAO,KAAKD,CAAM,EAAG,CAClD,MAAMrB,EAAQ5D,EAAIiF,EAAQ5E,CAAG,EAC7B,GAAIuD,EAAO,CACP,KAAM,CAAE,GAAAuB,EAAI,GAAGC,CAAY,EAAKxB,EAChC,GAAIuB,GAAMzC,EAASyC,EAAG,IAAI,EAAG,CACzB,GAAIA,EAAG,IAAI,OAASrF,EAAYqF,EAAG,IAAI,MAAK,CAAE,EAC1C,MAEC,GAAIA,EAAG,KAAM,CACdA,EAAG,KAAK,CAAC,EAAE,MAAK,EAChB,KACH,CACJ,MACQ7F,EAAS8F,CAAY,GAC1BJ,GAAaI,EAAc1C,CAAQ,CAE1C,CACJ,CACL,EAeA,IAAI2C,GAAY,CAAC3F,EAAMmD,EAAQyC,IAAgB,CAACA,IAC3CzC,EAAO,UACJA,EAAO,MAAM,IAAInD,CAAI,GACrB,CAAC,GAAGmD,EAAO,KAAK,EAAE,KAAM0C,GAAc7F,EAAK,WAAW6F,CAAS,GAC3D,SAAS,KAAK7F,EAAK,MAAM6F,EAAU,MAAM,CAAC,CAAC,GAEnDC,GAA4B,CAACrB,EAAQsB,EAAO/F,IAAS,CACrD,MAAMgG,EAAmB7F,GAAQG,EAAImE,EAAQzE,CAAI,CAAC,EAClD,OAAA8E,EAAIkB,EAAkB,OAAQD,EAAM/F,CAAI,CAAC,EACzC8E,EAAIL,EAAQzE,EAAMgG,CAAgB,EAC3BvB,CACX,EAEIwB,GAAaxG,GAAU,OAAOA,GAAU,UAExCyG,GAAe3G,GAAYA,EAAQ,OAAS,OAE5C4G,GAAa1G,GAAUwD,EAASxD,CAAK,GAAKuB,EAAM,eAAevB,CAAK,EAEpE2G,GAAgB7G,GAAYA,EAAQ,OAAS,QAE7C8G,GAAW5G,GAAUA,aAAiB,OAE1C,MAAM6G,GAAgB,CAClB,MAAO,GACP,QAAS,EACb,EACMC,GAAc,CAAE,MAAO,GAAM,QAAS,EAAI,EAChD,IAAIC,GAAoBC,GAAY,CAChC,GAAI,MAAM,QAAQA,CAAO,EAAG,CACxB,GAAIA,EAAQ,OAAS,EAAG,CACpB,MAAMC,EAASD,EACV,OAAQE,GAAWA,GAAUA,EAAO,SAAW,CAACA,EAAO,QAAQ,EAC/D,IAAKA,GAAWA,EAAO,KAAK,EACjC,MAAO,CAAE,MAAOD,EAAQ,QAAS,CAAC,CAACA,EAAO,OAC7C,CACD,OAAOD,EAAQ,CAAC,EAAE,SAAW,CAACA,EAAQ,CAAC,EAAE,SAEjCA,EAAQ,CAAC,EAAE,YAAc,CAACrG,EAAYqG,EAAQ,CAAC,EAAE,WAAW,KAAK,EAC3DrG,EAAYqG,EAAQ,CAAC,EAAE,KAAK,GAAKA,EAAQ,CAAC,EAAE,QAAU,GAClDF,GACA,CAAE,MAAOE,EAAQ,CAAC,EAAE,MAAO,QAAS,EAAM,EAC9CF,GACRD,EACT,CACD,OAAOA,EACX,EAEA,MAAMM,GAAgB,CAClB,QAAS,GACT,MAAO,IACX,EACA,IAAIC,GAAiBJ,GAAY,MAAM,QAAQA,CAAO,EAChDA,EAAQ,OAAO,CAACK,EAAUH,IAAWA,GAAUA,EAAO,SAAW,CAACA,EAAO,SACrE,CACE,QAAS,GACT,MAAOA,EAAO,KACjB,EACCG,EAAUF,EAAa,EAC3BA,GAEN,SAASG,GAAiBrG,EAAQsG,EAAKtC,EAAO,WAAY,CACtD,GAAIyB,GAAUzF,CAAM,GACf,MAAM,QAAQA,CAAM,GAAKA,EAAO,MAAMyF,EAAS,GAC/CF,GAAUvF,CAAM,GAAK,CAACA,EACvB,MAAO,CACH,KAAAgE,EACA,QAASyB,GAAUzF,CAAM,EAAIA,EAAS,GACtC,IAAAsG,CACZ,CAEA,CAEA,IAAIC,EAAsBC,GAAmBtH,EAASsH,CAAc,GAAK,CAACb,GAAQa,CAAc,EAC1FA,EACA,CACE,MAAOA,EACP,QAAS,EACZ,EAEDC,GAAgB,MAAOjD,EAAOkD,EAAY5C,EAA0B6C,EAA2BC,IAAiB,CAChH,KAAM,CAAE,IAAAN,EAAK,KAAAO,EAAM,SAAAC,EAAU,UAAAC,EAAW,UAAAC,EAAW,IAAAC,EAAK,IAAAC,EAAK,QAAAC,EAAS,SAAAC,EAAU,KAAA9H,EAAM,cAAA+H,GAAe,MAAAC,GAAO,SAAArF,CAAW,EAAGuB,EAAM,GAChI,GAAI,CAAC8D,IAASrF,EACV,MAAO,GAEX,MAAMsF,EAAWV,EAAOA,EAAK,CAAC,EAAIP,EAC5BkB,EAAqB7D,GAAY,CAC/BgD,GAA6BY,EAAS,iBACtCA,EAAS,kBAAkBhC,GAAU5B,CAAO,EAAI,GAAKA,GAAW,GAAG,EACnE4D,EAAS,eAAc,EAEnC,EACUlC,EAAQ,CAAA,EACRoC,EAAU/B,GAAaY,CAAG,EAC1BoB,GAAa9I,GAAgB0H,CAAG,EAChCqB,EAAoBF,GAAWC,GAC/BE,GAAYP,IAAiB7B,GAAYc,CAAG,IAAM,CAACA,EAAI,OACzDI,IAAe,IACd,MAAM,QAAQA,CAAU,GAAK,CAACA,EAAW,OACxCmB,EAAoBhE,GAAa,KAAK,KAAMvE,EAAMwE,EAA0BuB,CAAK,EACjFyC,GAAmB,CAACC,EAAWC,EAAkBC,EAAkBC,EAAU9H,EAAuB,UAAW+H,EAAU/H,EAAuB,YAAc,CAChK,MAAMuD,EAAUoE,EAAYC,EAAmBC,EAC/C5C,EAAM/F,CAAI,EAAI,CACV,KAAMyI,EAAYG,EAAUC,EAC5B,QAAAxE,EACA,IAAA2C,EACA,GAAGuB,EAAkBE,EAAYG,EAAUC,EAASxE,CAAO,CACvE,CACA,EACI,GAAIiD,EACE,CAAC,MAAM,QAAQF,CAAU,GAAK,CAACA,EAAW,OAC1CI,IACI,CAACa,IAAsBC,GAAW5I,EAAkB0H,CAAU,IAC3DnB,GAAUmB,CAAU,GAAK,CAACA,GAC1BgB,IAAc,CAAC5B,GAAiBe,CAAI,EAAE,SACtCY,GAAW,CAACtB,GAAcU,CAAI,EAAE,SAAW,CACpD,KAAM,CAAE,MAAA9H,EAAO,QAAA4E,GAAY8B,GAAUqB,CAAQ,EACvC,CAAE,MAAO,CAAC,CAACA,EAAU,QAASA,CAAU,EACxCP,EAAmBO,CAAQ,EACjC,GAAI/H,IACAsG,EAAM/F,CAAI,EAAI,CACV,KAAMc,EAAuB,SAC7B,QAAAuD,EACA,IAAK4D,EACL,GAAGM,EAAkBzH,EAAuB,SAAUuD,CAAO,CAC7E,EACgB,CAACG,GACD,OAAA0D,EAAkB7D,CAAO,EAClB0B,CAGlB,CACD,GAAI,CAACuC,IAAY,CAAC5I,EAAkBiI,CAAG,GAAK,CAACjI,EAAkBkI,CAAG,GAAI,CAClE,IAAIa,EACAK,EACJ,MAAMC,EAAY9B,EAAmBW,CAAG,EAClCoB,EAAY/B,EAAmBU,CAAG,EACxC,GAAI,CAACjI,EAAkB0H,CAAU,GAAK,CAAC,MAAMA,CAAU,EAAG,CACtD,MAAM6B,EAAcjC,EAAI,eAAiB,CAACI,EACrC1H,EAAkBqJ,EAAU,KAAK,IAClCN,EAAYQ,EAAcF,EAAU,OAEnCrJ,EAAkBsJ,EAAU,KAAK,IAClCF,EAAYG,EAAcD,EAAU,MAE3C,KACI,CACD,MAAME,EAAYlC,EAAI,aAAe,IAAI,KAAKI,CAAU,EACpDnE,EAAS8F,EAAU,KAAK,IACxBN,EAAYS,EAAY,IAAI,KAAKH,EAAU,KAAK,GAEhD9F,EAAS+F,EAAU,KAAK,IACxBF,EAAYI,EAAY,IAAI,KAAKF,EAAU,KAAK,EAEvD,CACD,IAAIP,GAAaK,KACbN,GAAiB,CAAC,CAACC,EAAWM,EAAU,QAASC,EAAU,QAASlI,EAAuB,IAAKA,EAAuB,GAAG,EACtH,CAAC0D,GACD,OAAA0D,EAAkBnC,EAAM/F,CAAI,EAAE,OAAO,EAC9B+F,CAGlB,CACD,IAAK0B,GAAaC,IACd,CAACY,IACArF,EAASmE,CAAU,GAAME,GAAgB,MAAM,QAAQF,CAAU,GAAK,CACvE,MAAM+B,EAAkBlC,EAAmBQ,CAAS,EAC9C2B,EAAkBnC,EAAmBS,CAAS,EAC9Ce,EAAY,CAAC/I,EAAkByJ,EAAgB,KAAK,GACtD/B,EAAW,OAAS+B,EAAgB,MAClCL,EAAY,CAACpJ,EAAkB0J,EAAgB,KAAK,GACtDhC,EAAW,OAASgC,EAAgB,MACxC,IAAIX,GAAaK,KACbN,GAAiBC,EAAWU,EAAgB,QAASC,EAAgB,OAAO,EACxE,CAAC5E,GACD,OAAA0D,EAAkBnC,EAAM/F,CAAI,EAAE,OAAO,EAC9B+F,CAGlB,CACD,GAAI8B,GAAW,CAACS,GAAWrF,EAASmE,CAAU,EAAG,CAC7C,KAAM,CAAE,MAAOiC,EAAc,QAAAhF,CAAO,EAAK4C,EAAmBY,CAAO,EACnE,GAAIxB,GAAQgD,CAAY,GAAK,CAACjC,EAAW,MAAMiC,CAAY,IACvDtD,EAAM/F,CAAI,EAAI,CACV,KAAMc,EAAuB,QAC7B,QAAAuD,EACA,IAAA2C,EACA,GAAGuB,EAAkBzH,EAAuB,QAASuD,CAAO,CAC5E,EACgB,CAACG,GACD,OAAA0D,EAAkB7D,CAAO,EAClB0B,CAGlB,CACD,GAAI+B,GACA,GAAItE,GAAWsE,CAAQ,EAAG,CACtB,MAAMpH,EAAS,MAAMoH,EAASV,CAAU,EAClCkC,EAAgBvC,GAAiBrG,EAAQuH,CAAQ,EACvD,GAAIqB,IACAvD,EAAM/F,CAAI,EAAI,CACV,GAAGsJ,EACH,GAAGf,EAAkBzH,EAAuB,SAAUwI,EAAc,OAAO,CAC/F,EACoB,CAAC9E,GACD,OAAA0D,EAAkBoB,EAAc,OAAO,EAChCvD,CAGlB,SACQnG,EAASkI,CAAQ,EAAG,CACzB,IAAIyB,EAAmB,CAAA,EACvB,UAAW5I,KAAOmH,EAAU,CACxB,GAAI,CAAClG,EAAc2H,CAAgB,GAAK,CAAC/E,EACrC,MAEJ,MAAM8E,EAAgBvC,GAAiB,MAAMe,EAASnH,CAAG,EAAEyG,CAAU,EAAGa,EAAUtH,CAAG,EACjF2I,IACAC,EAAmB,CACf,GAAGD,EACH,GAAGf,EAAkB5H,EAAK2I,EAAc,OAAO,CACvE,EACoBpB,EAAkBoB,EAAc,OAAO,EACnC9E,IACAuB,EAAM/F,CAAI,EAAIuJ,GAGzB,CACD,GAAI,CAAC3H,EAAc2H,CAAgB,IAC/BxD,EAAM/F,CAAI,EAAI,CACV,IAAKiI,EACL,GAAGsB,CACvB,EACoB,CAAC/E,GACD,OAAOuB,CAGlB,EAEL,OAAAmC,EAAkB,EAAI,EACfnC,CACX,EAMIyD,GAAQ,OAAO,OAAW,KAC1B,OAAO,OAAO,YAAgB,KAC9B,OAAO,SAAa,IAExB,SAASC,EAAYpI,EAAM,CACvB,IAAIqI,EACJ,MAAMpG,EAAU,MAAM,QAAQjC,CAAI,EAClC,GAAIA,aAAgB,KAChBqI,EAAO,IAAI,KAAKrI,CAAI,UAEfA,aAAgB,IACrBqI,EAAO,IAAI,IAAIrI,CAAI,UAEd,EAAEmI,KAAUnI,aAAgB,MAAQA,aAAgB,aACxDiC,GAAW1D,EAASyB,CAAI,GAAI,CAC7BqI,EAAOpG,EAAU,CAAE,EAAG,GACtB,UAAW3C,KAAOU,EAAM,CACpB,GAAImC,GAAWnC,EAAKV,CAAG,CAAC,EAAG,CACvB+I,EAAOrI,EACP,KACH,CACDqI,EAAK/I,CAAG,EAAI8I,EAAYpI,EAAKV,CAAG,CAAC,CACpC,CACJ,KAEG,QAAOU,EAEX,OAAOqI,CACX,CAIA,IAAIC,GAAsBC,IAAU,CAChC,WAAY,CAACA,GAAQA,IAAS/I,EAAgB,SAC9C,SAAU+I,IAAS/I,EAAgB,OACnC,WAAY+I,IAAS/I,EAAgB,SACrC,QAAS+I,IAAS/I,EAAgB,IAClC,UAAW+I,IAAS/I,EAAgB,SACxC,GA0CA,SAASgJ,GAAQ9E,EAAQ+E,EAAY,CACjC,MAAM5E,EAAS4E,EAAW,MAAM,EAAG,EAAE,EAAE,OACvC,IAAI9E,EAAQ,EACZ,KAAOA,EAAQE,GACXH,EAAS3E,EAAY2E,CAAM,EAAIC,IAAUD,EAAO+E,EAAW9E,GAAO,CAAC,EAEvE,OAAOD,CACX,CACA,SAASgF,GAAaxJ,EAAK,CACvB,UAAWI,KAAOJ,EACd,GAAI,CAACH,EAAYG,EAAII,CAAG,CAAC,EACrB,MAAO,GAGf,MAAO,EACX,CACA,SAASqJ,EAAMjF,EAAQvE,EAAM,CACzB,MAAMsJ,EAAanF,GAAMnE,CAAI,EAAI,CAACA,CAAI,EAAIoE,GAAapE,CAAI,EACrDyJ,EAAcH,EAAW,QAAU,EAAI/E,EAAS8E,GAAQ9E,EAAQ+E,CAAU,EAC1EnJ,EAAMmJ,EAAWA,EAAW,OAAS,CAAC,EAC5C,IAAII,EACAD,GACA,OAAOA,EAAYtJ,CAAG,EAE1B,QAASwJ,EAAI,EAAGA,EAAIL,EAAW,MAAM,EAAG,EAAE,EAAE,OAAQK,IAAK,CACrD,IAAInF,EAAQ,GACRoF,EACJ,MAAMC,EAAeP,EAAW,MAAM,EAAG,EAAEK,EAAI,EAAE,EAC3CG,EAAqBD,EAAa,OAAS,EAIjD,IAHIF,EAAI,IACJD,EAAiBnF,GAEd,EAAEC,EAAQqF,EAAa,QAAQ,CAClC,MAAME,EAAOF,EAAarF,CAAK,EAC/BoF,EAAYA,EAAYA,EAAUG,CAAI,EAAIxF,EAAOwF,CAAI,EACjDD,IAAuBtF,IACrBpF,EAASwK,CAAS,GAAKxI,EAAcwI,CAAS,GAC3C,MAAM,QAAQA,CAAS,GAAKL,GAAaK,CAAS,KACvDF,EAAiB,OAAOA,EAAeK,CAAI,EAAI,OAAOxF,EAAOwF,CAAI,GAErEL,EAAiBE,CACpB,CACJ,CACD,OAAOrF,CACX,CA2NA,SAASyF,IAAgB,CACrB,IAAIC,EAAa,CAAA,EAiBjB,MAAO,CACH,IAAI,WAAY,CACZ,OAAOA,CACV,EACD,KApBUhL,GAAU,CACpB,UAAWiL,KAAYD,EACnBC,EAAS,KAAKjL,CAAK,CAE/B,EAiBQ,UAhBeiL,IACfD,EAAW,KAAKC,CAAQ,EACjB,CACH,YAAa,IAAM,CACfD,EAAaA,EAAW,OAAQE,GAAMA,IAAMD,CAAQ,CACvD,CACb,GAWQ,YATgB,IAAM,CACtBD,EAAa,CAAA,CACrB,CAQA,CACA,CAEA,IAAIG,GAAenL,GAAUC,EAAkBD,CAAK,GAAK,CAACE,GAAaF,CAAK,EAE5E,SAASoL,EAAUC,EAASC,EAAS,CACjC,GAAIH,GAAYE,CAAO,GAAKF,GAAYG,CAAO,EAC3C,OAAOD,IAAYC,EAEvB,GAAIvL,EAAasL,CAAO,GAAKtL,EAAauL,CAAO,EAC7C,OAAOD,EAAQ,QAAO,IAAOC,EAAQ,QAAO,EAEhD,MAAMC,EAAQ,OAAO,KAAKF,CAAO,EAC3BG,EAAQ,OAAO,KAAKF,CAAO,EACjC,GAAIC,EAAM,SAAWC,EAAM,OACvB,MAAO,GAEX,UAAWtK,KAAOqK,EAAO,CACrB,MAAME,EAAOJ,EAAQnK,CAAG,EACxB,GAAI,CAACsK,EAAM,SAAStK,CAAG,EACnB,MAAO,GAEX,GAAIA,IAAQ,MAAO,CACf,MAAMwK,EAAOJ,EAAQpK,CAAG,EACxB,GAAKnB,EAAa0L,CAAI,GAAK1L,EAAa2L,CAAI,GACvCvL,EAASsL,CAAI,GAAKtL,EAASuL,CAAI,GAC/B,MAAM,QAAQD,CAAI,GAAK,MAAM,QAAQC,CAAI,EACxC,CAACN,EAAUK,EAAMC,CAAI,EACrBD,IAASC,EACX,MAAO,EAEd,CACJ,CACD,MAAO,EACX,CAEA,IAAIC,GAAiB3L,GAAU,CAC3B,MAAM4L,EAAQ5L,EAAQA,EAAM,cAAgB,EACtC6L,EAAeD,GAASA,EAAM,YAAcA,EAAM,YAAY,YAAc,YAClF,OAAO5L,aAAiB6L,CAC5B,EAEIC,GAAoBhM,GAAYA,EAAQ,OAAS,kBAEjD8I,GAAqBrB,GAAQZ,GAAaY,CAAG,GAAK1H,GAAgB0H,CAAG,EAErEwE,GAAQxE,GAAQoE,GAAcpE,CAAG,GAAKA,EAAI,YAE9C,SAASyE,GAAgBpK,EAAMkE,EAAS,GAAI,CACxC,MAAMmG,EAAoB,MAAM,QAAQrK,CAAI,EAC5C,GAAIzB,EAASyB,CAAI,GAAKqK,EAClB,UAAW/K,KAAOU,EACV,MAAM,QAAQA,EAAKV,CAAG,CAAC,GACtBf,EAASyB,EAAKV,CAAG,CAAC,GAAK,CAAC8C,GAAkBpC,EAAKV,CAAG,CAAC,GACpD4E,EAAO5E,CAAG,EAAI,MAAM,QAAQU,EAAKV,CAAG,CAAC,EAAI,CAAE,EAAG,GAC9C8K,GAAgBpK,EAAKV,CAAG,EAAG4E,EAAO5E,CAAG,CAAC,GAEhCjB,EAAkB2B,EAAKV,CAAG,CAAC,IACjC4E,EAAO5E,CAAG,EAAI,IAI1B,OAAO4E,CACX,CACA,SAASoG,GAAgCtK,EAAM+B,EAAYwI,EAAuB,CAC9E,MAAMF,EAAoB,MAAM,QAAQrK,CAAI,EAC5C,GAAIzB,EAASyB,CAAI,GAAKqK,EAClB,UAAW/K,KAAOU,EACV,MAAM,QAAQA,EAAKV,CAAG,CAAC,GACtBf,EAASyB,EAAKV,CAAG,CAAC,GAAK,CAAC8C,GAAkBpC,EAAKV,CAAG,CAAC,EAChDP,EAAYgD,CAAU,GACtBwH,GAAYgB,EAAsBjL,CAAG,CAAC,EACtCiL,EAAsBjL,CAAG,EAAI,MAAM,QAAQU,EAAKV,CAAG,CAAC,EAC9C8K,GAAgBpK,EAAKV,CAAG,EAAG,EAAE,EAC7B,CAAE,GAAG8K,GAAgBpK,EAAKV,CAAG,CAAC,CAAC,EAGrCgL,GAAgCtK,EAAKV,CAAG,EAAGjB,EAAkB0D,CAAU,EAAI,GAAKA,EAAWzC,CAAG,EAAGiL,EAAsBjL,CAAG,CAAC,EAI/HiL,EAAsBjL,CAAG,EAAI,CAACkK,EAAUxJ,EAAKV,CAAG,EAAGyC,EAAWzC,CAAG,CAAC,EAI9E,OAAOiL,CACX,CACA,IAAIC,GAAiB,CAACC,EAAe1I,IAAeuI,GAAgCG,EAAe1I,EAAYqI,GAAgBrI,CAAU,CAAC,EAEtI2I,GAAkB,CAACtM,EAAO,CAAE,cAAAsI,EAAe,YAAAiE,EAAa,WAAAC,CAAY,IAAK7L,EAAYX,CAAK,EACxFA,EACAsI,EACItI,IAAU,IAAMC,EAAkBD,CAAK,EACnC,IACA,CAACA,EACLuM,GAAe/I,EAASxD,CAAK,EACzB,IAAI,KAAKA,CAAK,EACdwM,EACIA,EAAWxM,CAAK,EAChBA,EAElB,SAASyM,GAAczG,EAAI,CACvB,MAAMuB,EAAMvB,EAAG,IACf,GAAI,EAAAA,EAAG,KAAOA,EAAG,KAAK,MAAOuB,GAAQA,EAAI,QAAQ,EAAIA,EAAI,UAGzD,OAAId,GAAYc,CAAG,EACRA,EAAI,MAEXZ,GAAaY,CAAG,EACTH,GAAcpB,EAAG,IAAI,EAAE,MAE9B8F,GAAiBvE,CAAG,EACb,CAAC,GAAGA,EAAI,eAAe,EAAE,IAAI,CAAC,CAAE,MAAAvH,KAAYA,CAAK,EAExDH,GAAgB0H,CAAG,EACZR,GAAiBf,EAAG,IAAI,EAAE,MAE9BsG,GAAgB3L,EAAY4G,EAAI,KAAK,EAAIvB,EAAG,IAAI,MAAQuB,EAAI,MAAOvB,CAAE,CAChF,CAEA,IAAI0G,GAAqB,CAAC3G,EAAa4G,EAASC,EAAchF,IAA8B,CACxF,MAAM9B,EAAS,CAAA,EACf,UAAWvF,KAAQwF,EAAa,CAC5B,MAAMtB,EAAQ5D,EAAI8L,EAASpM,CAAI,EAC/BkE,GAASY,EAAIS,EAAQvF,EAAMkE,EAAM,EAAE,CACtC,CACD,MAAO,CACH,aAAAmI,EACA,MAAO,CAAC,GAAG7G,CAAW,EACtB,OAAAD,EACA,0BAAA8B,CACR,CACA,EAEIiF,EAAgBC,GAASnM,EAAYmM,CAAI,EACvC,OACAlG,GAAQkG,CAAI,EACRA,EAAK,OACL3M,EAAS2M,CAAI,EACTlG,GAAQkG,EAAK,KAAK,EACdA,EAAK,MAAM,OACXA,EAAK,MACTA,EAEVC,GAAiB/F,GAAYA,EAAQ,QACpCA,EAAQ,UACLA,EAAQ,KACRA,EAAQ,KACRA,EAAQ,WACRA,EAAQ,WACRA,EAAQ,SACRA,EAAQ,UAEhB,SAASgG,GAAkBhI,EAAQ2H,EAASpM,EAAM,CAC9C,MAAM+F,EAAQzF,EAAImE,EAAQzE,CAAI,EAC9B,GAAI+F,GAASpB,GAAM3E,CAAI,EACnB,MAAO,CACH,MAAA+F,EACA,KAAA/F,CACZ,EAEI,MAAME,EAAQF,EAAK,MAAM,GAAG,EAC5B,KAAOE,EAAM,QAAQ,CACjB,MAAMqD,EAAYrD,EAAM,KAAK,GAAG,EAC1BgE,EAAQ5D,EAAI8L,EAAS7I,CAAS,EAC9BmJ,EAAapM,EAAImE,EAAQlB,CAAS,EACxC,GAAIW,GAAS,CAAC,MAAM,QAAQA,CAAK,GAAKlE,IAASuD,EAC3C,MAAO,CAAE,KAAAvD,CAAI,EAEjB,GAAI0M,GAAcA,EAAW,KACzB,MAAO,CACH,KAAMnJ,EACN,MAAOmJ,CACvB,EAEQxM,EAAM,IAAG,CACZ,CACD,MAAO,CACH,KAAAF,CACR,CACA,CAEA,IAAI2M,GAAiB,CAAC/G,EAAagH,EAAWC,EAAaC,EAAgBlD,IACnEA,EAAK,QACE,GAEF,CAACiD,GAAejD,EAAK,UACnB,EAAEgD,GAAahH,IAEjBiH,EAAcC,EAAe,SAAWlD,EAAK,UAC3C,CAAChE,GAEHiH,EAAcC,EAAe,WAAalD,EAAK,YAC7ChE,EAEJ,GAGPmH,GAAkB,CAAC/F,EAAKhH,IAAS,CAACG,GAAQG,EAAI0G,EAAKhH,CAAI,CAAC,EAAE,QAAUgK,EAAMhD,EAAKhH,CAAI,EAEvF,MAAMgN,GAAiB,CACnB,KAAMnM,EAAgB,SACtB,eAAgBA,EAAgB,SAChC,iBAAkB,EACtB,EACA,SAASoM,GAAkB9L,EAAQ,GAAI,CACnC,IAAI+L,EAAW,CACX,GAAGF,GACH,GAAG7L,CACX,EACQgM,EAAa,CACb,QAAS,GACT,aAAc,GACd,YAAa,CAAE,EACf,YAAa,GACb,YAAa,EACb,cAAe,CAAE,EACjB,aAAc,GACd,mBAAoB,GACpB,QAAS,GACT,OAAQ,CAAE,CAClB,EACQf,EAAU,CAAA,EACVgB,EAAiB3D,EAAYyD,EAAS,aAAa,GAAK,CAAA,EACxDG,EAAcH,EAAS,iBACrB,CAAE,EACFzD,EAAY2D,CAAc,EAC5BE,EAAc,CACd,OAAQ,GACR,MAAO,GACP,MAAO,EACf,EACQnK,EAAS,CACT,MAAO,IAAI,IACX,QAAS,IAAI,IACb,MAAO,IAAI,IACX,MAAO,IAAI,GACnB,EACQoK,EACAC,EAAQ,EACRC,EAAiB,CAAA,EACrB,MAAMjM,EAAkB,CACpB,QAAS,GACT,YAAa,GACb,cAAe,GACf,aAAc,GACd,QAAS,GACT,OAAQ,EAChB,EACUkM,EAAY,CACd,MAAOlD,GAAe,EACtB,MAAOA,GAAe,EACtB,MAAOA,GAAe,CAC9B,EACUmD,EAA6BhE,GAAmBuD,EAAS,IAAI,EAC7DU,EAA4BjE,GAAmBuD,EAAS,cAAc,EACtEW,GAAmCX,EAAS,eAAiBrM,EAAgB,IAC7EiN,GAAY9K,GAAc+K,GAAS,CACrC,aAAaP,CAAK,EAClBA,EAAQ,OAAO,WAAWxK,EAAU+K,CAAI,CAChD,EACUC,EAAe,MAAOC,GAAqB,CAC7C,IAAIC,EAAU,GACd,OAAI1M,EAAgB,UAChB0M,EAAUhB,EAAS,SACbtL,GAAe,MAAMuM,EAAgB,GAAE,MAAM,EAC7C,MAAMC,EAAyBhC,EAAS,EAAI,EAC9C,CAAC6B,GAAoBC,IAAYf,EAAW,UAC5CA,EAAW,QAAUe,EACrBR,EAAU,MAAM,KAAK,CACjB,QAAAQ,CACpB,CAAiB,IAGFA,CACf,EACUG,EAAoB,CAACrO,EAAM0G,EAAS,CAAE,EAAE4H,EAAQC,EAAMC,EAAkB,GAAMC,EAA6B,KAAS,CACtH,GAAIF,GAAQD,EAAQ,CAEhB,GADAhB,EAAY,OAAS,GACjBmB,GAA8B,MAAM,QAAQnO,EAAI8L,EAASpM,CAAI,CAAC,EAAG,CACjE,MAAM2D,EAAc2K,EAAOhO,EAAI8L,EAASpM,CAAI,EAAGuO,EAAK,KAAMA,EAAK,IAAI,EACnEC,GAAmB1J,EAAIsH,EAASpM,EAAM2D,CAAW,CACpD,CACD,GAAInC,EAAgB,QAChBiN,GACA,MAAM,QAAQnO,EAAI6M,EAAW,OAAQnN,CAAI,CAAC,EAAG,CAC7C,MAAMyE,EAAS6J,EAAOhO,EAAI6M,EAAW,OAAQnN,CAAI,EAAGuO,EAAK,KAAMA,EAAK,IAAI,EACxEC,GAAmB1J,EAAIqI,EAAW,OAAQnN,EAAMyE,CAAM,EACtDsI,GAAgBI,EAAW,OAAQnN,CAAI,CAC1C,CACD,GAAIwB,EAAgB,eAChBiN,GACA,MAAM,QAAQnO,EAAI6M,EAAW,cAAenN,CAAI,CAAC,EAAG,CACpD,MAAM0O,EAAgBJ,EAAOhO,EAAI6M,EAAW,cAAenN,CAAI,EAAGuO,EAAK,KAAMA,EAAK,IAAI,EACtFC,GAAmB1J,EAAIqI,EAAW,cAAenN,EAAM0O,CAAa,CACvE,CACGlN,EAAgB,cAChB2L,EAAW,YAActB,GAAeuB,EAAgBC,CAAW,GAEvEK,EAAU,MAAM,KAAK,CACjB,QAASiB,EAAU3O,EAAM0G,CAAM,EAC/B,YAAayG,EAAW,YACxB,OAAQA,EAAW,OACnB,QAASA,EAAW,OACpC,CAAa,CACJ,MAEGrI,EAAIuI,EAAarN,EAAM0G,CAAM,CAEzC,EACUkI,EAAe,CAAC5O,EAAM+F,IAAU,CAClCjB,EAAIqI,EAAW,OAAQnN,EAAM+F,CAAK,EAClC2H,EAAU,MAAM,KAAK,CACjB,OAAQP,EAAW,MAC/B,CAAS,CACT,EACU0B,EAAsB,CAAC7O,EAAM8O,EAAsBrP,EAAOuH,IAAQ,CACpE,MAAM9C,EAAQ5D,EAAI8L,EAASpM,CAAI,EAC/B,GAAIkE,EAAO,CACP,MAAMzD,EAAeH,EAAI+M,EAAarN,EAAMI,EAAYX,CAAK,EAAIa,EAAI8M,EAAgBpN,CAAI,EAAIP,CAAK,EAClGW,EAAYK,CAAY,GACnBuG,GAAOA,EAAI,gBACZ8H,EACEhK,EAAIuI,EAAarN,EAAM8O,EAAuBrO,EAAeyL,GAAchI,EAAM,EAAE,CAAC,EACpF6K,EAAc/O,EAAMS,CAAY,EACtC6M,EAAY,OAASU,GACxB,CACT,EACUgB,EAAsB,CAAChP,EAAMiP,EAAYrJ,EAAasJ,EAAaC,IAAiB,CACtF,IAAIC,EAAe,GACnB,MAAMC,EAAS,CACX,KAAArP,CACZ,EACcsP,EAAyBhP,EAAI6M,EAAW,cAAenN,CAAI,EACjE,GAAIwB,EAAgB,QAAS,CACzB,MAAM+N,EAAsBpC,EAAW,QACvCA,EAAW,QAAUkC,EAAO,QAAUV,EAAS,EAC/CS,EAAeG,IAAwBF,EAAO,OACjD,CACD,GAAI7N,EAAgB,cAAgB,CAACoE,GAAesJ,GAAc,CAC9D,MAAMM,EAAuBlP,EAAI6M,EAAW,YAAanN,CAAI,EAC9B6K,EAAUvK,EAAI8M,EAAgBpN,CAAI,EAAGiP,CAAU,EAExEjF,EAAMmD,EAAW,YAAanN,CAAI,EAClC8E,EAAIqI,EAAW,YAAanN,EAAM,EAAI,EAC5CqP,EAAO,YAAclC,EAAW,YAChCiC,EACIA,GACII,IAAyBlP,EAAI6M,EAAW,YAAanN,CAAI,CACpE,CACD,OAAI4F,GAAe,CAAC0J,IAChBxK,EAAIqI,EAAW,cAAenN,EAAM4F,CAAW,EAC/CyJ,EAAO,cAAgBlC,EAAW,cAClCiC,EACIA,GACK5N,EAAgB,eACb8N,IAA2B1J,GAE3CwJ,GAAgBD,GAAgBzB,EAAU,MAAM,KAAK2B,CAAM,EACpDD,EAAeC,EAAS,EACvC,EACUI,GAAsB,MAAOzP,EAAMkO,EAASnI,EAAO2J,IAAe,CACpE,MAAMC,EAAqBrP,EAAI6M,EAAW,OAAQnN,CAAI,EAChD4P,EAAoBpO,EAAgB,SAAW2L,EAAW,UAAYe,EAY5E,GAXI/M,EAAM,YAAc4E,GACpBwH,EAAqBO,GAAS,IAAMc,EAAa5O,EAAM+F,CAAK,CAAC,EAC7DwH,EAAmBpM,EAAM,UAAU,IAGnC,aAAaqM,CAAK,EAClBD,EAAqB,KACrBxH,EACMjB,EAAIqI,EAAW,OAAQnN,EAAM+F,CAAK,EAClCiE,EAAMmD,EAAW,OAAQnN,CAAI,IAElC+F,EAAQ,CAAC8E,EAAU8E,EAAoB5J,CAAK,EAAI4J,IACjD,CAAC/N,EAAc8N,CAAU,GACzBE,EAAmB,CACnB,MAAMC,EAAmB,CACrB,GAAGH,EACH,GAAIE,EAAoB,CAAE,QAAA1B,CAAS,EAAG,GACtC,OAAQf,EAAW,OACnB,KAAAnN,CAChB,EACYmN,EAAa,CACT,GAAGA,EACH,GAAG0C,CACnB,EACYnC,EAAU,MAAM,KAAKmC,CAAgB,CACxC,CACDpC,EAAezN,CAAI,IACfwB,EAAgB,cAChB,CAAC,OAAO,OAAOiM,CAAc,EAAE,KAAMqC,GAAMA,CAAC,IAC5CpC,EAAU,MAAM,KAAK,CACjB,aAAc,EAC9B,CAAa,EACDD,EAAiB,CAAA,EAE7B,EACUU,EAAiB,MAAOnO,GAASkN,EAAS,SAC1C,MAAMA,EAAS,SAAS,CAAE,GAAGG,CAAW,EAAIH,EAAS,QAASf,GAAmBnM,GAAQmD,EAAO,MAAOiJ,EAASc,EAAS,aAAcA,EAAS,yBAAyB,CAAC,EAC1K,GACA6C,EAA8B,MAAO7P,GAAU,CACjD,KAAM,CAAE,OAAAuE,CAAM,EAAK,MAAM0J,IACzB,GAAIjO,EACA,UAAWF,KAAQE,EAAO,CACtB,MAAM6F,EAAQzF,EAAImE,EAAQzE,CAAI,EAC9B+F,EACMjB,EAAIqI,EAAW,OAAQnN,EAAM+F,CAAK,EAClCiE,EAAMmD,EAAW,OAAQnN,CAAI,CACtC,MAGDmN,EAAW,OAAS1I,EAExB,OAAOA,CACf,EACU2J,EAA2B,MAAO7I,EAAQyK,EAAsBC,EAAU,CAC5E,MAAO,EACf,IAAU,CACF,UAAWjQ,KAAQuF,EAAQ,CACvB,MAAMrB,EAAQqB,EAAOvF,CAAI,EACzB,GAAIkE,EAAO,CACP,KAAM,CAAE,GAAAuB,EAAI,GAAGwJ,CAAU,EAAK/K,EAC9B,GAAIuB,EAAI,CACJ,MAAMyK,EAAmB/M,EAAO,MAAM,IAAIsC,EAAG,IAAI,EAC3C0K,EAAa,MAAMhJ,GAAcjD,EAAO5D,EAAI+M,EAAa5H,EAAG,IAAI,EAAGoI,GAAkCX,EAAS,0BAA2BgD,CAAgB,EAC/J,GAAIC,EAAW1K,EAAG,IAAI,IAClBwK,EAAQ,MAAQ,GACZD,GACA,MAGR,CAACA,IACI1P,EAAI6P,EAAY1K,EAAG,IAAI,EAClByK,EACIpK,GAA0BqH,EAAW,OAAQgD,EAAY1K,EAAG,IAAI,EAChEX,EAAIqI,EAAW,OAAQ1H,EAAG,KAAM0K,EAAW1K,EAAG,IAAI,CAAC,EACvDuE,EAAMmD,EAAW,OAAQ1H,EAAG,IAAI,EAC7C,CACDwJ,GACK,MAAMb,EAAyBa,EAAYe,EAAsBC,CAAO,CAChF,CACJ,CACD,OAAOA,EAAQ,KACvB,EACUG,GAAmB,IAAM,CAC3B,UAAWpQ,KAAQmD,EAAO,QAAS,CAC/B,MAAMe,EAAQ5D,EAAI8L,EAASpM,CAAI,EAC/BkE,IACKA,EAAM,GAAG,KACJA,EAAM,GAAG,KAAK,MAAO8C,GAAQ,CAACwE,GAAKxE,CAAG,CAAC,EACvC,CAACwE,GAAKtH,EAAM,GAAG,GAAG,IACxBmM,GAAWrQ,CAAI,CACtB,CACDmD,EAAO,QAAU,IAAI,GAC7B,EACUwL,EAAY,CAAC3O,EAAMqB,KAAUrB,GAAQqB,GAAQyD,EAAIuI,EAAarN,EAAMqB,CAAI,EAC1E,CAACwJ,EAAUyF,KAAalD,CAAc,GACpCmD,EAAY,CAACrQ,EAAOO,EAAc4C,IAAa,CACjD,MAAMM,EAAc,CAChB,GAAI2J,EAAY,MACVD,EACAjN,EAAYK,CAAY,EACpB2M,EACAnK,EAAS/C,CAAK,EACV,CAAE,CAACA,CAAK,EAAGO,CAAc,EACzBA,CAC1B,EACQ,OAAOyC,GAAoBhD,EAAOiD,EAAQQ,EAAaN,CAAQ,CACvE,EACUmN,EAAkBxQ,GAASG,GAAQG,EAAIgN,EAAY,MAAQD,EAAcD,EAAgBpN,EAAMmB,EAAM,iBAAmBb,EAAI8M,EAAgBpN,EAAM,EAAE,EAAI,CAAE,CAAA,CAAC,EAC3J+O,EAAgB,CAAC/O,EAAMP,EAAOgH,EAAU,CAAA,IAAO,CACjD,MAAMvC,EAAQ5D,EAAI8L,EAASpM,CAAI,EAC/B,IAAIiP,EAAaxP,EACjB,GAAIyE,EAAO,CACP,MAAMuM,EAAiBvM,EAAM,GACzBuM,IACA,CAACA,EAAe,UACZ3L,EAAIuI,EAAarN,EAAM+L,GAAgBtM,EAAOgR,CAAc,CAAC,EACjExB,EACIzF,IAAS4B,GAAcqF,EAAe,GAAG,GAAK/Q,EAAkBD,CAAK,EAC/D,GACAA,EACN8L,GAAiBkF,EAAe,GAAG,EACnC,CAAC,GAAGA,EAAe,IAAI,OAAO,EAAE,QAASC,GAAeA,EAAU,SAAWzB,EAAW,SAASyB,EAAU,KAAK,CAAE,EAE7GD,EAAe,KAChBnR,GAAgBmR,EAAe,GAAG,EAClCA,EAAe,KAAK,OAAS,EACvBA,EAAe,KAAK,QAASE,GAAgB,CAACA,EAAY,WACvDA,EAAY,QAAU,MAAM,QAAQ1B,CAAU,EACzC,CAAC,CAACA,EAAW,KAAM5N,GAASA,IAASsP,EAAY,KAAK,EACtD1B,IAAe0B,EAAY,MAAM,EACzCF,EAAe,KAAK,CAAC,IAClBA,EAAe,KAAK,CAAC,EAAE,QAAU,CAAC,CAACxB,GAG5CwB,EAAe,KAAK,QAASG,GAAcA,EAAS,QAAUA,EAAS,QAAU3B,CAAW,EAG3F/I,GAAYuK,EAAe,GAAG,EACnCA,EAAe,IAAI,MAAQ,IAG3BA,EAAe,IAAI,MAAQxB,EACtBwB,EAAe,IAAI,MACpB/C,EAAU,MAAM,KAAK,CACjB,KAAA1N,CAC5B,CAAyB,GAIhB,EACAyG,EAAQ,aAAeA,EAAQ,cAC5BuI,EAAoBhP,EAAMiP,EAAYxI,EAAQ,YAAaA,EAAQ,YAAa,EAAI,EACxFA,EAAQ,gBAAkBoK,GAAQ7Q,CAAI,CAC9C,EACU8Q,EAAY,CAAC9Q,EAAMP,EAAOgH,IAAY,CACxC,UAAWsK,KAAYtR,EAAO,CAC1B,MAAMwP,EAAaxP,EAAMsR,CAAQ,EAC3BxN,EAAY,GAAGvD,CAAI,IAAI+Q,CAAQ,GAC/B7M,EAAQ5D,EAAI8L,EAAS7I,CAAS,GACnCJ,EAAO,MAAM,IAAInD,CAAI,GAClB,CAAC4K,GAAYqE,CAAU,GACtB/K,GAAS,CAACA,EAAM,KACjB,CAAC1E,EAAayP,CAAU,EACtB6B,EAAUvN,EAAW0L,EAAYxI,CAAO,EACxCsI,EAAcxL,EAAW0L,EAAYxI,CAAO,CACrD,CACT,EACUuK,EAAW,CAAChR,EAAMP,EAAOgH,EAAU,CAAA,IAAO,CAC5C,MAAMvC,EAAQ5D,EAAI8L,EAASpM,CAAI,EACzBsH,EAAenE,EAAO,MAAM,IAAInD,CAAI,EACpCiR,EAAaxH,EAAYhK,CAAK,EACpCqF,EAAIuI,EAAarN,EAAMiR,CAAU,EAC7B3J,GACAoG,EAAU,MAAM,KAAK,CACjB,KAAA1N,EACA,OAAQqN,CACxB,CAAa,GACI7L,EAAgB,SAAWA,EAAgB,cAC5CiF,EAAQ,cACR0G,EAAW,YAActB,GAAeuB,EAAgBC,CAAW,EACnEK,EAAU,MAAM,KAAK,CACjB,KAAA1N,EACA,YAAamN,EAAW,YACxB,QAASwB,EAAU3O,EAAMiR,CAAU,CACvD,CAAiB,IAIL/M,GAAS,CAACA,EAAM,IAAM,CAACxE,EAAkBuR,CAAU,EAC7CH,EAAU9Q,EAAMiR,EAAYxK,CAAO,EACnCsI,EAAc/O,EAAMiR,EAAYxK,CAAO,EAEjDd,GAAU3F,EAAMmD,CAAM,GAAKuK,EAAU,MAAM,KAAK,CAAA,CAAE,EAClDA,EAAU,MAAM,KAAK,CACjB,KAAA1N,CACZ,CAAS,CACT,EACUkR,GAAW,MAAOpR,GAAU,CAC9B,MAAMqR,EAASrR,EAAM,OACrB,IAAIE,EAAOmR,EAAO,KAClB,MAAMjN,EAAQ5D,EAAI8L,EAASpM,CAAI,EAC/B,GAAIkE,EAAO,CACP,IAAI6B,EACAmI,EACJ,MAAMe,EAAakC,EAAO,KACpBjF,GAAchI,EAAM,EAAE,EACtBrE,GAAcC,CAAK,EACnB8F,EAAc9F,EAAM,OAASc,GAAO,MAAQd,EAAM,OAASc,GAAO,UAClEwQ,EAAwB,CAAC5E,GAActI,EAAM,EAAE,GACjD,CAACgJ,EAAS,UACV,CAAC5M,EAAI6M,EAAW,OAAQnN,CAAI,GAC5B,CAACkE,EAAM,GAAG,MACVyI,GAAe/G,EAAatF,EAAI6M,EAAW,cAAenN,CAAI,EAAGmN,EAAW,YAAaS,EAA2BD,CAA0B,EAC5I0D,GAAU1L,GAAU3F,EAAMmD,EAAQyC,CAAW,EACnDd,EAAIuI,EAAarN,EAAMiP,CAAU,EAC7BrJ,GACA1B,EAAM,GAAG,QAAUA,EAAM,GAAG,OAAOpE,CAAK,EACxCyN,GAAsBA,EAAmB,CAAC,GAErCrJ,EAAM,GAAG,UACdA,EAAM,GAAG,SAASpE,CAAK,EAE3B,MAAM4P,GAAaV,EAAoBhP,EAAMiP,EAAYrJ,EAAa,EAAK,EACrEuJ,GAAe,CAACvN,EAAc8N,EAAU,GAAK2B,GAMnD,GALA,CAACzL,GACG8H,EAAU,MAAM,KAAK,CACjB,KAAA1N,EACA,KAAMF,EAAM,IAChC,CAAiB,EACDsR,EACA,OAAQjC,IACJzB,EAAU,MAAM,KAAK,CAAE,KAAA1N,EAAM,GAAIqR,GAAU,CAAE,EAAG3B,EAAW,CAAE,EAOrE,GALA,CAAC9J,GAAeyL,IAAW3D,EAAU,MAAM,KAAK,CAAA,CAAE,EAClDD,EAAezN,CAAI,GAAIyN,EAAezN,CAAI,EAAI,GAC9C0N,EAAU,MAAM,KAAK,CACjB,aAAc,EAC9B,CAAa,EACGR,EAAS,SAAU,CACnB,KAAM,CAAE,OAAAzI,EAAM,EAAK,MAAM0J,EAAe,CAACnO,CAAI,CAAC,EACxCsR,GAA4B7E,GAAkBU,EAAW,OAAQf,EAASpM,CAAI,EAC9EuR,GAAoB9E,GAAkBhI,GAAQ2H,EAASkF,GAA0B,MAAQtR,CAAI,EACnG+F,EAAQwL,GAAkB,MAC1BvR,EAAOuR,GAAkB,KACzBrD,EAAUtM,EAAc6C,EAAM,CACjC,MAEGsB,GAAS,MAAMoB,GAAcjD,EAAO5D,EAAI+M,EAAarN,CAAI,EAAG6N,GAAkCX,EAAS,yBAAyB,GAAGlN,CAAI,EACvIkO,EAAU,MAAMF,EAAa,EAAI,EAErC9J,EAAM,GAAG,MACL2M,GAAQ3M,EAAM,GAAG,IAAI,EACzBuL,GAAoBzP,EAAMkO,EAASnI,EAAO2J,EAAU,CACvD,CACT,EACUmB,GAAU,MAAO7Q,EAAMyG,EAAU,CAAA,IAAO,CAC1C,IAAIyH,EACA3E,EACJ,MAAMiI,EAAazP,GAAsB/B,CAAI,EAI7C,GAHA0N,EAAU,MAAM,KAAK,CACjB,aAAc,EAC1B,CAAS,EACGR,EAAS,SAAU,CACnB,MAAMzI,EAAS,MAAMsL,EAA4B3P,EAAYJ,CAAI,EAAIA,EAAOwR,CAAU,EACtFtD,EAAUtM,EAAc6C,CAAM,EAC9B8E,EAAmBvJ,EACb,CAACwR,EAAW,KAAMxR,GAASM,EAAImE,EAAQzE,CAAI,CAAC,EAC5CkO,CACT,MACQlO,GACLuJ,GAAoB,MAAM,QAAQ,IAAIiI,EAAW,IAAI,MAAOjO,GAAc,CACtE,MAAMW,EAAQ5D,EAAI8L,EAAS7I,CAAS,EACpC,OAAO,MAAM6K,EAAyBlK,GAASA,EAAM,GAAK,CAAE,CAACX,CAAS,EAAGW,GAAUA,CAAK,CACxG,CAAa,CAAC,GAAG,MAAM,OAAO,EAClB,EAAE,CAACqF,GAAoB,CAAC4D,EAAW,UAAYa,EAAY,GAG3DzE,EAAmB2E,EAAU,MAAME,EAAyBhC,CAAO,EAEvE,OAAAsB,EAAU,MAAM,KAAK,CACjB,GAAI,CAACzK,EAASjD,CAAI,GACbwB,EAAgB,SAAW0M,IAAYf,EAAW,QACjD,CAAE,EACF,CAAE,KAAAnN,CAAI,EACZ,GAAIkN,EAAS,SAAW,CAAE,QAAAgB,CAAO,EAAK,CAAA,EACtC,OAAQf,EAAW,OACnB,aAAc,EAC1B,CAAS,EACD1G,EAAQ,aACJ,CAAC8C,GACDjE,GAAa8G,EAAUzL,GAAQL,EAAI6M,EAAW,OAAQxM,CAAG,EAAGX,EAAOwR,EAAarO,EAAO,KAAK,EACzFoG,CACf,EACU+G,GAAakB,GAAe,CAC9B,MAAM9K,EAAS,CACX,GAAG0G,EACH,GAAIE,EAAY,MAAQD,EAAc,EAClD,EACQ,OAAOjN,EAAYoR,CAAU,EACvB9K,EACAzD,EAASuO,CAAU,EACflR,EAAIoG,EAAQ8K,CAAU,EACtBA,EAAW,IAAKxR,GAASM,EAAIoG,EAAQ1G,CAAI,CAAC,CAC5D,EACUyR,GAAgB,CAACzR,EAAMuB,KAAe,CACxC,QAAS,CAAC,CAACjB,GAAKiB,GAAa4L,GAAY,OAAQnN,CAAI,EACrD,QAAS,CAAC,CAACM,GAAKiB,GAAa4L,GAAY,YAAanN,CAAI,EAC1D,UAAW,CAAC,CAACM,GAAKiB,GAAa4L,GAAY,cAAenN,CAAI,EAC9D,MAAOM,GAAKiB,GAAa4L,GAAY,OAAQnN,CAAI,CACzD,GACU0R,GAAe1R,GAAS,CAC1BA,EACM+B,GAAsB/B,CAAI,EAAE,QAAS2R,GAAc3H,EAAMmD,EAAW,OAAQwE,CAAS,CAAC,EACrFxE,EAAW,OAAS,CAAA,EAC3BO,EAAU,MAAM,KAAK,CACjB,OAAQP,EAAW,MAC/B,CAAS,CACT,EACUyE,GAAW,CAAC5R,EAAM+F,EAAOU,IAAY,CACvC,MAAMO,GAAO1G,EAAI8L,EAASpM,EAAM,CAAE,GAAI,CAAA,EAAI,EAAE,IAAM,CAAA,GAAI,IACtD8E,EAAIqI,EAAW,OAAQnN,EAAM,CACzB,GAAG+F,EACH,IAAAiB,CACZ,CAAS,EACD0G,EAAU,MAAM,KAAK,CACjB,KAAA1N,EACA,OAAQmN,EAAW,OACnB,QAAS,EACrB,CAAS,EACD1G,GAAWA,EAAQ,aAAeO,GAAOA,EAAI,OAASA,EAAI,OAClE,EACU6K,GAAQ,CAAC7R,EAAMS,IAAiB+C,GAAWxD,CAAI,EAC/C0N,EAAU,MAAM,UAAU,CACxB,KAAOoE,GAAS9R,EAAKuQ,EAAU,OAAW9P,CAAY,EAAGqR,CAAI,CACzE,CAAS,EACCvB,EAAUvQ,EAAMS,EAAc,EAAI,EAClC4P,GAAa,CAACrQ,EAAMyG,EAAU,CAAA,IAAO,CACvC,UAAWlD,KAAavD,EAAO+B,GAAsB/B,CAAI,EAAImD,EAAO,MAChEA,EAAO,MAAM,OAAOI,CAAS,EAC7BJ,EAAO,MAAM,OAAOI,CAAS,EACzBjD,EAAI8L,EAAS7I,CAAS,IACjBkD,EAAQ,YACTuD,EAAMoC,EAAS7I,CAAS,EACxByG,EAAMqD,EAAa9J,CAAS,GAEhC,CAACkD,EAAQ,WAAauD,EAAMmD,EAAW,OAAQ5J,CAAS,EACxD,CAACkD,EAAQ,WAAauD,EAAMmD,EAAW,YAAa5J,CAAS,EAC7D,CAACkD,EAAQ,aAAeuD,EAAMmD,EAAW,cAAe5J,CAAS,EACjE,CAAC2J,EAAS,kBACN,CAACzG,EAAQ,kBACTuD,EAAMoD,EAAgB7J,CAAS,GAG3CmK,EAAU,MAAM,KAAK,CAAA,CAAE,EACvBA,EAAU,MAAM,KAAK,CACjB,GAAGP,EACH,GAAK1G,EAAQ,UAAiB,CAAE,QAASkI,EAAS,GAAzB,CAAA,CACrC,CAAS,EACD,CAAClI,EAAQ,aAAeuH,GAChC,EACU+D,GAAW,CAAC/R,EAAMyG,EAAU,CAAA,IAAO,CACrC,IAAIvC,EAAQ5D,EAAI8L,EAASpM,CAAI,EAC7B,MAAMgS,EAAoB/L,GAAUQ,EAAQ,QAAQ,EACpD,OAAA3B,EAAIsH,EAASpM,EAAM,CACf,GAAI,CACA,GAAIkE,GAASA,EAAM,GAAKA,EAAM,GAAK,CAAE,IAAK,CAAE,KAAAlE,CAAI,GAChD,KAAAA,EACA,MAAO,GACP,GAAGyG,CACN,CACb,CAAS,EACDtD,EAAO,MAAM,IAAInD,CAAI,EACrBkE,EACM8N,GACElN,EAAIuI,EAAarN,EAAMyG,EAAQ,SACzB,OACAnG,EAAI+M,EAAarN,EAAMkM,GAAchI,EAAM,EAAE,CAAC,CAAC,EACvD2K,EAAoB7O,EAAM,GAAMyG,EAAQ,KAAK,EAC5C,CACH,GAAIuL,EAAoB,CAAE,SAAUvL,EAAQ,QAAQ,EAAK,CAAA,EACzD,GAAIyG,EAAS,0BACP,CACE,SAAU,CAAC,CAACzG,EAAQ,SACpB,IAAK6F,EAAa7F,EAAQ,GAAG,EAC7B,IAAK6F,EAAa7F,EAAQ,GAAG,EAC7B,UAAW6F,EAAa7F,EAAQ,SAAS,EACzC,UAAW6F,EAAa7F,EAAQ,SAAS,EACzC,QAAS6F,EAAa7F,EAAQ,OAAO,CACxC,EACC,GACN,KAAAzG,EACA,SAAAkR,GACA,OAAQA,GACR,IAAMlK,GAAQ,CACV,GAAIA,EAAK,CACL+K,GAAS/R,EAAMyG,CAAO,EACtBvC,EAAQ5D,EAAI8L,EAASpM,CAAI,EACzB,MAAMiS,EAAW7R,EAAY4G,EAAI,KAAK,GAChCA,EAAI,kBACAA,EAAI,iBAAiB,uBAAuB,EAAE,CAAC,GAAKA,EAGxDkL,EAAkB7J,GAAkB4J,CAAQ,EAC5C1K,EAAOrD,EAAM,GAAG,MAAQ,CAAA,EAC9B,GAAIgO,EACE3K,EAAK,KAAMZ,GAAWA,IAAWsL,CAAQ,EACzCA,IAAa/N,EAAM,GAAG,IACxB,OAEJY,EAAIsH,EAASpM,EAAM,CACf,GAAI,CACA,GAAGkE,EAAM,GACT,GAAIgO,EACE,CACE,KAAM,CACF,GAAG3K,EAAK,OAAOiE,EAAI,EACnByG,EACA,GAAM,MAAM,QAAQ3R,EAAI8M,EAAgBpN,CAAI,CAAC,EACvC,CAAC,EAAE,EACH,EACT,EACD,IAAK,CAAE,KAAMiS,EAAS,KAAM,KAAAjS,CAAM,CACrC,EACC,CAAE,IAAKiS,EAChB,CACzB,CAAqB,EACDpD,EAAoB7O,EAAM,GAAO,OAAWiS,CAAQ,CACvD,MAEG/N,EAAQ5D,EAAI8L,EAASpM,EAAM,CAAE,CAAA,EACzBkE,EAAM,KACNA,EAAM,GAAG,MAAQ,KAEpBgJ,EAAS,kBAAoBzG,EAAQ,mBAClC,EAAExG,GAAmBkD,EAAO,MAAOnD,CAAI,GAAKsN,EAAY,SACxDnK,EAAO,QAAQ,IAAInD,CAAI,CAElC,CACb,CACA,EAuKI,MAAO,CACH,QAAS,CACL,SAAA+R,GACA,WAAA1B,GACA,cAAAoB,GACA,eAAAtD,EACA,UAAAoC,EACA,UAAA5B,EACA,aAAAX,EACA,iBAAAoC,GACA,kBAAA/B,EACA,eAAAmC,EACA,UAAA9C,EACA,gBAAAlM,EACA,IAAI,SAAU,CACV,OAAO4K,CACV,EACD,IAAI,aAAc,CACd,OAAOiB,CACV,EACD,IAAI,aAAc,CACd,OAAOC,CACV,EACD,IAAI,YAAY7N,EAAO,CACnB6N,EAAc7N,CACjB,EACD,IAAI,gBAAiB,CACjB,OAAO2N,CACV,EACD,IAAI,QAAS,CACT,OAAOjK,CACV,EACD,IAAI,OAAO1D,EAAO,CACd0D,EAAS1D,CACZ,EACD,IAAI,YAAa,CACb,OAAO0N,CACV,EACD,IAAI,WAAW1N,EAAO,CAClB0N,EAAa1N,CAChB,EACD,IAAI,UAAW,CACX,OAAOyN,CACV,EACD,IAAI,SAASzN,EAAO,CAChByN,EAAW,CACP,GAAGA,EACH,GAAGzN,CACvB,CACa,CACJ,EACD,QAAAoR,GACA,SAAAkB,GACA,aA3NiB,CAACI,EAASC,IAAc,MAAOC,GAAM,CAClDA,IACAA,EAAE,gBAAkBA,EAAE,iBACtBA,EAAE,SAAWA,EAAE,WAEnB,IAAIC,EAAoB,GACpB3O,EAAc8F,EAAY4D,CAAW,EACzCK,EAAU,MAAM,KAAK,CACjB,aAAc,EAC1B,CAAS,EACD,GAAI,CACA,GAAIR,EAAS,SAAU,CACnB,KAAM,CAAE,OAAAzI,EAAQ,OAAAiC,GAAW,MAAMyH,EAAc,EAC/ChB,EAAW,OAAS1I,EACpBd,EAAc+C,CACjB,MAEG,MAAM0H,EAAyBhC,CAAO,EAEtCxK,EAAcuL,EAAW,MAAM,GAC/BO,EAAU,MAAM,KAAK,CACjB,OAAQ,CAAE,EACV,aAAc,EAClC,CAAiB,EACD,MAAMyE,EAAQxO,EAAa0O,CAAC,IAGxBD,GACA,MAAMA,EAAU,CAAE,GAAGjF,EAAW,MAAQ,EAAEkF,CAAC,EAE/CnF,EAAS,kBACL5H,GAAa8G,EAAUzL,GAAQL,EAAI6M,EAAW,OAAQxM,CAAG,EAAGwC,EAAO,KAAK,EAEnF,OACMoP,EAAK,CACR,MAAAD,EAAoB,GACdC,CACT,QACO,CACJpF,EAAW,YAAc,GACzBO,EAAU,MAAM,KAAK,CACjB,YAAa,GACb,aAAc,GACd,mBAAoB9L,EAAcuL,EAAW,MAAM,GAAKmF,EACxD,YAAanF,EAAW,YAAc,EACtC,OAAQA,EAAW,MACnC,CAAa,CACJ,CACT,EA4KQ,MAAA0E,GACA,SAAAb,EACA,UAAAV,GACA,MArJU,CAAClN,EAAYoP,EAAmB,CAAA,IAAO,CACjD,MAAMC,EAAgBrP,GAAcgK,EAC9BsF,EAAqBjJ,EAAYgJ,CAAa,EAC9C/L,EAAStD,GAAc,CAACxB,EAAcwB,CAAU,EAChDsP,EACAtF,EAIN,GAHKoF,EAAiB,oBAClBpF,EAAiBqF,GAEjB,CAACD,EAAiB,WAAY,CAC9B,GAAIA,EAAiB,gBACjB,UAAWjP,KAAaJ,EAAO,MAC3B7C,EAAI6M,EAAW,YAAa5J,CAAS,EAC/BuB,EAAI4B,EAAQnD,EAAWjD,EAAI+M,EAAa9J,CAAS,CAAC,EAClDyN,EAASzN,EAAWjD,EAAIoG,EAAQnD,CAAS,CAAC,MAGnD,CACD,GAAIiG,IAASpJ,EAAYgD,CAAU,EAC/B,UAAWpD,KAAQmD,EAAO,MAAO,CAC7B,MAAMe,EAAQ5D,EAAI8L,EAASpM,CAAI,EAC/B,GAAIkE,GAASA,EAAM,GAAI,CACnB,MAAMuM,EAAiB,MAAM,QAAQvM,EAAM,GAAG,IAAI,EAC5CA,EAAM,GAAG,KAAK,CAAC,EACfA,EAAM,GAAG,IACf,GAAI,CACA,GAAIkH,GAAcqF,CAAc,EAAG,CAC/BA,EAAe,QAAQ,MAAM,EAAE,MAAK,EACpC,KACH,CACJ,MACU,CAAG,CACjB,CACJ,CAELrE,EAAU,CAAA,CACb,CACDiB,EAAclM,EAAM,iBACdqR,EAAiB,kBACb/I,EAAY2D,CAAc,EAC1B,CAAE,EACNsF,EACNhF,EAAU,MAAM,KAAK,CACjB,OAAAhH,CAChB,CAAa,EACDgH,EAAU,MAAM,KAAK,CACjB,OAAAhH,CAChB,CAAa,CACJ,CACDvD,EAAS,CACL,MAAO,IAAI,IACX,QAAS,IAAI,IACb,MAAO,IAAI,IACX,MAAO,IAAI,IACX,SAAU,GACV,MAAO,EACnB,EACQmK,EAAY,MACR,CAAC9L,EAAgB,SAAW,CAAC,CAACgR,EAAiB,YACnDlF,EAAY,MAAQ,CAAC,CAACnM,EAAM,iBAC5BuM,EAAU,MAAM,KAAK,CACjB,YAAa8E,EAAiB,gBACxBrF,EAAW,YACX,EACN,QAASqF,EAAiB,WAAaA,EAAiB,gBAClDrF,EAAW,QACX,CAAC,EAAEqF,EAAiB,mBAClB,CAAC3H,EAAUzH,EAAYgK,CAAc,GAC7C,YAAaoF,EAAiB,gBACxBrF,EAAW,YACX,GACN,YAAaqF,EAAiB,WAAaA,EAAiB,gBACtDrF,EAAW,YACXqF,EAAiB,mBAAqBpP,EAClCyI,GAAeuB,EAAgBhK,CAAU,EACzC,CAAE,EACZ,cAAeoP,EAAiB,YAC1BrF,EAAW,cACX,CAAE,EACR,OAAQqF,EAAiB,WACnBrF,EAAW,OACX,CAAE,EACR,aAAc,GACd,mBAAoB,EAChC,CAAS,CACT,EAiEQ,WA/Ke,CAACnN,EAAMyG,EAAU,CAAA,IAAO,CACnCnG,EAAI8L,EAASpM,CAAI,IACbI,EAAYqG,EAAQ,YAAY,EAChCuK,EAAShR,EAAMM,EAAI8M,EAAgBpN,CAAI,CAAC,GAGxCgR,EAAShR,EAAMyG,EAAQ,YAAY,EACnC3B,EAAIsI,EAAgBpN,EAAMyG,EAAQ,YAAY,GAE7CA,EAAQ,aACTuD,EAAMmD,EAAW,cAAenN,CAAI,EAEnCyG,EAAQ,YACTuD,EAAMmD,EAAW,YAAanN,CAAI,EAClCmN,EAAW,QAAU1G,EAAQ,aACvBkI,EAAU3O,EAAMM,EAAI8M,EAAgBpN,CAAI,CAAC,EACzC2O,KAELlI,EAAQ,YACTuD,EAAMmD,EAAW,OAAQnN,CAAI,EAC7BwB,EAAgB,SAAWwM,KAE/BN,EAAU,MAAM,KAAK,CAAE,GAAGP,CAAY,CAAA,EAElD,EAwJQ,YAAAuE,GACA,WAAArB,GACA,SAAAuB,GACA,SApEa,CAAC5R,EAAMyG,EAAU,CAAA,IAAO,CACrC,MAAMvC,EAAQ5D,EAAI8L,EAASpM,CAAI,EAAE,GAC3BiS,EAAW/N,EAAM,KAAOA,EAAM,KAAK,CAAC,EAAIA,EAAM,IACpD+N,EAAS,MAAK,EACdxL,EAAQ,cAAgBwL,EAAS,QACzC,EAgEQ,cAAAR,EACR,CACA,CA+BA,SAASkB,GAAQxR,EAAQ,GAAI,CACzB,MAAMyR,EAAe5R,EAAM,SACrB,CAACO,EAAWqB,CAAe,EAAI5B,EAAM,SAAS,CAChD,QAAS,GACT,aAAc,GACd,YAAa,CAAE,EACf,YAAa,GACb,YAAa,EACb,cAAe,CAAE,EACjB,aAAc,GACd,mBAAoB,GACpB,QAAS,GACT,OAAQ,CAAE,CAClB,CAAK,EACG4R,EAAa,QACbA,EAAa,QAAQ,QAAQ,SAAWzR,EAGxCyR,EAAa,QAAU,CACnB,GAAG3F,GAAkB9L,CAAK,EAC1B,UAAAI,CACZ,EAEI,MAAMmB,EAAUkQ,EAAa,QAAQ,QAC/B5P,EAAWhC,EAAM,YAAavB,GAAU,CACtCoC,GAAsBpC,EAAOiD,EAAQ,gBAAiB,EAAI,IAC1DA,EAAQ,WAAa,CACjB,GAAGA,EAAQ,WACX,GAAGjD,CACnB,EACYmD,EAAgB,CAAE,GAAGF,EAAQ,UAAY,CAAA,EAErD,EAAO,CAACA,CAAO,CAAC,EACZ,OAAAN,GAAa,CACT,QAASM,EAAQ,UAAU,MAC3B,SAAAM,CACR,CAAK,EACDhC,EAAM,UAAU,IAAM,CACb0B,EAAQ,YAAY,QACrBA,EAAQ,gBAAgB,SAAWA,EAAQ,aAAY,EACvDA,EAAQ,YAAY,MAAQ,IAE5BA,EAAQ,YAAY,QACpBA,EAAQ,YAAY,MAAQ,GAC5BA,EAAQ,UAAU,MAAM,KAAK,CAAE,CAAA,GAEnCA,EAAQ,iBAAgB,CAChC,CAAK,EACDkQ,EAAa,QAAQ,UAAYtR,GAAkBC,EAAWmB,EAAQ,eAAe,EAC9EkQ,EAAa,OACxB","x_google_ignoreList":[0]}