reactjs-tiptap-editor 0.0.27 → 0.0.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.cts +42 -42
- package/lib/index.d.ts +42 -42
- package/lib/locales-BW5KWG4_.cjs +2 -0
- package/lib/locales-BW5KWG4_.cjs.map +1 -0
- package/lib/{utils-Wb2bM69j.js → locales-CReRRAlY.js} +210 -533
- package/lib/locales-CReRRAlY.js.map +1 -0
- package/lib/radix-BnsE5jjU.cjs +1 -0
- package/lib/radix-BnsE5jjU.cjs.map +1 -0
- package/lib/{radix-gnVzeGS4.js → radix-DynsTgIE.js} +2 -1
- package/lib/radix-DynsTgIE.js.map +1 -0
- package/lib/reactjs-tiptap-editor.cjs +2 -1
- package/lib/reactjs-tiptap-editor.cjs.map +1 -0
- package/lib/reactjs-tiptap-editor.js +145 -145
- package/lib/reactjs-tiptap-editor.js.map +1 -0
- package/lib/style.css +1 -1
- package/lib/tiptap-CMeHtctt.cjs +1 -0
- package/lib/tiptap-CMeHtctt.cjs.map +1 -0
- package/lib/{tiptap-BEIRLff8.js → tiptap-oijPpdck.js} +38 -37
- package/lib/tiptap-oijPpdck.js.map +1 -0
- package/lib/{extensions-BUtdRI-5.js → utils-B4dNn5Nv.js} +3965 -1186
- package/lib/utils-B4dNn5Nv.js.map +1 -0
- package/lib/utils-Bvt21Jwu.cjs +136 -0
- package/lib/utils-Bvt21Jwu.cjs.map +1 -0
- package/lib/vendor-Btqs8WA3.cjs +1 -0
- package/lib/vendor-Btqs8WA3.cjs.map +1 -0
- package/lib/{vendor-uVk9OL1t.js → vendor-CCqRdwcC.js} +173 -172
- package/lib/vendor-CCqRdwcC.js.map +1 -0
- package/package.json +1 -1
- package/lib/components-DqT7-cFp.js +0 -2496
- package/lib/components-xS2gsLRE.cjs +0 -135
- package/lib/extensions-BlyolCeu.cjs +0 -1
- package/lib/utils-DqGt9oOA.cjs +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiptap-CMeHtctt.cjs","sources":["../node_modules/.pnpm/@tiptap+core@2.6.6_@tiptap+pm@2.6.6/node_modules/@tiptap/core/dist/index.js","../node_modules/.pnpm/@tiptap+extension-bold@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-bold/dist/index.js","../node_modules/.pnpm/@tiptap+extension-bubble-menu@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+pm@2.6.6/node_modules/@tiptap/extension-bubble-menu/dist/index.js","../node_modules/.pnpm/@tiptap+react@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+pm@2.6.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@tiptap/react/dist/index.js","../node_modules/.pnpm/echo-drag-handle-plugin@0.0.2_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+pm@2.6.6_y-prosemi_dfmr2uvknsxggwwibbsknfny5i/node_modules/echo-drag-handle-plugin/dist/index.esm.js","../node_modules/.pnpm/@tiptap+extension-italic@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-italic/dist/index.js","../node_modules/.pnpm/@tiptap+extension-underline@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-underline/dist/index.js","../node_modules/.pnpm/@tiptap+extension-strike@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-strike/dist/index.js","../node_modules/.pnpm/@tiptap+extension-code@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-code/dist/index.js","../node_modules/.pnpm/@tiptap+extension-code-block@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+pm@2.6.6/node_modules/@tiptap/extension-code-block/dist/index.js","../node_modules/.pnpm/@tiptap+extension-text-style@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-text-style/dist/index.js","../node_modules/.pnpm/@tiptap+extension-font-family@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+extension-te_q34zfvs6bknamszgitwnwtkoom/node_modules/@tiptap/extension-font-family/dist/index.js","../node_modules/.pnpm/@tiptap+extension-heading@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-heading/dist/index.js","../node_modules/.pnpm/@tiptap+extension-text-align@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-text-align/dist/index.js","../node_modules/.pnpm/@tiptap+extension-color@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+extension-text-sty_oh33mijoflni7djerei7v6kynq/node_modules/@tiptap/extension-color/dist/index.js","../node_modules/.pnpm/@tiptap+extension-highlight@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-highlight/dist/index.js","../node_modules/.pnpm/@tiptap+extension-bullet-list@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-bullet-list/dist/index.js","../node_modules/.pnpm/@tiptap+extension-ordered-list@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-ordered-list/dist/index.js","../node_modules/.pnpm/@tiptap+extension-task-item@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+pm@2.6.6/node_modules/@tiptap/extension-task-item/dist/index.js","../node_modules/.pnpm/@tiptap+extension-task-list@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-task-list/dist/index.js","../node_modules/.pnpm/@tiptap+extension-blockquote@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-blockquote/dist/index.js","../node_modules/.pnpm/@tiptap+extension-link@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+pm@2.6.6/node_modules/@tiptap/extension-link/dist/index.js","../node_modules/.pnpm/@tiptap+extension-horizontal-rule@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+pm@2.6.6/node_modules/@tiptap/extension-horizontal-rule/dist/index.js","../node_modules/.pnpm/@tiptap+extension-history@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+pm@2.6.6/node_modules/@tiptap/extension-history/dist/index.js","../node_modules/.pnpm/@tiptap+extension-character-count@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+pm@2.6.6/node_modules/@tiptap/extension-character-count/dist/index.js","../node_modules/.pnpm/@tiptap+extension-dropcursor@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+pm@2.6.6/node_modules/@tiptap/extension-dropcursor/dist/index.js","../node_modules/.pnpm/@tiptap+extension-focus@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+pm@2.6.6/node_modules/@tiptap/extension-focus/dist/index.js","../node_modules/.pnpm/@tiptap+extension-gapcursor@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+pm@2.6.6/node_modules/@tiptap/extension-gapcursor/dist/index.js","../node_modules/.pnpm/@tiptap+extension-hard-break@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-hard-break/dist/index.js","../node_modules/.pnpm/@tiptap+extension-list-item@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-list-item/dist/index.js","../node_modules/.pnpm/@tiptap+extension-paragraph@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-paragraph/dist/index.js","../node_modules/.pnpm/@tiptap+extension-placeholder@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+pm@2.6.6/node_modules/@tiptap/extension-placeholder/dist/index.js","../node_modules/.pnpm/@tiptap+extension-text@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-text/dist/index.js","../node_modules/.pnpm/@tiptap+extension-document@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-document/dist/index.js","../node_modules/.pnpm/@tiptap+extension-subscript@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-subscript/dist/index.js","../node_modules/.pnpm/@tiptap+extension-superscript@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-superscript/dist/index.js","../node_modules/.pnpm/@tiptap+suggestion@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+pm@2.6.6/node_modules/@tiptap/suggestion/dist/index.js","../node_modules/.pnpm/@tiptap+extension-image@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-image/dist/index.js","../node_modules/.pnpm/@tiptap+extension-table-row@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-table-row/dist/index.js","../node_modules/.pnpm/@tiptap+extension-table@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6__@tiptap+pm@2.6.6/node_modules/@tiptap/extension-table/dist/index.js","../node_modules/.pnpm/@tiptap+extension-table-cell@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-table-cell/dist/index.js","../node_modules/.pnpm/@tiptap+extension-table-header@2.6.6_@tiptap+core@2.6.6_@tiptap+pm@2.6.6_/node_modules/@tiptap/extension-table-header/dist/index.js"],"sourcesContent":["import { Plugin, PluginKey, TextSelection, Selection, NodeSelection, EditorState } from '@tiptap/pm/state';\nimport { EditorView } from '@tiptap/pm/view';\nimport { keymap } from '@tiptap/pm/keymap';\nimport { Schema, Fragment, DOMParser, DOMSerializer, Node as Node$1, Slice } from '@tiptap/pm/model';\nimport { liftTarget, ReplaceStep, ReplaceAroundStep, joinPoint, Transform, canSplit, canJoin, findWrapping } from '@tiptap/pm/transform';\nimport { createParagraphNear as createParagraphNear$1, deleteSelection as deleteSelection$1, exitCode as exitCode$1, joinUp as joinUp$1, joinDown as joinDown$1, joinBackward as joinBackward$1, joinForward as joinForward$1, joinTextblockBackward as joinTextblockBackward$1, joinTextblockForward as joinTextblockForward$1, lift as lift$1, liftEmptyBlock as liftEmptyBlock$1, newlineInCode as newlineInCode$1, selectNodeBackward as selectNodeBackward$1, selectNodeForward as selectNodeForward$1, selectParentNode as selectParentNode$1, selectTextblockEnd as selectTextblockEnd$1, selectTextblockStart as selectTextblockStart$1, setBlockType, wrapIn as wrapIn$1 } from '@tiptap/pm/commands';\nimport { liftListItem as liftListItem$1, sinkListItem as sinkListItem$1, wrapInList as wrapInList$1 } from '@tiptap/pm/schema-list';\n\n/**\n * Takes a Transaction & Editor State and turns it into a chainable state object\n * @param config The transaction and state to create the chainable state from\n * @returns A chainable Editor state object\n */\nfunction createChainableState(config) {\n const { state, transaction } = config;\n let { selection } = transaction;\n let { doc } = transaction;\n let { storedMarks } = transaction;\n return {\n ...state,\n apply: state.apply.bind(state),\n applyTransaction: state.applyTransaction.bind(state),\n plugins: state.plugins,\n schema: state.schema,\n reconfigure: state.reconfigure.bind(state),\n toJSON: state.toJSON.bind(state),\n get storedMarks() {\n return storedMarks;\n },\n get selection() {\n return selection;\n },\n get doc() {\n return doc;\n },\n get tr() {\n selection = transaction.selection;\n doc = transaction.doc;\n storedMarks = transaction.storedMarks;\n return transaction;\n },\n };\n}\n\nclass CommandManager {\n constructor(props) {\n this.editor = props.editor;\n this.rawCommands = this.editor.extensionManager.commands;\n this.customState = props.state;\n }\n get hasCustomState() {\n return !!this.customState;\n }\n get state() {\n return this.customState || this.editor.state;\n }\n get commands() {\n const { rawCommands, editor, state } = this;\n const { view } = editor;\n const { tr } = state;\n const props = this.buildProps(tr);\n return Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => {\n const method = (...args) => {\n const callback = command(...args)(props);\n if (!tr.getMeta('preventDispatch') && !this.hasCustomState) {\n view.dispatch(tr);\n }\n return callback;\n };\n return [name, method];\n }));\n }\n get chain() {\n return () => this.createChain();\n }\n get can() {\n return () => this.createCan();\n }\n createChain(startTr, shouldDispatch = true) {\n const { rawCommands, editor, state } = this;\n const { view } = editor;\n const callbacks = [];\n const hasStartTransaction = !!startTr;\n const tr = startTr || state.tr;\n const run = () => {\n if (!hasStartTransaction\n && shouldDispatch\n && !tr.getMeta('preventDispatch')\n && !this.hasCustomState) {\n view.dispatch(tr);\n }\n return callbacks.every(callback => callback === true);\n };\n const chain = {\n ...Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => {\n const chainedCommand = (...args) => {\n const props = this.buildProps(tr, shouldDispatch);\n const callback = command(...args)(props);\n callbacks.push(callback);\n return chain;\n };\n return [name, chainedCommand];\n })),\n run,\n };\n return chain;\n }\n createCan(startTr) {\n const { rawCommands, state } = this;\n const dispatch = false;\n const tr = startTr || state.tr;\n const props = this.buildProps(tr, dispatch);\n const formattedCommands = Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => {\n return [name, (...args) => command(...args)({ ...props, dispatch: undefined })];\n }));\n return {\n ...formattedCommands,\n chain: () => this.createChain(tr, dispatch),\n };\n }\n buildProps(tr, shouldDispatch = true) {\n const { rawCommands, editor, state } = this;\n const { view } = editor;\n const props = {\n tr,\n editor,\n view,\n state: createChainableState({\n state,\n transaction: tr,\n }),\n dispatch: shouldDispatch ? () => undefined : undefined,\n chain: () => this.createChain(tr, shouldDispatch),\n can: () => this.createCan(tr),\n get commands() {\n return Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => {\n return [name, (...args) => command(...args)(props)];\n }));\n },\n };\n return props;\n }\n}\n\nclass EventEmitter {\n constructor() {\n this.callbacks = {};\n }\n on(event, fn) {\n if (!this.callbacks[event]) {\n this.callbacks[event] = [];\n }\n this.callbacks[event].push(fn);\n return this;\n }\n emit(event, ...args) {\n const callbacks = this.callbacks[event];\n if (callbacks) {\n callbacks.forEach(callback => callback.apply(this, args));\n }\n return this;\n }\n off(event, fn) {\n const callbacks = this.callbacks[event];\n if (callbacks) {\n if (fn) {\n this.callbacks[event] = callbacks.filter(callback => callback !== fn);\n }\n else {\n delete this.callbacks[event];\n }\n }\n return this;\n }\n removeAllListeners() {\n this.callbacks = {};\n }\n}\n\n/**\n * Returns a field from an extension\n * @param extension The Tiptap extension\n * @param field The field, for example `renderHTML` or `priority`\n * @param context The context object that should be passed as `this` into the function\n * @returns The field value\n */\nfunction getExtensionField(extension, field, context) {\n if (extension.config[field] === undefined && extension.parent) {\n return getExtensionField(extension.parent, field, context);\n }\n if (typeof extension.config[field] === 'function') {\n const value = extension.config[field].bind({\n ...context,\n parent: extension.parent\n ? getExtensionField(extension.parent, field, context)\n : null,\n });\n return value;\n }\n return extension.config[field];\n}\n\nfunction splitExtensions(extensions) {\n const baseExtensions = extensions.filter(extension => extension.type === 'extension');\n const nodeExtensions = extensions.filter(extension => extension.type === 'node');\n const markExtensions = extensions.filter(extension => extension.type === 'mark');\n return {\n baseExtensions,\n nodeExtensions,\n markExtensions,\n };\n}\n\n/**\n * Get a list of all extension attributes defined in `addAttribute` and `addGlobalAttribute`.\n * @param extensions List of extensions\n */\nfunction getAttributesFromExtensions(extensions) {\n const extensionAttributes = [];\n const { nodeExtensions, markExtensions } = splitExtensions(extensions);\n const nodeAndMarkExtensions = [...nodeExtensions, ...markExtensions];\n const defaultAttribute = {\n default: null,\n rendered: true,\n renderHTML: null,\n parseHTML: null,\n keepOnSplit: true,\n isRequired: false,\n };\n extensions.forEach(extension => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n extensions: nodeAndMarkExtensions,\n };\n const addGlobalAttributes = getExtensionField(extension, 'addGlobalAttributes', context);\n if (!addGlobalAttributes) {\n return;\n }\n const globalAttributes = addGlobalAttributes();\n globalAttributes.forEach(globalAttribute => {\n globalAttribute.types.forEach(type => {\n Object\n .entries(globalAttribute.attributes)\n .forEach(([name, attribute]) => {\n extensionAttributes.push({\n type,\n name,\n attribute: {\n ...defaultAttribute,\n ...attribute,\n },\n });\n });\n });\n });\n });\n nodeAndMarkExtensions.forEach(extension => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n };\n const addAttributes = getExtensionField(extension, 'addAttributes', context);\n if (!addAttributes) {\n return;\n }\n // TODO: remove `as Attributes`\n const attributes = addAttributes();\n Object\n .entries(attributes)\n .forEach(([name, attribute]) => {\n const mergedAttr = {\n ...defaultAttribute,\n ...attribute,\n };\n if (typeof (mergedAttr === null || mergedAttr === void 0 ? void 0 : mergedAttr.default) === 'function') {\n mergedAttr.default = mergedAttr.default();\n }\n if ((mergedAttr === null || mergedAttr === void 0 ? void 0 : mergedAttr.isRequired) && (mergedAttr === null || mergedAttr === void 0 ? void 0 : mergedAttr.default) === undefined) {\n delete mergedAttr.default;\n }\n extensionAttributes.push({\n type: extension.name,\n name,\n attribute: mergedAttr,\n });\n });\n });\n return extensionAttributes;\n}\n\nfunction getNodeType(nameOrType, schema) {\n if (typeof nameOrType === 'string') {\n if (!schema.nodes[nameOrType]) {\n throw Error(`There is no node type named '${nameOrType}'. Maybe you forgot to add the extension?`);\n }\n return schema.nodes[nameOrType];\n }\n return nameOrType;\n}\n\nfunction mergeAttributes(...objects) {\n return objects\n .filter(item => !!item)\n .reduce((items, item) => {\n const mergedAttributes = { ...items };\n Object.entries(item).forEach(([key, value]) => {\n const exists = mergedAttributes[key];\n if (!exists) {\n mergedAttributes[key] = value;\n return;\n }\n if (key === 'class') {\n const valueClasses = value ? value.split(' ') : [];\n const existingClasses = mergedAttributes[key] ? mergedAttributes[key].split(' ') : [];\n const insertClasses = valueClasses.filter(valueClass => !existingClasses.includes(valueClass));\n mergedAttributes[key] = [...existingClasses, ...insertClasses].join(' ');\n }\n else if (key === 'style') {\n mergedAttributes[key] = [mergedAttributes[key], value].join('; ');\n }\n else {\n mergedAttributes[key] = value;\n }\n });\n return mergedAttributes;\n }, {});\n}\n\nfunction getRenderedAttributes(nodeOrMark, extensionAttributes) {\n return extensionAttributes\n .filter(item => item.attribute.rendered)\n .map(item => {\n if (!item.attribute.renderHTML) {\n return {\n [item.name]: nodeOrMark.attrs[item.name],\n };\n }\n return item.attribute.renderHTML(nodeOrMark.attrs) || {};\n })\n .reduce((attributes, attribute) => mergeAttributes(attributes, attribute), {});\n}\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n\n/**\n * Optionally calls `value` as a function.\n * Otherwise it is returned directly.\n * @param value Function or any value.\n * @param context Optional context to bind to function.\n * @param props Optional props to pass to function.\n */\nfunction callOrReturn(value, context = undefined, ...props) {\n if (isFunction(value)) {\n if (context) {\n return value.bind(context)(...props);\n }\n return value(...props);\n }\n return value;\n}\n\nfunction isEmptyObject(value = {}) {\n return Object.keys(value).length === 0 && value.constructor === Object;\n}\n\nfunction fromString(value) {\n if (typeof value !== 'string') {\n return value;\n }\n if (value.match(/^[+-]?(?:\\d*\\.)?\\d+$/)) {\n return Number(value);\n }\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n return value;\n}\n\n/**\n * This function merges extension attributes into parserule attributes (`attrs` or `getAttrs`).\n * Cancels when `getAttrs` returned `false`.\n * @param parseRule ProseMirror ParseRule\n * @param extensionAttributes List of attributes to inject\n */\nfunction injectExtensionAttributesToParseRule(parseRule, extensionAttributes) {\n if ('style' in parseRule) {\n return parseRule;\n }\n return {\n ...parseRule,\n getAttrs: (node) => {\n const oldAttributes = parseRule.getAttrs ? parseRule.getAttrs(node) : parseRule.attrs;\n if (oldAttributes === false) {\n return false;\n }\n const newAttributes = extensionAttributes.reduce((items, item) => {\n const value = item.attribute.parseHTML\n ? item.attribute.parseHTML(node)\n : fromString((node).getAttribute(item.name));\n if (value === null || value === undefined) {\n return items;\n }\n return {\n ...items,\n [item.name]: value,\n };\n }, {});\n return { ...oldAttributes, ...newAttributes };\n },\n };\n}\n\nfunction cleanUpSchemaItem(data) {\n return Object.fromEntries(\n // @ts-ignore\n Object.entries(data).filter(([key, value]) => {\n if (key === 'attrs' && isEmptyObject(value)) {\n return false;\n }\n return value !== null && value !== undefined;\n }));\n}\n/**\n * Creates a new Prosemirror schema based on the given extensions.\n * @param extensions An array of Tiptap extensions\n * @param editor The editor instance\n * @returns A Prosemirror schema\n */\nfunction getSchemaByResolvedExtensions(extensions, editor) {\n var _a;\n const allAttributes = getAttributesFromExtensions(extensions);\n const { nodeExtensions, markExtensions } = splitExtensions(extensions);\n const topNode = (_a = nodeExtensions.find(extension => getExtensionField(extension, 'topNode'))) === null || _a === void 0 ? void 0 : _a.name;\n const nodes = Object.fromEntries(nodeExtensions.map(extension => {\n const extensionAttributes = allAttributes.filter(attribute => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n editor,\n };\n const extraNodeFields = extensions.reduce((fields, e) => {\n const extendNodeSchema = getExtensionField(e, 'extendNodeSchema', context);\n return {\n ...fields,\n ...(extendNodeSchema ? extendNodeSchema(extension) : {}),\n };\n }, {});\n const schema = cleanUpSchemaItem({\n ...extraNodeFields,\n content: callOrReturn(getExtensionField(extension, 'content', context)),\n marks: callOrReturn(getExtensionField(extension, 'marks', context)),\n group: callOrReturn(getExtensionField(extension, 'group', context)),\n inline: callOrReturn(getExtensionField(extension, 'inline', context)),\n atom: callOrReturn(getExtensionField(extension, 'atom', context)),\n selectable: callOrReturn(getExtensionField(extension, 'selectable', context)),\n draggable: callOrReturn(getExtensionField(extension, 'draggable', context)),\n code: callOrReturn(getExtensionField(extension, 'code', context)),\n whitespace: callOrReturn(getExtensionField(extension, 'whitespace', context)),\n defining: callOrReturn(getExtensionField(extension, 'defining', context)),\n isolating: callOrReturn(getExtensionField(extension, 'isolating', context)),\n attrs: Object.fromEntries(extensionAttributes.map(extensionAttribute => {\n var _a;\n return [extensionAttribute.name, { default: (_a = extensionAttribute === null || extensionAttribute === void 0 ? void 0 : extensionAttribute.attribute) === null || _a === void 0 ? void 0 : _a.default }];\n })),\n });\n const parseHTML = callOrReturn(getExtensionField(extension, 'parseHTML', context));\n if (parseHTML) {\n schema.parseDOM = parseHTML.map(parseRule => injectExtensionAttributesToParseRule(parseRule, extensionAttributes));\n }\n const renderHTML = getExtensionField(extension, 'renderHTML', context);\n if (renderHTML) {\n schema.toDOM = node => renderHTML({\n node,\n HTMLAttributes: getRenderedAttributes(node, extensionAttributes),\n });\n }\n const renderText = getExtensionField(extension, 'renderText', context);\n if (renderText) {\n schema.toText = renderText;\n }\n return [extension.name, schema];\n }));\n const marks = Object.fromEntries(markExtensions.map(extension => {\n const extensionAttributes = allAttributes.filter(attribute => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n editor,\n };\n const extraMarkFields = extensions.reduce((fields, e) => {\n const extendMarkSchema = getExtensionField(e, 'extendMarkSchema', context);\n return {\n ...fields,\n ...(extendMarkSchema ? extendMarkSchema(extension) : {}),\n };\n }, {});\n const schema = cleanUpSchemaItem({\n ...extraMarkFields,\n inclusive: callOrReturn(getExtensionField(extension, 'inclusive', context)),\n excludes: callOrReturn(getExtensionField(extension, 'excludes', context)),\n group: callOrReturn(getExtensionField(extension, 'group', context)),\n spanning: callOrReturn(getExtensionField(extension, 'spanning', context)),\n code: callOrReturn(getExtensionField(extension, 'code', context)),\n attrs: Object.fromEntries(extensionAttributes.map(extensionAttribute => {\n var _a;\n return [extensionAttribute.name, { default: (_a = extensionAttribute === null || extensionAttribute === void 0 ? void 0 : extensionAttribute.attribute) === null || _a === void 0 ? void 0 : _a.default }];\n })),\n });\n const parseHTML = callOrReturn(getExtensionField(extension, 'parseHTML', context));\n if (parseHTML) {\n schema.parseDOM = parseHTML.map(parseRule => injectExtensionAttributesToParseRule(parseRule, extensionAttributes));\n }\n const renderHTML = getExtensionField(extension, 'renderHTML', context);\n if (renderHTML) {\n schema.toDOM = mark => renderHTML({\n mark,\n HTMLAttributes: getRenderedAttributes(mark, extensionAttributes),\n });\n }\n return [extension.name, schema];\n }));\n return new Schema({\n topNode,\n nodes,\n marks,\n });\n}\n\n/**\n * Tries to get a node or mark type by its name.\n * @param name The name of the node or mark type\n * @param schema The Prosemiror schema to search in\n * @returns The node or mark type, or null if it doesn't exist\n */\nfunction getSchemaTypeByName(name, schema) {\n return schema.nodes[name] || schema.marks[name] || null;\n}\n\nfunction isExtensionRulesEnabled(extension, enabled) {\n if (Array.isArray(enabled)) {\n return enabled.some(enabledExtension => {\n const name = typeof enabledExtension === 'string'\n ? enabledExtension\n : enabledExtension.name;\n return name === extension.name;\n });\n }\n return enabled;\n}\n\n/**\n * Returns the text content of a resolved prosemirror position\n * @param $from The resolved position to get the text content from\n * @param maxMatch The maximum number of characters to match\n * @returns The text content\n */\nconst getTextContentFromNodes = ($from, maxMatch = 500) => {\n let textBefore = '';\n const sliceEndPos = $from.parentOffset;\n $from.parent.nodesBetween(Math.max(0, sliceEndPos - maxMatch), sliceEndPos, (node, pos, parent, index) => {\n var _a, _b;\n const chunk = ((_b = (_a = node.type.spec).toText) === null || _b === void 0 ? void 0 : _b.call(_a, {\n node,\n pos,\n parent,\n index,\n }))\n || node.textContent\n || '%leaf%';\n textBefore += node.isAtom && !node.isText ? chunk : chunk.slice(0, Math.max(0, sliceEndPos - pos));\n });\n return textBefore;\n};\n\nfunction isRegExp(value) {\n return Object.prototype.toString.call(value) === '[object RegExp]';\n}\n\nclass InputRule {\n constructor(config) {\n this.find = config.find;\n this.handler = config.handler;\n }\n}\nconst inputRuleMatcherHandler = (text, find) => {\n if (isRegExp(find)) {\n return find.exec(text);\n }\n const inputRuleMatch = find(text);\n if (!inputRuleMatch) {\n return null;\n }\n const result = [inputRuleMatch.text];\n result.index = inputRuleMatch.index;\n result.input = text;\n result.data = inputRuleMatch.data;\n if (inputRuleMatch.replaceWith) {\n if (!inputRuleMatch.text.includes(inputRuleMatch.replaceWith)) {\n console.warn('[tiptap warn]: \"inputRuleMatch.replaceWith\" must be part of \"inputRuleMatch.text\".');\n }\n result.push(inputRuleMatch.replaceWith);\n }\n return result;\n};\nfunction run$1(config) {\n var _a;\n const { editor, from, to, text, rules, plugin, } = config;\n const { view } = editor;\n if (view.composing) {\n return false;\n }\n const $from = view.state.doc.resolve(from);\n if (\n // check for code node\n $from.parent.type.spec.code\n // check for code mark\n || !!((_a = ($from.nodeBefore || $from.nodeAfter)) === null || _a === void 0 ? void 0 : _a.marks.find(mark => mark.type.spec.code))) {\n return false;\n }\n let matched = false;\n const textBefore = getTextContentFromNodes($from) + text;\n rules.forEach(rule => {\n if (matched) {\n return;\n }\n const match = inputRuleMatcherHandler(textBefore, rule.find);\n if (!match) {\n return;\n }\n const tr = view.state.tr;\n const state = createChainableState({\n state: view.state,\n transaction: tr,\n });\n const range = {\n from: from - (match[0].length - text.length),\n to,\n };\n const { commands, chain, can } = new CommandManager({\n editor,\n state,\n });\n const handler = rule.handler({\n state,\n range,\n match,\n commands,\n chain,\n can,\n });\n // stop if there are no changes\n if (handler === null || !tr.steps.length) {\n return;\n }\n // store transform as meta data\n // so we can undo input rules within the `undoInputRules` command\n tr.setMeta(plugin, {\n transform: tr,\n from,\n to,\n text,\n });\n view.dispatch(tr);\n matched = true;\n });\n return matched;\n}\n/**\n * Create an input rules plugin. When enabled, it will cause text\n * input that matches any of the given rules to trigger the rule’s\n * action.\n */\nfunction inputRulesPlugin(props) {\n const { editor, rules } = props;\n const plugin = new Plugin({\n state: {\n init() {\n return null;\n },\n apply(tr, prev) {\n const stored = tr.getMeta(plugin);\n if (stored) {\n return stored;\n }\n // if InputRule is triggered by insertContent()\n const simulatedInputMeta = tr.getMeta('applyInputRules');\n const isSimulatedInput = !!simulatedInputMeta;\n if (isSimulatedInput) {\n setTimeout(() => {\n const { from, text } = simulatedInputMeta;\n const to = from + text.length;\n run$1({\n editor,\n from,\n to,\n text,\n rules,\n plugin,\n });\n });\n }\n return tr.selectionSet || tr.docChanged ? null : prev;\n },\n },\n props: {\n handleTextInput(view, from, to, text) {\n return run$1({\n editor,\n from,\n to,\n text,\n rules,\n plugin,\n });\n },\n handleDOMEvents: {\n compositionend: view => {\n setTimeout(() => {\n const { $cursor } = view.state.selection;\n if ($cursor) {\n run$1({\n editor,\n from: $cursor.pos,\n to: $cursor.pos,\n text: '',\n rules,\n plugin,\n });\n }\n });\n return false;\n },\n },\n // add support for input rules to trigger on enter\n // this is useful for example for code blocks\n handleKeyDown(view, event) {\n if (event.key !== 'Enter') {\n return false;\n }\n const { $cursor } = view.state.selection;\n if ($cursor) {\n return run$1({\n editor,\n from: $cursor.pos,\n to: $cursor.pos,\n text: '\\n',\n rules,\n plugin,\n });\n }\n return false;\n },\n },\n // @ts-ignore\n isInputRules: true,\n });\n return plugin;\n}\n\nfunction isNumber(value) {\n return typeof value === 'number';\n}\n\n/**\n * Paste rules are used to react to pasted content.\n * @see https://tiptap.dev/guide/custom-extensions/#paste-rules\n */\nclass PasteRule {\n constructor(config) {\n this.find = config.find;\n this.handler = config.handler;\n }\n}\nconst pasteRuleMatcherHandler = (text, find, event) => {\n if (isRegExp(find)) {\n return [...text.matchAll(find)];\n }\n const matches = find(text, event);\n if (!matches) {\n return [];\n }\n return matches.map(pasteRuleMatch => {\n const result = [pasteRuleMatch.text];\n result.index = pasteRuleMatch.index;\n result.input = text;\n result.data = pasteRuleMatch.data;\n if (pasteRuleMatch.replaceWith) {\n if (!pasteRuleMatch.text.includes(pasteRuleMatch.replaceWith)) {\n console.warn('[tiptap warn]: \"pasteRuleMatch.replaceWith\" must be part of \"pasteRuleMatch.text\".');\n }\n result.push(pasteRuleMatch.replaceWith);\n }\n return result;\n });\n};\nfunction run(config) {\n const { editor, state, from, to, rule, pasteEvent, dropEvent, } = config;\n const { commands, chain, can } = new CommandManager({\n editor,\n state,\n });\n const handlers = [];\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isTextblock || node.type.spec.code) {\n return;\n }\n const resolvedFrom = Math.max(from, pos);\n const resolvedTo = Math.min(to, pos + node.content.size);\n const textToMatch = node.textBetween(resolvedFrom - pos, resolvedTo - pos, undefined, '\\ufffc');\n const matches = pasteRuleMatcherHandler(textToMatch, rule.find, pasteEvent);\n matches.forEach(match => {\n if (match.index === undefined) {\n return;\n }\n const start = resolvedFrom + match.index + 1;\n const end = start + match[0].length;\n const range = {\n from: state.tr.mapping.map(start),\n to: state.tr.mapping.map(end),\n };\n const handler = rule.handler({\n state,\n range,\n match,\n commands,\n chain,\n can,\n pasteEvent,\n dropEvent,\n });\n handlers.push(handler);\n });\n });\n const success = handlers.every(handler => handler !== null);\n return success;\n}\nconst createClipboardPasteEvent = (text) => {\n var _a;\n const event = new ClipboardEvent('paste', {\n clipboardData: new DataTransfer(),\n });\n (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.setData('text/html', text);\n return event;\n};\n/**\n * Create an paste rules plugin. When enabled, it will cause pasted\n * text that matches any of the given rules to trigger the rule’s\n * action.\n */\nfunction pasteRulesPlugin(props) {\n const { editor, rules } = props;\n let dragSourceElement = null;\n let isPastedFromProseMirror = false;\n let isDroppedFromProseMirror = false;\n let pasteEvent = typeof ClipboardEvent !== 'undefined' ? new ClipboardEvent('paste') : null;\n let dropEvent = typeof DragEvent !== 'undefined' ? new DragEvent('drop') : null;\n const processEvent = ({ state, from, to, rule, pasteEvt, }) => {\n const tr = state.tr;\n const chainableState = createChainableState({\n state,\n transaction: tr,\n });\n const handler = run({\n editor,\n state: chainableState,\n from: Math.max(from - 1, 0),\n to: to.b - 1,\n rule,\n pasteEvent: pasteEvt,\n dropEvent,\n });\n if (!handler || !tr.steps.length) {\n return;\n }\n dropEvent = typeof DragEvent !== 'undefined' ? new DragEvent('drop') : null;\n pasteEvent = typeof ClipboardEvent !== 'undefined' ? new ClipboardEvent('paste') : null;\n return tr;\n };\n const plugins = rules.map(rule => {\n return new Plugin({\n // we register a global drag handler to track the current drag source element\n view(view) {\n const handleDragstart = (event) => {\n var _a;\n dragSourceElement = ((_a = view.dom.parentElement) === null || _a === void 0 ? void 0 : _a.contains(event.target))\n ? view.dom.parentElement\n : null;\n };\n window.addEventListener('dragstart', handleDragstart);\n return {\n destroy() {\n window.removeEventListener('dragstart', handleDragstart);\n },\n };\n },\n props: {\n handleDOMEvents: {\n drop: (view, event) => {\n isDroppedFromProseMirror = dragSourceElement === view.dom.parentElement;\n dropEvent = event;\n return false;\n },\n paste: (_view, event) => {\n var _a;\n const html = (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.getData('text/html');\n pasteEvent = event;\n isPastedFromProseMirror = !!(html === null || html === void 0 ? void 0 : html.includes('data-pm-slice'));\n return false;\n },\n },\n },\n appendTransaction: (transactions, oldState, state) => {\n const transaction = transactions[0];\n const isPaste = transaction.getMeta('uiEvent') === 'paste' && !isPastedFromProseMirror;\n const isDrop = transaction.getMeta('uiEvent') === 'drop' && !isDroppedFromProseMirror;\n // if PasteRule is triggered by insertContent()\n const simulatedPasteMeta = transaction.getMeta('applyPasteRules');\n const isSimulatedPaste = !!simulatedPasteMeta;\n if (!isPaste && !isDrop && !isSimulatedPaste) {\n return;\n }\n // Handle simulated paste\n if (isSimulatedPaste) {\n const { from, text } = simulatedPasteMeta;\n const to = from + text.length;\n const pasteEvt = createClipboardPasteEvent(text);\n return processEvent({\n rule,\n state,\n from,\n to: { b: to },\n pasteEvt,\n });\n }\n // handle actual paste/drop\n const from = oldState.doc.content.findDiffStart(state.doc.content);\n const to = oldState.doc.content.findDiffEnd(state.doc.content);\n // stop if there is no changed range\n if (!isNumber(from) || !to || from === to.b) {\n return;\n }\n return processEvent({\n rule,\n state,\n from,\n to,\n pasteEvt: pasteEvent,\n });\n },\n });\n });\n return plugins;\n}\n\nfunction findDuplicates(items) {\n const filtered = items.filter((el, index) => items.indexOf(el) !== index);\n return Array.from(new Set(filtered));\n}\n\nclass ExtensionManager {\n constructor(extensions, editor) {\n this.splittableMarks = [];\n this.editor = editor;\n this.extensions = ExtensionManager.resolve(extensions);\n this.schema = getSchemaByResolvedExtensions(this.extensions, editor);\n this.setupExtensions();\n }\n /**\n * Returns a flattened and sorted extension list while\n * also checking for duplicated extensions and warns the user.\n * @param extensions An array of Tiptap extensions\n * @returns An flattened and sorted array of Tiptap extensions\n */\n static resolve(extensions) {\n const resolvedExtensions = ExtensionManager.sort(ExtensionManager.flatten(extensions));\n const duplicatedNames = findDuplicates(resolvedExtensions.map(extension => extension.name));\n if (duplicatedNames.length) {\n console.warn(`[tiptap warn]: Duplicate extension names found: [${duplicatedNames\n .map(item => `'${item}'`)\n .join(', ')}]. This can lead to issues.`);\n }\n return resolvedExtensions;\n }\n /**\n * Create a flattened array of extensions by traversing the `addExtensions` field.\n * @param extensions An array of Tiptap extensions\n * @returns A flattened array of Tiptap extensions\n */\n static flatten(extensions) {\n return (extensions\n .map(extension => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n };\n const addExtensions = getExtensionField(extension, 'addExtensions', context);\n if (addExtensions) {\n return [extension, ...this.flatten(addExtensions())];\n }\n return extension;\n })\n // `Infinity` will break TypeScript so we set a number that is probably high enough\n .flat(10));\n }\n /**\n * Sort extensions by priority.\n * @param extensions An array of Tiptap extensions\n * @returns A sorted array of Tiptap extensions by priority\n */\n static sort(extensions) {\n const defaultPriority = 100;\n return extensions.sort((a, b) => {\n const priorityA = getExtensionField(a, 'priority') || defaultPriority;\n const priorityB = getExtensionField(b, 'priority') || defaultPriority;\n if (priorityA > priorityB) {\n return -1;\n }\n if (priorityA < priorityB) {\n return 1;\n }\n return 0;\n });\n }\n /**\n * Get all commands from the extensions.\n * @returns An object with all commands where the key is the command name and the value is the command function\n */\n get commands() {\n return this.extensions.reduce((commands, extension) => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n editor: this.editor,\n type: getSchemaTypeByName(extension.name, this.schema),\n };\n const addCommands = getExtensionField(extension, 'addCommands', context);\n if (!addCommands) {\n return commands;\n }\n return {\n ...commands,\n ...addCommands(),\n };\n }, {});\n }\n /**\n * Get all registered Prosemirror plugins from the extensions.\n * @returns An array of Prosemirror plugins\n */\n get plugins() {\n const { editor } = this;\n // With ProseMirror, first plugins within an array are executed first.\n // In Tiptap, we provide the ability to override plugins,\n // so it feels more natural to run plugins at the end of an array first.\n // That’s why we have to reverse the `extensions` array and sort again\n // based on the `priority` option.\n const extensions = ExtensionManager.sort([...this.extensions].reverse());\n const inputRules = [];\n const pasteRules = [];\n const allPlugins = extensions\n .map(extension => {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n editor,\n type: getSchemaTypeByName(extension.name, this.schema),\n };\n const plugins = [];\n const addKeyboardShortcuts = getExtensionField(extension, 'addKeyboardShortcuts', context);\n let defaultBindings = {};\n // bind exit handling\n if (extension.type === 'mark' && getExtensionField(extension, 'exitable', context)) {\n defaultBindings.ArrowRight = () => Mark.handleExit({ editor, mark: extension });\n }\n if (addKeyboardShortcuts) {\n const bindings = Object.fromEntries(Object.entries(addKeyboardShortcuts()).map(([shortcut, method]) => {\n return [shortcut, () => method({ editor })];\n }));\n defaultBindings = { ...defaultBindings, ...bindings };\n }\n const keyMapPlugin = keymap(defaultBindings);\n plugins.push(keyMapPlugin);\n const addInputRules = getExtensionField(extension, 'addInputRules', context);\n if (isExtensionRulesEnabled(extension, editor.options.enableInputRules) && addInputRules) {\n inputRules.push(...addInputRules());\n }\n const addPasteRules = getExtensionField(extension, 'addPasteRules', context);\n if (isExtensionRulesEnabled(extension, editor.options.enablePasteRules) && addPasteRules) {\n pasteRules.push(...addPasteRules());\n }\n const addProseMirrorPlugins = getExtensionField(extension, 'addProseMirrorPlugins', context);\n if (addProseMirrorPlugins) {\n const proseMirrorPlugins = addProseMirrorPlugins();\n plugins.push(...proseMirrorPlugins);\n }\n return plugins;\n })\n .flat();\n return [\n inputRulesPlugin({\n editor,\n rules: inputRules,\n }),\n ...pasteRulesPlugin({\n editor,\n rules: pasteRules,\n }),\n ...allPlugins,\n ];\n }\n /**\n * Get all attributes from the extensions.\n * @returns An array of attributes\n */\n get attributes() {\n return getAttributesFromExtensions(this.extensions);\n }\n /**\n * Get all node views from the extensions.\n * @returns An object with all node views where the key is the node name and the value is the node view function\n */\n get nodeViews() {\n const { editor } = this;\n const { nodeExtensions } = splitExtensions(this.extensions);\n return Object.fromEntries(nodeExtensions\n .filter(extension => !!getExtensionField(extension, 'addNodeView'))\n .map(extension => {\n const extensionAttributes = this.attributes.filter(attribute => attribute.type === extension.name);\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n editor,\n type: getNodeType(extension.name, this.schema),\n };\n const addNodeView = getExtensionField(extension, 'addNodeView', context);\n if (!addNodeView) {\n return [];\n }\n const nodeview = (node, view, getPos, decorations) => {\n const HTMLAttributes = getRenderedAttributes(node, extensionAttributes);\n return addNodeView()({\n editor,\n node,\n getPos,\n decorations,\n HTMLAttributes,\n extension,\n });\n };\n return [extension.name, nodeview];\n }));\n }\n /**\n * Go through all extensions, create extension storages & setup marks\n * & bind editor event listener.\n */\n setupExtensions() {\n this.extensions.forEach(extension => {\n var _a;\n // store extension storage in editor\n this.editor.extensionStorage[extension.name] = extension.storage;\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n editor: this.editor,\n type: getSchemaTypeByName(extension.name, this.schema),\n };\n if (extension.type === 'mark') {\n const keepOnSplit = (_a = callOrReturn(getExtensionField(extension, 'keepOnSplit', context))) !== null && _a !== void 0 ? _a : true;\n if (keepOnSplit) {\n this.splittableMarks.push(extension.name);\n }\n }\n const onBeforeCreate = getExtensionField(extension, 'onBeforeCreate', context);\n const onCreate = getExtensionField(extension, 'onCreate', context);\n const onUpdate = getExtensionField(extension, 'onUpdate', context);\n const onSelectionUpdate = getExtensionField(extension, 'onSelectionUpdate', context);\n const onTransaction = getExtensionField(extension, 'onTransaction', context);\n const onFocus = getExtensionField(extension, 'onFocus', context);\n const onBlur = getExtensionField(extension, 'onBlur', context);\n const onDestroy = getExtensionField(extension, 'onDestroy', context);\n if (onBeforeCreate) {\n this.editor.on('beforeCreate', onBeforeCreate);\n }\n if (onCreate) {\n this.editor.on('create', onCreate);\n }\n if (onUpdate) {\n this.editor.on('update', onUpdate);\n }\n if (onSelectionUpdate) {\n this.editor.on('selectionUpdate', onSelectionUpdate);\n }\n if (onTransaction) {\n this.editor.on('transaction', onTransaction);\n }\n if (onFocus) {\n this.editor.on('focus', onFocus);\n }\n if (onBlur) {\n this.editor.on('blur', onBlur);\n }\n if (onDestroy) {\n this.editor.on('destroy', onDestroy);\n }\n });\n }\n}\n\n// see: https://github.com/mesqueeb/is-what/blob/88d6e4ca92fb2baab6003c54e02eedf4e729e5ab/src/index.ts\nfunction getType(value) {\n return Object.prototype.toString.call(value).slice(8, -1);\n}\nfunction isPlainObject(value) {\n if (getType(value) !== 'Object') {\n return false;\n }\n return value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype;\n}\n\nfunction mergeDeep(target, source) {\n const output = { ...target };\n if (isPlainObject(target) && isPlainObject(source)) {\n Object.keys(source).forEach(key => {\n if (isPlainObject(source[key]) && isPlainObject(target[key])) {\n output[key] = mergeDeep(target[key], source[key]);\n }\n else {\n output[key] = source[key];\n }\n });\n }\n return output;\n}\n\n/**\n * The Extension class is the base class for all extensions.\n * @see https://tiptap.dev/api/extensions#create-a-new-extension\n */\nclass Extension {\n constructor(config = {}) {\n this.type = 'extension';\n this.name = 'extension';\n this.parent = null;\n this.child = null;\n this.config = {\n name: this.name,\n defaultOptions: {},\n };\n this.config = {\n ...this.config,\n ...config,\n };\n this.name = this.config.name;\n if (config.defaultOptions && Object.keys(config.defaultOptions).length > 0) {\n console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${this.name}\".`);\n }\n // TODO: remove `addOptions` fallback\n this.options = this.config.defaultOptions;\n if (this.config.addOptions) {\n this.options = callOrReturn(getExtensionField(this, 'addOptions', {\n name: this.name,\n }));\n }\n this.storage = callOrReturn(getExtensionField(this, 'addStorage', {\n name: this.name,\n options: this.options,\n })) || {};\n }\n static create(config = {}) {\n return new Extension(config);\n }\n configure(options = {}) {\n // return a new instance so we can use the same extension\n // with different calls of `configure`\n const extension = this.extend({\n ...this.config,\n addOptions: () => {\n return mergeDeep(this.options, options);\n },\n });\n // Always preserve the current name\n extension.name = this.name;\n // Set the parent to be our parent\n extension.parent = this.parent;\n return extension;\n }\n extend(extendedConfig = {}) {\n const extension = new Extension({ ...this.config, ...extendedConfig });\n extension.parent = this;\n this.child = extension;\n extension.name = extendedConfig.name ? extendedConfig.name : extension.parent.name;\n if (extendedConfig.defaultOptions && Object.keys(extendedConfig.defaultOptions).length > 0) {\n console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${extension.name}\".`);\n }\n extension.options = callOrReturn(getExtensionField(extension, 'addOptions', {\n name: extension.name,\n }));\n extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', {\n name: extension.name,\n options: extension.options,\n }));\n return extension;\n }\n}\n\n/**\n * Gets the text between two positions in a Prosemirror node\n * and serializes it using the given text serializers and block separator (see getText)\n * @param startNode The Prosemirror node to start from\n * @param range The range of the text to get\n * @param options Options for the text serializer & block separator\n * @returns The text between the two positions\n */\nfunction getTextBetween(startNode, range, options) {\n const { from, to } = range;\n const { blockSeparator = '\\n\\n', textSerializers = {} } = options || {};\n let text = '';\n startNode.nodesBetween(from, to, (node, pos, parent, index) => {\n var _a;\n if (node.isBlock && pos > from) {\n text += blockSeparator;\n }\n const textSerializer = textSerializers === null || textSerializers === void 0 ? void 0 : textSerializers[node.type.name];\n if (textSerializer) {\n if (parent) {\n text += textSerializer({\n node,\n pos,\n parent,\n index,\n range,\n });\n }\n // do not descend into child nodes when there exists a serializer\n return false;\n }\n if (node.isText) {\n text += (_a = node === null || node === void 0 ? void 0 : node.text) === null || _a === void 0 ? void 0 : _a.slice(Math.max(from, pos) - pos, to - pos); // eslint-disable-line\n }\n });\n return text;\n}\n\n/**\n * Find text serializers `toText` in a Prosemirror schema\n * @param schema The Prosemirror schema to search in\n * @returns A record of text serializers by node name\n */\nfunction getTextSerializersFromSchema(schema) {\n return Object.fromEntries(Object.entries(schema.nodes)\n .filter(([, node]) => node.spec.toText)\n .map(([name, node]) => [name, node.spec.toText]));\n}\n\nconst ClipboardTextSerializer = Extension.create({\n name: 'clipboardTextSerializer',\n addOptions() {\n return {\n blockSeparator: undefined,\n };\n },\n addProseMirrorPlugins() {\n return [\n new Plugin({\n key: new PluginKey('clipboardTextSerializer'),\n props: {\n clipboardTextSerializer: () => {\n const { editor } = this;\n const { state, schema } = editor;\n const { doc, selection } = state;\n const { ranges } = selection;\n const from = Math.min(...ranges.map(range => range.$from.pos));\n const to = Math.max(...ranges.map(range => range.$to.pos));\n const textSerializers = getTextSerializersFromSchema(schema);\n const range = { from, to };\n return getTextBetween(doc, range, {\n ...(this.options.blockSeparator !== undefined\n ? { blockSeparator: this.options.blockSeparator }\n : {}),\n textSerializers,\n });\n },\n },\n }),\n ];\n },\n});\n\nconst blur = () => ({ editor, view }) => {\n requestAnimationFrame(() => {\n var _a;\n if (!editor.isDestroyed) {\n view.dom.blur();\n // Browsers should remove the caret on blur but safari does not.\n // See: https://github.com/ueberdosis/tiptap/issues/2405\n (_a = window === null || window === void 0 ? void 0 : window.getSelection()) === null || _a === void 0 ? void 0 : _a.removeAllRanges();\n }\n });\n return true;\n};\n\nconst clearContent = (emitUpdate = false) => ({ commands }) => {\n return commands.setContent('', emitUpdate);\n};\n\nconst clearNodes = () => ({ state, tr, dispatch }) => {\n const { selection } = tr;\n const { ranges } = selection;\n if (!dispatch) {\n return true;\n }\n ranges.forEach(({ $from, $to }) => {\n state.doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n if (node.type.isText) {\n return;\n }\n const { doc, mapping } = tr;\n const $mappedFrom = doc.resolve(mapping.map(pos));\n const $mappedTo = doc.resolve(mapping.map(pos + node.nodeSize));\n const nodeRange = $mappedFrom.blockRange($mappedTo);\n if (!nodeRange) {\n return;\n }\n const targetLiftDepth = liftTarget(nodeRange);\n if (node.type.isTextblock) {\n const { defaultType } = $mappedFrom.parent.contentMatchAt($mappedFrom.index());\n tr.setNodeMarkup(nodeRange.start, defaultType);\n }\n if (targetLiftDepth || targetLiftDepth === 0) {\n tr.lift(nodeRange, targetLiftDepth);\n }\n });\n });\n return true;\n};\n\nconst command = fn => props => {\n return fn(props);\n};\n\nconst createParagraphNear = () => ({ state, dispatch }) => {\n return createParagraphNear$1(state, dispatch);\n};\n\nconst cut = (originRange, targetPos) => ({ editor, tr }) => {\n const { state } = editor;\n const contentSlice = state.doc.slice(originRange.from, originRange.to);\n tr.deleteRange(originRange.from, originRange.to);\n const newPos = tr.mapping.map(targetPos);\n tr.insert(newPos, contentSlice.content);\n tr.setSelection(new TextSelection(tr.doc.resolve(newPos - 1)));\n return true;\n};\n\nconst deleteCurrentNode = () => ({ tr, dispatch }) => {\n const { selection } = tr;\n const currentNode = selection.$anchor.node();\n // if there is content inside the current node, break out of this command\n if (currentNode.content.size > 0) {\n return false;\n }\n const $pos = tr.selection.$anchor;\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth);\n if (node.type === currentNode.type) {\n if (dispatch) {\n const from = $pos.before(depth);\n const to = $pos.after(depth);\n tr.delete(from, to).scrollIntoView();\n }\n return true;\n }\n }\n return false;\n};\n\nconst deleteNode = typeOrName => ({ tr, state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n const $pos = tr.selection.$anchor;\n for (let depth = $pos.depth; depth > 0; depth -= 1) {\n const node = $pos.node(depth);\n if (node.type === type) {\n if (dispatch) {\n const from = $pos.before(depth);\n const to = $pos.after(depth);\n tr.delete(from, to).scrollIntoView();\n }\n return true;\n }\n }\n return false;\n};\n\nconst deleteRange = range => ({ tr, dispatch }) => {\n const { from, to } = range;\n if (dispatch) {\n tr.delete(from, to);\n }\n return true;\n};\n\nconst deleteSelection = () => ({ state, dispatch }) => {\n return deleteSelection$1(state, dispatch);\n};\n\nconst enter = () => ({ commands }) => {\n return commands.keyboardShortcut('Enter');\n};\n\nconst exitCode = () => ({ state, dispatch }) => {\n return exitCode$1(state, dispatch);\n};\n\n/**\n * Check if object1 includes object2\n * @param object1 Object\n * @param object2 Object\n */\nfunction objectIncludes(object1, object2, options = { strict: true }) {\n const keys = Object.keys(object2);\n if (!keys.length) {\n return true;\n }\n return keys.every(key => {\n if (options.strict) {\n return object2[key] === object1[key];\n }\n if (isRegExp(object2[key])) {\n return object2[key].test(object1[key]);\n }\n return object2[key] === object1[key];\n });\n}\n\nfunction findMarkInSet(marks, type, attributes = {}) {\n return marks.find(item => {\n return item.type === type && objectIncludes(item.attrs, attributes);\n });\n}\nfunction isMarkInSet(marks, type, attributes = {}) {\n return !!findMarkInSet(marks, type, attributes);\n}\nfunction getMarkRange($pos, type, attributes = {}) {\n if (!$pos || !type) {\n return;\n }\n let start = $pos.parent.childAfter($pos.parentOffset);\n if ($pos.parentOffset === start.offset && start.offset !== 0) {\n start = $pos.parent.childBefore($pos.parentOffset);\n }\n if (!start.node) {\n return;\n }\n const mark = findMarkInSet([...start.node.marks], type, attributes);\n if (!mark) {\n return;\n }\n let startIndex = start.index;\n let startPos = $pos.start() + start.offset;\n let endIndex = startIndex + 1;\n let endPos = startPos + start.node.nodeSize;\n findMarkInSet([...start.node.marks], type, attributes);\n while (startIndex > 0 && mark.isInSet($pos.parent.child(startIndex - 1).marks)) {\n startIndex -= 1;\n startPos -= $pos.parent.child(startIndex).nodeSize;\n }\n while (endIndex < $pos.parent.childCount\n && isMarkInSet([...$pos.parent.child(endIndex).marks], type, attributes)) {\n endPos += $pos.parent.child(endIndex).nodeSize;\n endIndex += 1;\n }\n return {\n from: startPos,\n to: endPos,\n };\n}\n\nfunction getMarkType(nameOrType, schema) {\n if (typeof nameOrType === 'string') {\n if (!schema.marks[nameOrType]) {\n throw Error(`There is no mark type named '${nameOrType}'. Maybe you forgot to add the extension?`);\n }\n return schema.marks[nameOrType];\n }\n return nameOrType;\n}\n\nconst extendMarkRange = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\n const type = getMarkType(typeOrName, state.schema);\n const { doc, selection } = tr;\n const { $from, from, to } = selection;\n if (dispatch) {\n const range = getMarkRange($from, type, attributes);\n if (range && range.from <= from && range.to >= to) {\n const newSelection = TextSelection.create(doc, range.from, range.to);\n tr.setSelection(newSelection);\n }\n }\n return true;\n};\n\nconst first = commands => props => {\n const items = typeof commands === 'function'\n ? commands(props)\n : commands;\n for (let i = 0; i < items.length; i += 1) {\n if (items[i](props)) {\n return true;\n }\n }\n return false;\n};\n\nfunction isTextSelection(value) {\n return value instanceof TextSelection;\n}\n\nfunction minMax(value = 0, min = 0, max = 0) {\n return Math.min(Math.max(value, min), max);\n}\n\nfunction resolveFocusPosition(doc, position = null) {\n if (!position) {\n return null;\n }\n const selectionAtStart = Selection.atStart(doc);\n const selectionAtEnd = Selection.atEnd(doc);\n if (position === 'start' || position === true) {\n return selectionAtStart;\n }\n if (position === 'end') {\n return selectionAtEnd;\n }\n const minPos = selectionAtStart.from;\n const maxPos = selectionAtEnd.to;\n if (position === 'all') {\n return TextSelection.create(doc, minMax(0, minPos, maxPos), minMax(doc.content.size, minPos, maxPos));\n }\n return TextSelection.create(doc, minMax(position, minPos, maxPos), minMax(position, minPos, maxPos));\n}\n\nfunction isiOS() {\n return [\n 'iPad Simulator',\n 'iPhone Simulator',\n 'iPod Simulator',\n 'iPad',\n 'iPhone',\n 'iPod',\n ].includes(navigator.platform)\n // iPad on iOS 13 detection\n || (navigator.userAgent.includes('Mac') && 'ontouchend' in document);\n}\n\nconst focus = (position = null, options = {}) => ({ editor, view, tr, dispatch, }) => {\n options = {\n scrollIntoView: true,\n ...options,\n };\n const delayedFocus = () => {\n // focus within `requestAnimationFrame` breaks focus on iOS\n // so we have to call this\n if (isiOS()) {\n view.dom.focus();\n }\n // For React we have to focus asynchronously. Otherwise wild things happen.\n // see: https://github.com/ueberdosis/tiptap/issues/1520\n requestAnimationFrame(() => {\n if (!editor.isDestroyed) {\n view.focus();\n if (options === null || options === void 0 ? void 0 : options.scrollIntoView) {\n editor.commands.scrollIntoView();\n }\n }\n });\n };\n if ((view.hasFocus() && position === null) || position === false) {\n return true;\n }\n // we don’t try to resolve a NodeSelection or CellSelection\n if (dispatch && position === null && !isTextSelection(editor.state.selection)) {\n delayedFocus();\n return true;\n }\n // pass through tr.doc instead of editor.state.doc\n // since transactions could change the editors state before this command has been run\n const selection = resolveFocusPosition(tr.doc, position) || editor.state.selection;\n const isSameSelection = editor.state.selection.eq(selection);\n if (dispatch) {\n if (!isSameSelection) {\n tr.setSelection(selection);\n }\n // `tr.setSelection` resets the stored marks\n // so we’ll restore them if the selection is the same as before\n if (isSameSelection && tr.storedMarks) {\n tr.setStoredMarks(tr.storedMarks);\n }\n delayedFocus();\n }\n return true;\n};\n\nconst forEach = (items, fn) => props => {\n return items.every((item, index) => fn(item, { ...props, index }));\n};\n\nconst insertContent = (value, options) => ({ tr, commands }) => {\n return commands.insertContentAt({ from: tr.selection.from, to: tr.selection.to }, value, options);\n};\n\nconst removeWhitespaces = (node) => {\n const children = node.childNodes;\n for (let i = children.length - 1; i >= 0; i -= 1) {\n const child = children[i];\n if (child.nodeType === 3 && child.nodeValue && /^(\\n\\s\\s|\\n)$/.test(child.nodeValue)) {\n node.removeChild(child);\n }\n else if (child.nodeType === 1) {\n removeWhitespaces(child);\n }\n }\n return node;\n};\nfunction elementFromString(value) {\n // add a wrapper to preserve leading and trailing whitespace\n const wrappedValue = `<body>${value}</body>`;\n const html = new window.DOMParser().parseFromString(wrappedValue, 'text/html').body;\n return removeWhitespaces(html);\n}\n\n/**\n * Takes a JSON or HTML content and creates a Prosemirror node or fragment from it.\n * @param content The JSON or HTML content to create the node from\n * @param schema The Prosemirror schema to use for the node\n * @param options Options for the parser\n * @returns The created Prosemirror node or fragment\n */\nfunction createNodeFromContent(content, schema, options) {\n options = {\n slice: true,\n parseOptions: {},\n ...options,\n };\n const isJSONContent = typeof content === 'object' && content !== null;\n const isTextContent = typeof content === 'string';\n if (isJSONContent) {\n try {\n const isArrayContent = Array.isArray(content) && content.length > 0;\n // if the JSON Content is an array of nodes, create a fragment for each node\n if (isArrayContent) {\n return Fragment.fromArray(content.map(item => schema.nodeFromJSON(item)));\n }\n const node = schema.nodeFromJSON(content);\n if (options.errorOnInvalidContent) {\n node.check();\n }\n return node;\n }\n catch (error) {\n if (options.errorOnInvalidContent) {\n throw new Error('[tiptap error]: Invalid JSON content', { cause: error });\n }\n console.warn('[tiptap warn]: Invalid content.', 'Passed value:', content, 'Error:', error);\n return createNodeFromContent('', schema, options);\n }\n }\n if (isTextContent) {\n // Check for invalid content\n if (options.errorOnInvalidContent) {\n let hasInvalidContent = false;\n let invalidContent = '';\n // A copy of the current schema with a catch-all node at the end\n const contentCheckSchema = new Schema({\n topNode: schema.spec.topNode,\n marks: schema.spec.marks,\n // Prosemirror's schemas are executed such that: the last to execute, matches last\n // This means that we can add a catch-all node at the end of the schema to catch any content that we don't know how to handle\n nodes: schema.spec.nodes.append({\n __tiptap__private__unknown__catch__all__node: {\n content: 'inline*',\n group: 'block',\n parseDOM: [\n {\n tag: '*',\n getAttrs: e => {\n // If this is ever called, we know that the content has something that we don't know how to handle in the schema\n hasInvalidContent = true;\n // Try to stringify the element for a more helpful error message\n invalidContent = typeof e === 'string' ? e : e.outerHTML;\n return null;\n },\n },\n ],\n },\n }),\n });\n if (options.slice) {\n DOMParser.fromSchema(contentCheckSchema).parseSlice(elementFromString(content), options.parseOptions);\n }\n else {\n DOMParser.fromSchema(contentCheckSchema).parse(elementFromString(content), options.parseOptions);\n }\n if (options.errorOnInvalidContent && hasInvalidContent) {\n throw new Error('[tiptap error]: Invalid HTML content', { cause: new Error(`Invalid element found: ${invalidContent}`) });\n }\n }\n const parser = DOMParser.fromSchema(schema);\n if (options.slice) {\n return parser.parseSlice(elementFromString(content), options.parseOptions).content;\n }\n return parser.parse(elementFromString(content), options.parseOptions);\n }\n return createNodeFromContent('', schema, options);\n}\n\n// source: https://github.com/ProseMirror/prosemirror-state/blob/master/src/selection.js#L466\nfunction selectionToInsertionEnd(tr, startLen, bias) {\n const last = tr.steps.length - 1;\n if (last < startLen) {\n return;\n }\n const step = tr.steps[last];\n if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep)) {\n return;\n }\n const map = tr.mapping.maps[last];\n let end = 0;\n map.forEach((_from, _to, _newFrom, newTo) => {\n if (end === 0) {\n end = newTo;\n }\n });\n tr.setSelection(Selection.near(tr.doc.resolve(end), bias));\n}\n\nconst isFragment = (nodeOrFragment) => {\n return !('type' in nodeOrFragment);\n};\nconst insertContentAt = (position, value, options) => ({ tr, dispatch, editor }) => {\n var _a;\n if (dispatch) {\n options = {\n parseOptions: {},\n updateSelection: true,\n applyInputRules: false,\n applyPasteRules: false,\n ...options,\n };\n let content;\n try {\n content = createNodeFromContent(value, editor.schema, {\n parseOptions: {\n preserveWhitespace: 'full',\n ...options.parseOptions,\n },\n errorOnInvalidContent: (_a = options.errorOnInvalidContent) !== null && _a !== void 0 ? _a : editor.options.enableContentCheck,\n });\n }\n catch (e) {\n editor.emit('contentError', {\n editor,\n error: e,\n disableCollaboration: () => {\n console.error('[tiptap error]: Unable to disable collaboration at this point in time');\n },\n });\n return false;\n }\n let { from, to } = typeof position === 'number' ? { from: position, to: position } : { from: position.from, to: position.to };\n let isOnlyTextContent = true;\n let isOnlyBlockContent = true;\n const nodes = isFragment(content) ? content : [content];\n nodes.forEach(node => {\n // check if added node is valid\n node.check();\n isOnlyTextContent = isOnlyTextContent ? node.isText && node.marks.length === 0 : false;\n isOnlyBlockContent = isOnlyBlockContent ? node.isBlock : false;\n });\n // check if we can replace the wrapping node by\n // the newly inserted content\n // example:\n // replace an empty paragraph by an inserted image\n // instead of inserting the image below the paragraph\n if (from === to && isOnlyBlockContent) {\n const { parent } = tr.doc.resolve(from);\n const isEmptyTextBlock = parent.isTextblock && !parent.type.spec.code && !parent.childCount;\n if (isEmptyTextBlock) {\n from -= 1;\n to += 1;\n }\n }\n let newContent;\n // if there is only plain text we have to use `insertText`\n // because this will keep the current marks\n if (isOnlyTextContent) {\n // if value is string, we can use it directly\n // otherwise if it is an array, we have to join it\n if (Array.isArray(value)) {\n newContent = value.map(v => v.text || '').join('');\n }\n else if (typeof value === 'object' && !!value && !!value.text) {\n newContent = value.text;\n }\n else {\n newContent = value;\n }\n tr.insertText(newContent, from, to);\n }\n else {\n newContent = content;\n tr.replaceWith(from, to, newContent);\n }\n // set cursor at end of inserted content\n if (options.updateSelection) {\n selectionToInsertionEnd(tr, tr.steps.length - 1, -1);\n }\n if (options.applyInputRules) {\n tr.setMeta('applyInputRules', { from, text: newContent });\n }\n if (options.applyPasteRules) {\n tr.setMeta('applyPasteRules', { from, text: newContent });\n }\n }\n return true;\n};\n\nconst joinUp = () => ({ state, dispatch }) => {\n return joinUp$1(state, dispatch);\n};\nconst joinDown = () => ({ state, dispatch }) => {\n return joinDown$1(state, dispatch);\n};\nconst joinBackward = () => ({ state, dispatch }) => {\n return joinBackward$1(state, dispatch);\n};\nconst joinForward = () => ({ state, dispatch }) => {\n return joinForward$1(state, dispatch);\n};\n\nconst joinItemBackward = () => ({ state, dispatch, tr, }) => {\n try {\n const point = joinPoint(state.doc, state.selection.$from.pos, -1);\n if (point === null || point === undefined) {\n return false;\n }\n tr.join(point, 2);\n if (dispatch) {\n dispatch(tr);\n }\n return true;\n }\n catch (e) {\n return false;\n }\n};\n\nconst joinItemForward = () => ({ state, dispatch, tr, }) => {\n try {\n const point = joinPoint(state.doc, state.selection.$from.pos, +1);\n if (point === null || point === undefined) {\n return false;\n }\n tr.join(point, 2);\n if (dispatch) {\n dispatch(tr);\n }\n return true;\n }\n catch (e) {\n return false;\n }\n};\n\nconst joinTextblockBackward = () => ({ state, dispatch }) => {\n return joinTextblockBackward$1(state, dispatch);\n};\n\nconst joinTextblockForward = () => ({ state, dispatch }) => {\n return joinTextblockForward$1(state, dispatch);\n};\n\nfunction isMacOS() {\n return typeof navigator !== 'undefined'\n ? /Mac/.test(navigator.platform)\n : false;\n}\n\nfunction normalizeKeyName(name) {\n const parts = name.split(/-(?!$)/);\n let result = parts[parts.length - 1];\n if (result === 'Space') {\n result = ' ';\n }\n let alt;\n let ctrl;\n let shift;\n let meta;\n for (let i = 0; i < parts.length - 1; i += 1) {\n const mod = parts[i];\n if (/^(cmd|meta|m)$/i.test(mod)) {\n meta = true;\n }\n else if (/^a(lt)?$/i.test(mod)) {\n alt = true;\n }\n else if (/^(c|ctrl|control)$/i.test(mod)) {\n ctrl = true;\n }\n else if (/^s(hift)?$/i.test(mod)) {\n shift = true;\n }\n else if (/^mod$/i.test(mod)) {\n if (isiOS() || isMacOS()) {\n meta = true;\n }\n else {\n ctrl = true;\n }\n }\n else {\n throw new Error(`Unrecognized modifier name: ${mod}`);\n }\n }\n if (alt) {\n result = `Alt-${result}`;\n }\n if (ctrl) {\n result = `Ctrl-${result}`;\n }\n if (meta) {\n result = `Meta-${result}`;\n }\n if (shift) {\n result = `Shift-${result}`;\n }\n return result;\n}\nconst keyboardShortcut = name => ({ editor, view, tr, dispatch, }) => {\n const keys = normalizeKeyName(name).split(/-(?!$)/);\n const key = keys.find(item => !['Alt', 'Ctrl', 'Meta', 'Shift'].includes(item));\n const event = new KeyboardEvent('keydown', {\n key: key === 'Space'\n ? ' '\n : key,\n altKey: keys.includes('Alt'),\n ctrlKey: keys.includes('Ctrl'),\n metaKey: keys.includes('Meta'),\n shiftKey: keys.includes('Shift'),\n bubbles: true,\n cancelable: true,\n });\n const capturedTransaction = editor.captureTransaction(() => {\n view.someProp('handleKeyDown', f => f(view, event));\n });\n capturedTransaction === null || capturedTransaction === void 0 ? void 0 : capturedTransaction.steps.forEach(step => {\n const newStep = step.map(tr.mapping);\n if (newStep && dispatch) {\n tr.maybeStep(newStep);\n }\n });\n return true;\n};\n\nfunction isNodeActive(state, typeOrName, attributes = {}) {\n const { from, to, empty } = state.selection;\n const type = typeOrName ? getNodeType(typeOrName, state.schema) : null;\n const nodeRanges = [];\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (node.isText) {\n return;\n }\n const relativeFrom = Math.max(from, pos);\n const relativeTo = Math.min(to, pos + node.nodeSize);\n nodeRanges.push({\n node,\n from: relativeFrom,\n to: relativeTo,\n });\n });\n const selectionRange = to - from;\n const matchedNodeRanges = nodeRanges\n .filter(nodeRange => {\n if (!type) {\n return true;\n }\n return type.name === nodeRange.node.type.name;\n })\n .filter(nodeRange => objectIncludes(nodeRange.node.attrs, attributes, { strict: false }));\n if (empty) {\n return !!matchedNodeRanges.length;\n }\n const range = matchedNodeRanges.reduce((sum, nodeRange) => sum + nodeRange.to - nodeRange.from, 0);\n return range >= selectionRange;\n}\n\nconst lift = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n const isActive = isNodeActive(state, type, attributes);\n if (!isActive) {\n return false;\n }\n return lift$1(state, dispatch);\n};\n\nconst liftEmptyBlock = () => ({ state, dispatch }) => {\n return liftEmptyBlock$1(state, dispatch);\n};\n\nconst liftListItem = typeOrName => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return liftListItem$1(type)(state, dispatch);\n};\n\nconst newlineInCode = () => ({ state, dispatch }) => {\n return newlineInCode$1(state, dispatch);\n};\n\n/**\n * Get the type of a schema item by its name.\n * @param name The name of the schema item\n * @param schema The Prosemiror schema to search in\n * @returns The type of the schema item (`node` or `mark`), or null if it doesn't exist\n */\nfunction getSchemaTypeNameByName(name, schema) {\n if (schema.nodes[name]) {\n return 'node';\n }\n if (schema.marks[name]) {\n return 'mark';\n }\n return null;\n}\n\n/**\n * Remove a property or an array of properties from an object\n * @param obj Object\n * @param key Key to remove\n */\nfunction deleteProps(obj, propOrProps) {\n const props = typeof propOrProps === 'string'\n ? [propOrProps]\n : propOrProps;\n return Object\n .keys(obj)\n .reduce((newObj, prop) => {\n if (!props.includes(prop)) {\n newObj[prop] = obj[prop];\n }\n return newObj;\n }, {});\n}\n\nconst resetAttributes = (typeOrName, attributes) => ({ tr, state, dispatch }) => {\n let nodeType = null;\n let markType = null;\n const schemaType = getSchemaTypeNameByName(typeof typeOrName === 'string' ? typeOrName : typeOrName.name, state.schema);\n if (!schemaType) {\n return false;\n }\n if (schemaType === 'node') {\n nodeType = getNodeType(typeOrName, state.schema);\n }\n if (schemaType === 'mark') {\n markType = getMarkType(typeOrName, state.schema);\n }\n if (dispatch) {\n tr.selection.ranges.forEach(range => {\n state.doc.nodesBetween(range.$from.pos, range.$to.pos, (node, pos) => {\n if (nodeType && nodeType === node.type) {\n tr.setNodeMarkup(pos, undefined, deleteProps(node.attrs, attributes));\n }\n if (markType && node.marks.length) {\n node.marks.forEach(mark => {\n if (markType === mark.type) {\n tr.addMark(pos, pos + node.nodeSize, markType.create(deleteProps(mark.attrs, attributes)));\n }\n });\n }\n });\n });\n }\n return true;\n};\n\nconst scrollIntoView = () => ({ tr, dispatch }) => {\n if (dispatch) {\n tr.scrollIntoView();\n }\n return true;\n};\n\nconst selectAll = () => ({ tr, commands }) => {\n return commands.setTextSelection({\n from: 0,\n to: tr.doc.content.size,\n });\n};\n\nconst selectNodeBackward = () => ({ state, dispatch }) => {\n return selectNodeBackward$1(state, dispatch);\n};\n\nconst selectNodeForward = () => ({ state, dispatch }) => {\n return selectNodeForward$1(state, dispatch);\n};\n\nconst selectParentNode = () => ({ state, dispatch }) => {\n return selectParentNode$1(state, dispatch);\n};\n\n// @ts-ignore\n// TODO: add types to @types/prosemirror-commands\nconst selectTextblockEnd = () => ({ state, dispatch }) => {\n return selectTextblockEnd$1(state, dispatch);\n};\n\n// @ts-ignore\n// TODO: add types to @types/prosemirror-commands\nconst selectTextblockStart = () => ({ state, dispatch }) => {\n return selectTextblockStart$1(state, dispatch);\n};\n\n/**\n * Create a new Prosemirror document node from content.\n * @param content The JSON or HTML content to create the document from\n * @param schema The Prosemirror schema to use for the document\n * @param parseOptions Options for the parser\n * @returns The created Prosemirror document node\n */\nfunction createDocument(content, schema, parseOptions = {}, options = {}) {\n return createNodeFromContent(content, schema, {\n slice: false,\n parseOptions,\n errorOnInvalidContent: options.errorOnInvalidContent,\n });\n}\n\nconst setContent = (content, emitUpdate = false, parseOptions = {}, options = {}) => ({ editor, tr, dispatch, commands, }) => {\n var _a, _b;\n const { doc } = tr;\n // This is to keep backward compatibility with the previous behavior\n // TODO remove this in the next major version\n if (parseOptions.preserveWhitespace !== 'full') {\n const document = createDocument(content, editor.schema, parseOptions, {\n errorOnInvalidContent: (_a = options.errorOnInvalidContent) !== null && _a !== void 0 ? _a : editor.options.enableContentCheck,\n });\n if (dispatch) {\n tr.replaceWith(0, doc.content.size, document).setMeta('preventUpdate', !emitUpdate);\n }\n return true;\n }\n if (dispatch) {\n tr.setMeta('preventUpdate', !emitUpdate);\n }\n return commands.insertContentAt({ from: 0, to: doc.content.size }, content, {\n parseOptions,\n errorOnInvalidContent: (_b = options.errorOnInvalidContent) !== null && _b !== void 0 ? _b : editor.options.enableContentCheck,\n });\n};\n\nfunction getMarkAttributes(state, typeOrName) {\n const type = getMarkType(typeOrName, state.schema);\n const { from, to, empty } = state.selection;\n const marks = [];\n if (empty) {\n if (state.storedMarks) {\n marks.push(...state.storedMarks);\n }\n marks.push(...state.selection.$head.marks());\n }\n else {\n state.doc.nodesBetween(from, to, node => {\n marks.push(...node.marks);\n });\n }\n const mark = marks.find(markItem => markItem.type.name === type.name);\n if (!mark) {\n return {};\n }\n return { ...mark.attrs };\n}\n\n/**\n * Returns a new `Transform` based on all steps of the passed transactions.\n * @param oldDoc The Prosemirror node to start from\n * @param transactions The transactions to combine\n * @returns A new `Transform` with all steps of the passed transactions\n */\nfunction combineTransactionSteps(oldDoc, transactions) {\n const transform = new Transform(oldDoc);\n transactions.forEach(transaction => {\n transaction.steps.forEach(step => {\n transform.step(step);\n });\n });\n return transform;\n}\n\n/**\n * Gets the default block type at a given match\n * @param match The content match to get the default block type from\n * @returns The default block type or null\n */\nfunction defaultBlockAt(match) {\n for (let i = 0; i < match.edgeCount; i += 1) {\n const { type } = match.edge(i);\n if (type.isTextblock && !type.hasRequiredAttrs()) {\n return type;\n }\n }\n return null;\n}\n\n/**\n * Find children inside a Prosemirror node that match a predicate.\n * @param node The Prosemirror node to search in\n * @param predicate The predicate to match\n * @returns An array of nodes with their positions\n */\nfunction findChildren(node, predicate) {\n const nodesWithPos = [];\n node.descendants((child, pos) => {\n if (predicate(child)) {\n nodesWithPos.push({\n node: child,\n pos,\n });\n }\n });\n return nodesWithPos;\n}\n\n/**\n * Same as `findChildren` but searches only within a `range`.\n * @param node The Prosemirror node to search in\n * @param range The range to search in\n * @param predicate The predicate to match\n * @returns An array of nodes with their positions\n */\nfunction findChildrenInRange(node, range, predicate) {\n const nodesWithPos = [];\n // if (range.from === range.to) {\n // const nodeAt = node.nodeAt(range.from)\n // if (nodeAt) {\n // nodesWithPos.push({\n // node: nodeAt,\n // pos: range.from,\n // })\n // }\n // }\n node.nodesBetween(range.from, range.to, (child, pos) => {\n if (predicate(child)) {\n nodesWithPos.push({\n node: child,\n pos,\n });\n }\n });\n return nodesWithPos;\n}\n\n/**\n * Finds the closest parent node to a resolved position that matches a predicate.\n * @param $pos The resolved position to search from\n * @param predicate The predicate to match\n * @returns The closest parent node to the resolved position that matches the predicate\n * @example ```js\n * findParentNodeClosestToPos($from, node => node.type.name === 'paragraph')\n * ```\n */\nfunction findParentNodeClosestToPos($pos, predicate) {\n for (let i = $pos.depth; i > 0; i -= 1) {\n const node = $pos.node(i);\n if (predicate(node)) {\n return {\n pos: i > 0 ? $pos.before(i) : 0,\n start: $pos.start(i),\n depth: i,\n node,\n };\n }\n }\n}\n\n/**\n * Finds the closest parent node to the current selection that matches a predicate.\n * @param predicate The predicate to match\n * @returns A command that finds the closest parent node to the current selection that matches the predicate\n * @example ```js\n * findParentNode(node => node.type.name === 'paragraph')\n * ```\n */\nfunction findParentNode(predicate) {\n return (selection) => findParentNodeClosestToPos(selection.$from, predicate);\n}\n\nfunction getHTMLFromFragment(fragment, schema) {\n const documentFragment = DOMSerializer.fromSchema(schema).serializeFragment(fragment);\n const temporaryDocument = document.implementation.createHTMLDocument();\n const container = temporaryDocument.createElement('div');\n container.appendChild(documentFragment);\n return container.innerHTML;\n}\n\nfunction getSchema(extensions, editor) {\n const resolvedExtensions = ExtensionManager.resolve(extensions);\n return getSchemaByResolvedExtensions(resolvedExtensions, editor);\n}\n\n/**\n * Generate HTML from a JSONContent\n * @param doc The JSONContent to generate HTML from\n * @param extensions The extensions to use for the schema\n * @returns The generated HTML\n */\nfunction generateHTML(doc, extensions) {\n const schema = getSchema(extensions);\n const contentNode = Node$1.fromJSON(schema, doc);\n return getHTMLFromFragment(contentNode.content, schema);\n}\n\n/**\n * Generate JSONContent from HTML\n * @param html The HTML to generate JSONContent from\n * @param extensions The extensions to use for the schema\n * @returns The generated JSONContent\n */\nfunction generateJSON(html, extensions) {\n const schema = getSchema(extensions);\n const dom = elementFromString(html);\n return DOMParser.fromSchema(schema).parse(dom).toJSON();\n}\n\n/**\n * Gets the text of a Prosemirror node\n * @param node The Prosemirror node\n * @param options Options for the text serializer & block separator\n * @returns The text of the node\n * @example ```js\n * const text = getText(node, { blockSeparator: '\\n' })\n * ```\n */\nfunction getText(node, options) {\n const range = {\n from: 0,\n to: node.content.size,\n };\n return getTextBetween(node, range, options);\n}\n\n/**\n * Generate raw text from a JSONContent\n * @param doc The JSONContent to generate text from\n * @param extensions The extensions to use for the schema\n * @param options Options for the text generation f.e. blockSeparator or textSerializers\n * @returns The generated text\n */\nfunction generateText(doc, extensions, options) {\n const { blockSeparator = '\\n\\n', textSerializers = {} } = options || {};\n const schema = getSchema(extensions);\n const contentNode = Node$1.fromJSON(schema, doc);\n return getText(contentNode, {\n blockSeparator,\n textSerializers: {\n ...getTextSerializersFromSchema(schema),\n ...textSerializers,\n },\n });\n}\n\nfunction getNodeAttributes(state, typeOrName) {\n const type = getNodeType(typeOrName, state.schema);\n const { from, to } = state.selection;\n const nodes = [];\n state.doc.nodesBetween(from, to, node => {\n nodes.push(node);\n });\n const node = nodes.reverse().find(nodeItem => nodeItem.type.name === type.name);\n if (!node) {\n return {};\n }\n return { ...node.attrs };\n}\n\n/**\n * Get node or mark attributes by type or name on the current editor state\n * @param state The current editor state\n * @param typeOrName The node or mark type or name\n * @returns The attributes of the node or mark or an empty object\n */\nfunction getAttributes(state, typeOrName) {\n const schemaType = getSchemaTypeNameByName(typeof typeOrName === 'string' ? typeOrName : typeOrName.name, state.schema);\n if (schemaType === 'node') {\n return getNodeAttributes(state, typeOrName);\n }\n if (schemaType === 'mark') {\n return getMarkAttributes(state, typeOrName);\n }\n return {};\n}\n\n/**\n * Removes duplicated values within an array.\n * Supports numbers, strings and objects.\n */\nfunction removeDuplicates(array, by = JSON.stringify) {\n const seen = {};\n return array.filter(item => {\n const key = by(item);\n return Object.prototype.hasOwnProperty.call(seen, key)\n ? false\n : (seen[key] = true);\n });\n}\n\n/**\n * Removes duplicated ranges and ranges that are\n * fully captured by other ranges.\n */\nfunction simplifyChangedRanges(changes) {\n const uniqueChanges = removeDuplicates(changes);\n return uniqueChanges.length === 1\n ? uniqueChanges\n : uniqueChanges.filter((change, index) => {\n const rest = uniqueChanges.filter((_, i) => i !== index);\n return !rest.some(otherChange => {\n return change.oldRange.from >= otherChange.oldRange.from\n && change.oldRange.to <= otherChange.oldRange.to\n && change.newRange.from >= otherChange.newRange.from\n && change.newRange.to <= otherChange.newRange.to;\n });\n });\n}\n/**\n * Returns a list of changed ranges\n * based on the first and last state of all steps.\n */\nfunction getChangedRanges(transform) {\n const { mapping, steps } = transform;\n const changes = [];\n mapping.maps.forEach((stepMap, index) => {\n const ranges = [];\n // This accounts for step changes where no range was actually altered\n // e.g. when setting a mark, node attribute, etc.\n // @ts-ignore\n if (!stepMap.ranges.length) {\n const { from, to } = steps[index];\n if (from === undefined || to === undefined) {\n return;\n }\n ranges.push({ from, to });\n }\n else {\n stepMap.forEach((from, to) => {\n ranges.push({ from, to });\n });\n }\n ranges.forEach(({ from, to }) => {\n const newStart = mapping.slice(index).map(from, -1);\n const newEnd = mapping.slice(index).map(to);\n const oldStart = mapping.invert().map(newStart, -1);\n const oldEnd = mapping.invert().map(newEnd);\n changes.push({\n oldRange: {\n from: oldStart,\n to: oldEnd,\n },\n newRange: {\n from: newStart,\n to: newEnd,\n },\n });\n });\n });\n return simplifyChangedRanges(changes);\n}\n\nfunction getDebugJSON(node, startOffset = 0) {\n const isTopNode = node.type === node.type.schema.topNodeType;\n const increment = isTopNode ? 0 : 1;\n const from = startOffset;\n const to = from + node.nodeSize;\n const marks = node.marks.map(mark => {\n const output = {\n type: mark.type.name,\n };\n if (Object.keys(mark.attrs).length) {\n output.attrs = { ...mark.attrs };\n }\n return output;\n });\n const attrs = { ...node.attrs };\n const output = {\n type: node.type.name,\n from,\n to,\n };\n if (Object.keys(attrs).length) {\n output.attrs = attrs;\n }\n if (marks.length) {\n output.marks = marks;\n }\n if (node.content.childCount) {\n output.content = [];\n node.forEach((child, offset) => {\n var _a;\n (_a = output.content) === null || _a === void 0 ? void 0 : _a.push(getDebugJSON(child, startOffset + offset + increment));\n });\n }\n if (node.text) {\n output.text = node.text;\n }\n return output;\n}\n\nfunction getMarksBetween(from, to, doc) {\n const marks = [];\n // get all inclusive marks on empty selection\n if (from === to) {\n doc\n .resolve(from)\n .marks()\n .forEach(mark => {\n const $pos = doc.resolve(from);\n const range = getMarkRange($pos, mark.type);\n if (!range) {\n return;\n }\n marks.push({\n mark,\n ...range,\n });\n });\n }\n else {\n doc.nodesBetween(from, to, (node, pos) => {\n if (!node || (node === null || node === void 0 ? void 0 : node.nodeSize) === undefined) {\n return;\n }\n marks.push(...node.marks.map(mark => ({\n from: pos,\n to: pos + node.nodeSize,\n mark,\n })));\n });\n }\n return marks;\n}\n\n/**\n * Finds the first node of a given type or name in the current selection.\n * @param state The editor state.\n * @param typeOrName The node type or name.\n * @param pos The position to start searching from.\n * @param maxDepth The maximum depth to search.\n * @returns The node and the depth as an array.\n */\nconst getNodeAtPosition = (state, typeOrName, pos, maxDepth = 20) => {\n const $pos = state.doc.resolve(pos);\n let currentDepth = maxDepth;\n let node = null;\n while (currentDepth > 0 && node === null) {\n const currentNode = $pos.node(currentDepth);\n if ((currentNode === null || currentNode === void 0 ? void 0 : currentNode.type.name) === typeOrName) {\n node = currentNode;\n }\n else {\n currentDepth -= 1;\n }\n }\n return [node, currentDepth];\n};\n\n/**\n * Return attributes of an extension that should be splitted by keepOnSplit flag\n * @param extensionAttributes Array of extension attributes\n * @param typeName The type of the extension\n * @param attributes The attributes of the extension\n * @returns The splitted attributes\n */\nfunction getSplittedAttributes(extensionAttributes, typeName, attributes) {\n return Object.fromEntries(Object\n .entries(attributes)\n .filter(([name]) => {\n const extensionAttribute = extensionAttributes.find(item => {\n return item.type === typeName && item.name === name;\n });\n if (!extensionAttribute) {\n return false;\n }\n return extensionAttribute.attribute.keepOnSplit;\n }));\n}\n\nfunction isMarkActive(state, typeOrName, attributes = {}) {\n const { empty, ranges } = state.selection;\n const type = typeOrName ? getMarkType(typeOrName, state.schema) : null;\n if (empty) {\n return !!(state.storedMarks || state.selection.$from.marks())\n .filter(mark => {\n if (!type) {\n return true;\n }\n return type.name === mark.type.name;\n })\n .find(mark => objectIncludes(mark.attrs, attributes, { strict: false }));\n }\n let selectionRange = 0;\n const markRanges = [];\n ranges.forEach(({ $from, $to }) => {\n const from = $from.pos;\n const to = $to.pos;\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isText && !node.marks.length) {\n return;\n }\n const relativeFrom = Math.max(from, pos);\n const relativeTo = Math.min(to, pos + node.nodeSize);\n const range = relativeTo - relativeFrom;\n selectionRange += range;\n markRanges.push(...node.marks.map(mark => ({\n mark,\n from: relativeFrom,\n to: relativeTo,\n })));\n });\n });\n if (selectionRange === 0) {\n return false;\n }\n // calculate range of matched mark\n const matchedRange = markRanges\n .filter(markRange => {\n if (!type) {\n return true;\n }\n return type.name === markRange.mark.type.name;\n })\n .filter(markRange => objectIncludes(markRange.mark.attrs, attributes, { strict: false }))\n .reduce((sum, markRange) => sum + markRange.to - markRange.from, 0);\n // calculate range of marks that excludes the searched mark\n // for example `code` doesn’t allow any other marks\n const excludedRange = markRanges\n .filter(markRange => {\n if (!type) {\n return true;\n }\n return markRange.mark.type !== type && markRange.mark.type.excludes(type);\n })\n .reduce((sum, markRange) => sum + markRange.to - markRange.from, 0);\n // we only include the result of `excludedRange`\n // if there is a match at all\n const range = matchedRange > 0 ? matchedRange + excludedRange : matchedRange;\n return range >= selectionRange;\n}\n\nfunction isActive(state, name, attributes = {}) {\n if (!name) {\n return isNodeActive(state, null, attributes) || isMarkActive(state, null, attributes);\n }\n const schemaType = getSchemaTypeNameByName(name, state.schema);\n if (schemaType === 'node') {\n return isNodeActive(state, name, attributes);\n }\n if (schemaType === 'mark') {\n return isMarkActive(state, name, attributes);\n }\n return false;\n}\n\nconst isAtEndOfNode = (state, nodeType) => {\n const { $from, $to, $anchor } = state.selection;\n if (nodeType) {\n const parentNode = findParentNode(node => node.type.name === nodeType)(state.selection);\n if (!parentNode) {\n return false;\n }\n const $parentPos = state.doc.resolve(parentNode.pos + 1);\n if ($anchor.pos + 1 === $parentPos.end()) {\n return true;\n }\n return false;\n }\n if ($to.parentOffset < $to.parent.nodeSize - 2 || $from.pos !== $to.pos) {\n return false;\n }\n return true;\n};\n\nconst isAtStartOfNode = (state) => {\n const { $from, $to } = state.selection;\n if ($from.parentOffset > 0 || $from.pos !== $to.pos) {\n return false;\n }\n return true;\n};\n\nfunction isList(name, extensions) {\n const { nodeExtensions } = splitExtensions(extensions);\n const extension = nodeExtensions.find(item => item.name === name);\n if (!extension) {\n return false;\n }\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n };\n const group = callOrReturn(getExtensionField(extension, 'group', context));\n if (typeof group !== 'string') {\n return false;\n }\n return group.split(' ').includes('list');\n}\n\n/**\n * Returns true if the given prosemirror node is empty.\n */\nfunction isNodeEmpty(node, { checkChildren = true, ignoreWhitespace = false, } = {}) {\n var _a;\n if (ignoreWhitespace) {\n if (node.type.name === 'hardBreak') {\n // Hard breaks are considered empty\n return true;\n }\n if (node.isText) {\n return /^\\s*$/m.test((_a = node.text) !== null && _a !== void 0 ? _a : '');\n }\n }\n if (node.isText) {\n return !node.text;\n }\n if (node.isAtom || node.isLeaf) {\n return false;\n }\n if (node.content.childCount === 0) {\n return true;\n }\n if (checkChildren) {\n let isContentEmpty = true;\n node.content.forEach(childNode => {\n if (isContentEmpty === false) {\n // Exit early for perf\n return;\n }\n if (!isNodeEmpty(childNode, { ignoreWhitespace, checkChildren })) {\n isContentEmpty = false;\n }\n });\n return isContentEmpty;\n }\n return false;\n}\n\nfunction isNodeSelection(value) {\n return value instanceof NodeSelection;\n}\n\nfunction posToDOMRect(view, from, to) {\n const minPos = 0;\n const maxPos = view.state.doc.content.size;\n const resolvedFrom = minMax(from, minPos, maxPos);\n const resolvedEnd = minMax(to, minPos, maxPos);\n const start = view.coordsAtPos(resolvedFrom);\n const end = view.coordsAtPos(resolvedEnd, -1);\n const top = Math.min(start.top, end.top);\n const bottom = Math.max(start.bottom, end.bottom);\n const left = Math.min(start.left, end.left);\n const right = Math.max(start.right, end.right);\n const width = right - left;\n const height = bottom - top;\n const x = left;\n const y = top;\n const data = {\n top,\n bottom,\n left,\n right,\n width,\n height,\n x,\n y,\n };\n return {\n ...data,\n toJSON: () => data,\n };\n}\n\nfunction canSetMark(state, tr, newMarkType) {\n var _a;\n const { selection } = tr;\n let cursor = null;\n if (isTextSelection(selection)) {\n cursor = selection.$cursor;\n }\n if (cursor) {\n const currentMarks = (_a = state.storedMarks) !== null && _a !== void 0 ? _a : cursor.marks();\n // There can be no current marks that exclude the new mark\n return (!!newMarkType.isInSet(currentMarks)\n || !currentMarks.some(mark => mark.type.excludes(newMarkType)));\n }\n const { ranges } = selection;\n return ranges.some(({ $from, $to }) => {\n let someNodeSupportsMark = $from.depth === 0\n ? state.doc.inlineContent && state.doc.type.allowsMarkType(newMarkType)\n : false;\n state.doc.nodesBetween($from.pos, $to.pos, (node, _pos, parent) => {\n // If we already found a mark that we can enable, return false to bypass the remaining search\n if (someNodeSupportsMark) {\n return false;\n }\n if (node.isInline) {\n const parentAllowsMarkType = !parent || parent.type.allowsMarkType(newMarkType);\n const currentMarksAllowMarkType = !!newMarkType.isInSet(node.marks)\n || !node.marks.some(otherMark => otherMark.type.excludes(newMarkType));\n someNodeSupportsMark = parentAllowsMarkType && currentMarksAllowMarkType;\n }\n return !someNodeSupportsMark;\n });\n return someNodeSupportsMark;\n });\n}\nconst setMark = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\n const { selection } = tr;\n const { empty, ranges } = selection;\n const type = getMarkType(typeOrName, state.schema);\n if (dispatch) {\n if (empty) {\n const oldAttributes = getMarkAttributes(state, type);\n tr.addStoredMark(type.create({\n ...oldAttributes,\n ...attributes,\n }));\n }\n else {\n ranges.forEach(range => {\n const from = range.$from.pos;\n const to = range.$to.pos;\n state.doc.nodesBetween(from, to, (node, pos) => {\n const trimmedFrom = Math.max(pos, from);\n const trimmedTo = Math.min(pos + node.nodeSize, to);\n const someHasMark = node.marks.find(mark => mark.type === type);\n // if there is already a mark of this type\n // we know that we have to merge its attributes\n // otherwise we add a fresh new mark\n if (someHasMark) {\n node.marks.forEach(mark => {\n if (type === mark.type) {\n tr.addMark(trimmedFrom, trimmedTo, type.create({\n ...mark.attrs,\n ...attributes,\n }));\n }\n });\n }\n else {\n tr.addMark(trimmedFrom, trimmedTo, type.create(attributes));\n }\n });\n });\n }\n }\n return canSetMark(state, tr, type);\n};\n\nconst setMeta = (key, value) => ({ tr }) => {\n tr.setMeta(key, value);\n return true;\n};\n\nconst setNode = (typeOrName, attributes = {}) => ({ state, dispatch, chain }) => {\n const type = getNodeType(typeOrName, state.schema);\n // TODO: use a fallback like insertContent?\n if (!type.isTextblock) {\n console.warn('[tiptap warn]: Currently \"setNode()\" only supports text block nodes.');\n return false;\n }\n return (chain()\n // try to convert node to default node if needed\n .command(({ commands }) => {\n const canSetBlock = setBlockType(type, attributes)(state);\n if (canSetBlock) {\n return true;\n }\n return commands.clearNodes();\n })\n .command(({ state: updatedState }) => {\n return setBlockType(type, attributes)(updatedState, dispatch);\n })\n .run());\n};\n\nconst setNodeSelection = position => ({ tr, dispatch }) => {\n if (dispatch) {\n const { doc } = tr;\n const from = minMax(position, 0, doc.content.size);\n const selection = NodeSelection.create(doc, from);\n tr.setSelection(selection);\n }\n return true;\n};\n\nconst setTextSelection = position => ({ tr, dispatch }) => {\n if (dispatch) {\n const { doc } = tr;\n const { from, to } = typeof position === 'number' ? { from: position, to: position } : position;\n const minPos = TextSelection.atStart(doc).from;\n const maxPos = TextSelection.atEnd(doc).to;\n const resolvedFrom = minMax(from, minPos, maxPos);\n const resolvedEnd = minMax(to, minPos, maxPos);\n const selection = TextSelection.create(doc, resolvedFrom, resolvedEnd);\n tr.setSelection(selection);\n }\n return true;\n};\n\nconst sinkListItem = typeOrName => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return sinkListItem$1(type)(state, dispatch);\n};\n\nfunction ensureMarks(state, splittableMarks) {\n const marks = state.storedMarks || (state.selection.$to.parentOffset && state.selection.$from.marks());\n if (marks) {\n const filteredMarks = marks.filter(mark => splittableMarks === null || splittableMarks === void 0 ? void 0 : splittableMarks.includes(mark.type.name));\n state.tr.ensureMarks(filteredMarks);\n }\n}\nconst splitBlock = ({ keepMarks = true } = {}) => ({ tr, state, dispatch, editor, }) => {\n const { selection, doc } = tr;\n const { $from, $to } = selection;\n const extensionAttributes = editor.extensionManager.attributes;\n const newAttributes = getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs);\n if (selection instanceof NodeSelection && selection.node.isBlock) {\n if (!$from.parentOffset || !canSplit(doc, $from.pos)) {\n return false;\n }\n if (dispatch) {\n if (keepMarks) {\n ensureMarks(state, editor.extensionManager.splittableMarks);\n }\n tr.split($from.pos).scrollIntoView();\n }\n return true;\n }\n if (!$from.parent.isBlock) {\n return false;\n }\n const atEnd = $to.parentOffset === $to.parent.content.size;\n const deflt = $from.depth === 0\n ? undefined\n : defaultBlockAt($from.node(-1).contentMatchAt($from.indexAfter(-1)));\n let types = atEnd && deflt\n ? [\n {\n type: deflt,\n attrs: newAttributes,\n },\n ]\n : undefined;\n let can = canSplit(tr.doc, tr.mapping.map($from.pos), 1, types);\n if (!types\n && !can\n && canSplit(tr.doc, tr.mapping.map($from.pos), 1, deflt ? [{ type: deflt }] : undefined)) {\n can = true;\n types = deflt\n ? [\n {\n type: deflt,\n attrs: newAttributes,\n },\n ]\n : undefined;\n }\n if (dispatch) {\n if (can) {\n if (selection instanceof TextSelection) {\n tr.deleteSelection();\n }\n tr.split(tr.mapping.map($from.pos), 1, types);\n if (deflt && !atEnd && !$from.parentOffset && $from.parent.type !== deflt) {\n const first = tr.mapping.map($from.before());\n const $first = tr.doc.resolve(first);\n if ($from.node(-1).canReplaceWith($first.index(), $first.index() + 1, deflt)) {\n tr.setNodeMarkup(tr.mapping.map($from.before()), deflt);\n }\n }\n }\n if (keepMarks) {\n ensureMarks(state, editor.extensionManager.splittableMarks);\n }\n tr.scrollIntoView();\n }\n return can;\n};\n\nconst splitListItem = (typeOrName, overrideAttrs = {}) => ({ tr, state, dispatch, editor, }) => {\n var _a;\n const type = getNodeType(typeOrName, state.schema);\n const { $from, $to } = state.selection;\n // @ts-ignore\n // eslint-disable-next-line\n const node = state.selection.node;\n if ((node && node.isBlock) || $from.depth < 2 || !$from.sameParent($to)) {\n return false;\n }\n const grandParent = $from.node(-1);\n if (grandParent.type !== type) {\n return false;\n }\n const extensionAttributes = editor.extensionManager.attributes;\n if ($from.parent.content.size === 0 && $from.node(-1).childCount === $from.indexAfter(-1)) {\n // In an empty block. If this is a nested list, the wrapping\n // list item should be split. Otherwise, bail out and let next\n // command handle lifting.\n if ($from.depth === 2\n || $from.node(-3).type !== type\n || $from.index(-2) !== $from.node(-2).childCount - 1) {\n return false;\n }\n if (dispatch) {\n let wrap = Fragment.empty;\n // eslint-disable-next-line\n const depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;\n // Build a fragment containing empty versions of the structure\n // from the outer list item to the parent node of the cursor\n for (let d = $from.depth - depthBefore; d >= $from.depth - 3; d -= 1) {\n wrap = Fragment.from($from.node(d).copy(wrap));\n }\n // eslint-disable-next-line\n const depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount ? 1 : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3;\n // Add a second list item with an empty default start node\n const newNextTypeAttributes = {\n ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),\n ...overrideAttrs,\n };\n const nextType = ((_a = type.contentMatch.defaultType) === null || _a === void 0 ? void 0 : _a.createAndFill(newNextTypeAttributes)) || undefined;\n wrap = wrap.append(Fragment.from(type.createAndFill(null, nextType) || undefined));\n const start = $from.before($from.depth - (depthBefore - 1));\n tr.replace(start, $from.after(-depthAfter), new Slice(wrap, 4 - depthBefore, 0));\n let sel = -1;\n tr.doc.nodesBetween(start, tr.doc.content.size, (n, pos) => {\n if (sel > -1) {\n return false;\n }\n if (n.isTextblock && n.content.size === 0) {\n sel = pos + 1;\n }\n });\n if (sel > -1) {\n tr.setSelection(TextSelection.near(tr.doc.resolve(sel)));\n }\n tr.scrollIntoView();\n }\n return true;\n }\n const nextType = $to.pos === $from.end() ? grandParent.contentMatchAt(0).defaultType : null;\n const newTypeAttributes = {\n ...getSplittedAttributes(extensionAttributes, grandParent.type.name, grandParent.attrs),\n ...overrideAttrs,\n };\n const newNextTypeAttributes = {\n ...getSplittedAttributes(extensionAttributes, $from.node().type.name, $from.node().attrs),\n ...overrideAttrs,\n };\n tr.delete($from.pos, $to.pos);\n const types = nextType\n ? [\n { type, attrs: newTypeAttributes },\n { type: nextType, attrs: newNextTypeAttributes },\n ]\n : [{ type, attrs: newTypeAttributes }];\n if (!canSplit(tr.doc, $from.pos, 2)) {\n return false;\n }\n if (dispatch) {\n const { selection, storedMarks } = state;\n const { splittableMarks } = editor.extensionManager;\n const marks = storedMarks || (selection.$to.parentOffset && selection.$from.marks());\n tr.split($from.pos, 2, types).scrollIntoView();\n if (!marks || !dispatch) {\n return true;\n }\n const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n }\n return true;\n};\n\nconst joinListBackwards = (tr, listType) => {\n const list = findParentNode(node => node.type === listType)(tr.selection);\n if (!list) {\n return true;\n }\n const before = tr.doc.resolve(Math.max(0, list.pos - 1)).before(list.depth);\n if (before === undefined) {\n return true;\n }\n const nodeBefore = tr.doc.nodeAt(before);\n const canJoinBackwards = list.node.type === (nodeBefore === null || nodeBefore === void 0 ? void 0 : nodeBefore.type) && canJoin(tr.doc, list.pos);\n if (!canJoinBackwards) {\n return true;\n }\n tr.join(list.pos);\n return true;\n};\nconst joinListForwards = (tr, listType) => {\n const list = findParentNode(node => node.type === listType)(tr.selection);\n if (!list) {\n return true;\n }\n const after = tr.doc.resolve(list.start).after(list.depth);\n if (after === undefined) {\n return true;\n }\n const nodeAfter = tr.doc.nodeAt(after);\n const canJoinForwards = list.node.type === (nodeAfter === null || nodeAfter === void 0 ? void 0 : nodeAfter.type) && canJoin(tr.doc, after);\n if (!canJoinForwards) {\n return true;\n }\n tr.join(after);\n return true;\n};\nconst toggleList = (listTypeOrName, itemTypeOrName, keepMarks, attributes = {}) => ({ editor, tr, state, dispatch, chain, commands, can, }) => {\n const { extensions, splittableMarks } = editor.extensionManager;\n const listType = getNodeType(listTypeOrName, state.schema);\n const itemType = getNodeType(itemTypeOrName, state.schema);\n const { selection, storedMarks } = state;\n const { $from, $to } = selection;\n const range = $from.blockRange($to);\n const marks = storedMarks || (selection.$to.parentOffset && selection.$from.marks());\n if (!range) {\n return false;\n }\n const parentList = findParentNode(node => isList(node.type.name, extensions))(selection);\n if (range.depth >= 1 && parentList && range.depth - parentList.depth <= 1) {\n // remove list\n if (parentList.node.type === listType) {\n return commands.liftListItem(itemType);\n }\n // change list type\n if (isList(parentList.node.type.name, extensions)\n && listType.validContent(parentList.node.content)\n && dispatch) {\n return chain()\n .command(() => {\n tr.setNodeMarkup(parentList.pos, listType);\n return true;\n })\n .command(() => joinListBackwards(tr, listType))\n .command(() => joinListForwards(tr, listType))\n .run();\n }\n }\n if (!keepMarks || !marks || !dispatch) {\n return chain()\n // try to convert node to default node if needed\n .command(() => {\n const canWrapInList = can().wrapInList(listType, attributes);\n if (canWrapInList) {\n return true;\n }\n return commands.clearNodes();\n })\n .wrapInList(listType, attributes)\n .command(() => joinListBackwards(tr, listType))\n .command(() => joinListForwards(tr, listType))\n .run();\n }\n return (chain()\n // try to convert node to default node if needed\n .command(() => {\n const canWrapInList = can().wrapInList(listType, attributes);\n const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n if (canWrapInList) {\n return true;\n }\n return commands.clearNodes();\n })\n .wrapInList(listType, attributes)\n .command(() => joinListBackwards(tr, listType))\n .command(() => joinListForwards(tr, listType))\n .run());\n};\n\nconst toggleMark = (typeOrName, attributes = {}, options = {}) => ({ state, commands }) => {\n const { extendEmptyMarkRange = false } = options;\n const type = getMarkType(typeOrName, state.schema);\n const isActive = isMarkActive(state, type, attributes);\n if (isActive) {\n return commands.unsetMark(type, { extendEmptyMarkRange });\n }\n return commands.setMark(type, attributes);\n};\n\nconst toggleNode = (typeOrName, toggleTypeOrName, attributes = {}) => ({ state, commands }) => {\n const type = getNodeType(typeOrName, state.schema);\n const toggleType = getNodeType(toggleTypeOrName, state.schema);\n const isActive = isNodeActive(state, type, attributes);\n if (isActive) {\n return commands.setNode(toggleType);\n }\n return commands.setNode(type, attributes);\n};\n\nconst toggleWrap = (typeOrName, attributes = {}) => ({ state, commands }) => {\n const type = getNodeType(typeOrName, state.schema);\n const isActive = isNodeActive(state, type, attributes);\n if (isActive) {\n return commands.lift(type);\n }\n return commands.wrapIn(type, attributes);\n};\n\nconst undoInputRule = () => ({ state, dispatch }) => {\n const plugins = state.plugins;\n for (let i = 0; i < plugins.length; i += 1) {\n const plugin = plugins[i];\n let undoable;\n // @ts-ignore\n // eslint-disable-next-line\n if (plugin.spec.isInputRules && (undoable = plugin.getState(state))) {\n if (dispatch) {\n const tr = state.tr;\n const toUndo = undoable.transform;\n for (let j = toUndo.steps.length - 1; j >= 0; j -= 1) {\n tr.step(toUndo.steps[j].invert(toUndo.docs[j]));\n }\n if (undoable.text) {\n const marks = tr.doc.resolve(undoable.from).marks();\n tr.replaceWith(undoable.from, undoable.to, state.schema.text(undoable.text, marks));\n }\n else {\n tr.delete(undoable.from, undoable.to);\n }\n }\n return true;\n }\n }\n return false;\n};\n\nconst unsetAllMarks = () => ({ tr, dispatch }) => {\n const { selection } = tr;\n const { empty, ranges } = selection;\n if (empty) {\n return true;\n }\n if (dispatch) {\n ranges.forEach(range => {\n tr.removeMark(range.$from.pos, range.$to.pos);\n });\n }\n return true;\n};\n\nconst unsetMark = (typeOrName, options = {}) => ({ tr, state, dispatch }) => {\n var _a;\n const { extendEmptyMarkRange = false } = options;\n const { selection } = tr;\n const type = getMarkType(typeOrName, state.schema);\n const { $from, empty, ranges } = selection;\n if (!dispatch) {\n return true;\n }\n if (empty && extendEmptyMarkRange) {\n let { from, to } = selection;\n const attrs = (_a = $from.marks().find(mark => mark.type === type)) === null || _a === void 0 ? void 0 : _a.attrs;\n const range = getMarkRange($from, type, attrs);\n if (range) {\n from = range.from;\n to = range.to;\n }\n tr.removeMark(from, to, type);\n }\n else {\n ranges.forEach(range => {\n tr.removeMark(range.$from.pos, range.$to.pos, type);\n });\n }\n tr.removeStoredMark(type);\n return true;\n};\n\nconst updateAttributes = (typeOrName, attributes = {}) => ({ tr, state, dispatch }) => {\n let nodeType = null;\n let markType = null;\n const schemaType = getSchemaTypeNameByName(typeof typeOrName === 'string' ? typeOrName : typeOrName.name, state.schema);\n if (!schemaType) {\n return false;\n }\n if (schemaType === 'node') {\n nodeType = getNodeType(typeOrName, state.schema);\n }\n if (schemaType === 'mark') {\n markType = getMarkType(typeOrName, state.schema);\n }\n if (dispatch) {\n tr.selection.ranges.forEach(range => {\n const from = range.$from.pos;\n const to = range.$to.pos;\n state.doc.nodesBetween(from, to, (node, pos) => {\n if (nodeType && nodeType === node.type) {\n tr.setNodeMarkup(pos, undefined, {\n ...node.attrs,\n ...attributes,\n });\n }\n if (markType && node.marks.length) {\n node.marks.forEach(mark => {\n if (markType === mark.type) {\n const trimmedFrom = Math.max(pos, from);\n const trimmedTo = Math.min(pos + node.nodeSize, to);\n tr.addMark(trimmedFrom, trimmedTo, markType.create({\n ...mark.attrs,\n ...attributes,\n }));\n }\n });\n }\n });\n });\n }\n return true;\n};\n\nconst wrapIn = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return wrapIn$1(type, attributes)(state, dispatch);\n};\n\nconst wrapInList = (typeOrName, attributes = {}) => ({ state, dispatch }) => {\n const type = getNodeType(typeOrName, state.schema);\n return wrapInList$1(type, attributes)(state, dispatch);\n};\n\nvar commands = /*#__PURE__*/Object.freeze({\n __proto__: null,\n blur: blur,\n clearContent: clearContent,\n clearNodes: clearNodes,\n command: command,\n createParagraphNear: createParagraphNear,\n cut: cut,\n deleteCurrentNode: deleteCurrentNode,\n deleteNode: deleteNode,\n deleteRange: deleteRange,\n deleteSelection: deleteSelection,\n enter: enter,\n exitCode: exitCode,\n extendMarkRange: extendMarkRange,\n first: first,\n focus: focus,\n forEach: forEach,\n insertContent: insertContent,\n insertContentAt: insertContentAt,\n joinBackward: joinBackward,\n joinDown: joinDown,\n joinForward: joinForward,\n joinItemBackward: joinItemBackward,\n joinItemForward: joinItemForward,\n joinTextblockBackward: joinTextblockBackward,\n joinTextblockForward: joinTextblockForward,\n joinUp: joinUp,\n keyboardShortcut: keyboardShortcut,\n lift: lift,\n liftEmptyBlock: liftEmptyBlock,\n liftListItem: liftListItem,\n newlineInCode: newlineInCode,\n resetAttributes: resetAttributes,\n scrollIntoView: scrollIntoView,\n selectAll: selectAll,\n selectNodeBackward: selectNodeBackward,\n selectNodeForward: selectNodeForward,\n selectParentNode: selectParentNode,\n selectTextblockEnd: selectTextblockEnd,\n selectTextblockStart: selectTextblockStart,\n setContent: setContent,\n setMark: setMark,\n setMeta: setMeta,\n setNode: setNode,\n setNodeSelection: setNodeSelection,\n setTextSelection: setTextSelection,\n sinkListItem: sinkListItem,\n splitBlock: splitBlock,\n splitListItem: splitListItem,\n toggleList: toggleList,\n toggleMark: toggleMark,\n toggleNode: toggleNode,\n toggleWrap: toggleWrap,\n undoInputRule: undoInputRule,\n unsetAllMarks: unsetAllMarks,\n unsetMark: unsetMark,\n updateAttributes: updateAttributes,\n wrapIn: wrapIn,\n wrapInList: wrapInList\n});\n\nconst Commands = Extension.create({\n name: 'commands',\n addCommands() {\n return {\n ...commands,\n };\n },\n});\n\nconst Editable = Extension.create({\n name: 'editable',\n addProseMirrorPlugins() {\n return [\n new Plugin({\n key: new PluginKey('editable'),\n props: {\n editable: () => this.editor.options.editable,\n },\n }),\n ];\n },\n});\n\nconst FocusEvents = Extension.create({\n name: 'focusEvents',\n addProseMirrorPlugins() {\n const { editor } = this;\n return [\n new Plugin({\n key: new PluginKey('focusEvents'),\n props: {\n handleDOMEvents: {\n focus: (view, event) => {\n editor.isFocused = true;\n const transaction = editor.state.tr\n .setMeta('focus', { event })\n .setMeta('addToHistory', false);\n view.dispatch(transaction);\n return false;\n },\n blur: (view, event) => {\n editor.isFocused = false;\n const transaction = editor.state.tr\n .setMeta('blur', { event })\n .setMeta('addToHistory', false);\n view.dispatch(transaction);\n return false;\n },\n },\n },\n }),\n ];\n },\n});\n\nconst Keymap = Extension.create({\n name: 'keymap',\n addKeyboardShortcuts() {\n const handleBackspace = () => this.editor.commands.first(({ commands }) => [\n () => commands.undoInputRule(),\n // maybe convert first text block node to default node\n () => commands.command(({ tr }) => {\n const { selection, doc } = tr;\n const { empty, $anchor } = selection;\n const { pos, parent } = $anchor;\n const $parentPos = $anchor.parent.isTextblock && pos > 0 ? tr.doc.resolve(pos - 1) : $anchor;\n const parentIsIsolating = $parentPos.parent.type.spec.isolating;\n const parentPos = $anchor.pos - $anchor.parentOffset;\n const isAtStart = (parentIsIsolating && $parentPos.parent.childCount === 1)\n ? parentPos === $anchor.pos\n : Selection.atStart(doc).from === pos;\n if (!empty\n || !parent.type.isTextblock\n || parent.textContent.length\n || !isAtStart\n || (isAtStart && $anchor.parent.type.name === 'paragraph') // prevent clearNodes when no nodes to clear, otherwise history stack is appended\n ) {\n return false;\n }\n return commands.clearNodes();\n }),\n () => commands.deleteSelection(),\n () => commands.joinBackward(),\n () => commands.selectNodeBackward(),\n ]);\n const handleDelete = () => this.editor.commands.first(({ commands }) => [\n () => commands.deleteSelection(),\n () => commands.deleteCurrentNode(),\n () => commands.joinForward(),\n () => commands.selectNodeForward(),\n ]);\n const handleEnter = () => this.editor.commands.first(({ commands }) => [\n () => commands.newlineInCode(),\n () => commands.createParagraphNear(),\n () => commands.liftEmptyBlock(),\n () => commands.splitBlock(),\n ]);\n const baseKeymap = {\n Enter: handleEnter,\n 'Mod-Enter': () => this.editor.commands.exitCode(),\n Backspace: handleBackspace,\n 'Mod-Backspace': handleBackspace,\n 'Shift-Backspace': handleBackspace,\n Delete: handleDelete,\n 'Mod-Delete': handleDelete,\n 'Mod-a': () => this.editor.commands.selectAll(),\n };\n const pcKeymap = {\n ...baseKeymap,\n };\n const macKeymap = {\n ...baseKeymap,\n 'Ctrl-h': handleBackspace,\n 'Alt-Backspace': handleBackspace,\n 'Ctrl-d': handleDelete,\n 'Ctrl-Alt-Backspace': handleDelete,\n 'Alt-Delete': handleDelete,\n 'Alt-d': handleDelete,\n 'Ctrl-a': () => this.editor.commands.selectTextblockStart(),\n 'Ctrl-e': () => this.editor.commands.selectTextblockEnd(),\n };\n if (isiOS() || isMacOS()) {\n return macKeymap;\n }\n return pcKeymap;\n },\n addProseMirrorPlugins() {\n return [\n // With this plugin we check if the whole document was selected and deleted.\n // In this case we will additionally call `clearNodes()` to convert e.g. a heading\n // to a paragraph if necessary.\n // This is an alternative to ProseMirror's `AllSelection`, which doesn’t work well\n // with many other commands.\n new Plugin({\n key: new PluginKey('clearDocument'),\n appendTransaction: (transactions, oldState, newState) => {\n const docChanges = transactions.some(transaction => transaction.docChanged)\n && !oldState.doc.eq(newState.doc);\n if (!docChanges) {\n return;\n }\n const { empty, from, to } = oldState.selection;\n const allFrom = Selection.atStart(oldState.doc).from;\n const allEnd = Selection.atEnd(oldState.doc).to;\n const allWasSelected = from === allFrom && to === allEnd;\n if (empty || !allWasSelected) {\n return;\n }\n const isEmpty = newState.doc.textBetween(0, newState.doc.content.size, ' ', ' ').length === 0;\n if (!isEmpty) {\n return;\n }\n const tr = newState.tr;\n const state = createChainableState({\n state: newState,\n transaction: tr,\n });\n const { commands } = new CommandManager({\n editor: this.editor,\n state,\n });\n commands.clearNodes();\n if (!tr.steps.length) {\n return;\n }\n return tr;\n },\n }),\n ];\n },\n});\n\nconst Tabindex = Extension.create({\n name: 'tabindex',\n addProseMirrorPlugins() {\n return [\n new Plugin({\n key: new PluginKey('tabindex'),\n props: {\n attributes: () => (this.editor.isEditable ? { tabindex: '0' } : {}),\n },\n }),\n ];\n },\n});\n\nvar index = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ClipboardTextSerializer: ClipboardTextSerializer,\n Commands: Commands,\n Editable: Editable,\n FocusEvents: FocusEvents,\n Keymap: Keymap,\n Tabindex: Tabindex\n});\n\nclass NodePos {\n get name() {\n return this.node.type.name;\n }\n constructor(pos, editor, isBlock = false, node = null) {\n this.currentNode = null;\n this.actualDepth = null;\n this.isBlock = isBlock;\n this.resolvedPos = pos;\n this.editor = editor;\n this.currentNode = node;\n }\n get node() {\n return this.currentNode || this.resolvedPos.node();\n }\n get element() {\n return this.editor.view.domAtPos(this.pos).node;\n }\n get depth() {\n var _a;\n return (_a = this.actualDepth) !== null && _a !== void 0 ? _a : this.resolvedPos.depth;\n }\n get pos() {\n return this.resolvedPos.pos;\n }\n get content() {\n return this.node.content;\n }\n set content(content) {\n let from = this.from;\n let to = this.to;\n if (this.isBlock) {\n if (this.content.size === 0) {\n console.error(`You can’t set content on a block node. Tried to set content on ${this.name} at ${this.pos}`);\n return;\n }\n from = this.from + 1;\n to = this.to - 1;\n }\n this.editor.commands.insertContentAt({ from, to }, content);\n }\n get attributes() {\n return this.node.attrs;\n }\n get textContent() {\n return this.node.textContent;\n }\n get size() {\n return this.node.nodeSize;\n }\n get from() {\n if (this.isBlock) {\n return this.pos;\n }\n return this.resolvedPos.start(this.resolvedPos.depth);\n }\n get range() {\n return {\n from: this.from,\n to: this.to,\n };\n }\n get to() {\n if (this.isBlock) {\n return this.pos + this.size;\n }\n return this.resolvedPos.end(this.resolvedPos.depth) + (this.node.isText ? 0 : 1);\n }\n get parent() {\n if (this.depth === 0) {\n return null;\n }\n const parentPos = this.resolvedPos.start(this.resolvedPos.depth - 1);\n const $pos = this.resolvedPos.doc.resolve(parentPos);\n return new NodePos($pos, this.editor);\n }\n get before() {\n let $pos = this.resolvedPos.doc.resolve(this.from - (this.isBlock ? 1 : 2));\n if ($pos.depth !== this.depth) {\n $pos = this.resolvedPos.doc.resolve(this.from - 3);\n }\n return new NodePos($pos, this.editor);\n }\n get after() {\n let $pos = this.resolvedPos.doc.resolve(this.to + (this.isBlock ? 2 : 1));\n if ($pos.depth !== this.depth) {\n $pos = this.resolvedPos.doc.resolve(this.to + 3);\n }\n return new NodePos($pos, this.editor);\n }\n get children() {\n const children = [];\n this.node.content.forEach((node, offset) => {\n const isBlock = node.isBlock && !node.isTextblock;\n const targetPos = this.pos + offset + 1;\n const $pos = this.resolvedPos.doc.resolve(targetPos);\n if (!isBlock && $pos.depth <= this.depth) {\n return;\n }\n const childNodePos = new NodePos($pos, this.editor, isBlock, isBlock ? node : null);\n if (isBlock) {\n childNodePos.actualDepth = this.depth + 1;\n }\n children.push(new NodePos($pos, this.editor, isBlock, isBlock ? node : null));\n });\n return children;\n }\n get firstChild() {\n return this.children[0] || null;\n }\n get lastChild() {\n const children = this.children;\n return children[children.length - 1] || null;\n }\n closest(selector, attributes = {}) {\n let node = null;\n let currentNode = this.parent;\n while (currentNode && !node) {\n if (currentNode.node.type.name === selector) {\n if (Object.keys(attributes).length > 0) {\n const nodeAttributes = currentNode.node.attrs;\n const attrKeys = Object.keys(attributes);\n for (let index = 0; index < attrKeys.length; index += 1) {\n const key = attrKeys[index];\n if (nodeAttributes[key] !== attributes[key]) {\n break;\n }\n }\n }\n else {\n node = currentNode;\n }\n }\n currentNode = currentNode.parent;\n }\n return node;\n }\n querySelector(selector, attributes = {}) {\n return this.querySelectorAll(selector, attributes, true)[0] || null;\n }\n querySelectorAll(selector, attributes = {}, firstItemOnly = false) {\n let nodes = [];\n if (!this.children || this.children.length === 0) {\n return nodes;\n }\n const attrKeys = Object.keys(attributes);\n /**\n * Finds all children recursively that match the selector and attributes\n * If firstItemOnly is true, it will return the first item found\n */\n this.children.forEach(childPos => {\n // If we already found a node and we only want the first item, we dont need to keep going\n if (firstItemOnly && nodes.length > 0) {\n return;\n }\n if (childPos.node.type.name === selector) {\n const doesAllAttributesMatch = attrKeys.every(key => attributes[key] === childPos.node.attrs[key]);\n if (doesAllAttributesMatch) {\n nodes.push(childPos);\n }\n }\n // If we already found a node and we only want the first item, we can stop here and skip the recursion\n if (firstItemOnly && nodes.length > 0) {\n return;\n }\n nodes = nodes.concat(childPos.querySelectorAll(selector, attributes, firstItemOnly));\n });\n return nodes;\n }\n setAttribute(attributes) {\n const oldSelection = this.editor.state.selection;\n this.editor.chain().setTextSelection(this.from).updateAttributes(this.node.type.name, attributes).setTextSelection(oldSelection.from)\n .run();\n }\n}\n\nconst style = `.ProseMirror {\n position: relative;\n}\n\n.ProseMirror {\n word-wrap: break-word;\n white-space: pre-wrap;\n white-space: break-spaces;\n -webkit-font-variant-ligatures: none;\n font-variant-ligatures: none;\n font-feature-settings: \"liga\" 0; /* the above doesn't seem to work in Edge */\n}\n\n.ProseMirror [contenteditable=\"false\"] {\n white-space: normal;\n}\n\n.ProseMirror [contenteditable=\"false\"] [contenteditable=\"true\"] {\n white-space: pre-wrap;\n}\n\n.ProseMirror pre {\n white-space: pre-wrap;\n}\n\nimg.ProseMirror-separator {\n display: inline !important;\n border: none !important;\n margin: 0 !important;\n width: 0 !important;\n height: 0 !important;\n}\n\n.ProseMirror-gapcursor {\n display: none;\n pointer-events: none;\n position: absolute;\n margin: 0;\n}\n\n.ProseMirror-gapcursor:after {\n content: \"\";\n display: block;\n position: absolute;\n top: -2px;\n width: 20px;\n border-top: 1px solid black;\n animation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;\n}\n\n@keyframes ProseMirror-cursor-blink {\n to {\n visibility: hidden;\n }\n}\n\n.ProseMirror-hideselection *::selection {\n background: transparent;\n}\n\n.ProseMirror-hideselection *::-moz-selection {\n background: transparent;\n}\n\n.ProseMirror-hideselection * {\n caret-color: transparent;\n}\n\n.ProseMirror-focused .ProseMirror-gapcursor {\n display: block;\n}\n\n.tippy-box[data-animation=fade][data-state=hidden] {\n opacity: 0\n}`;\n\nfunction createStyleTag(style, nonce, suffix) {\n const tiptapStyleTag = document.querySelector(`style[data-tiptap-style${suffix ? `-${suffix}` : ''}]`);\n if (tiptapStyleTag !== null) {\n return tiptapStyleTag;\n }\n const styleNode = document.createElement('style');\n if (nonce) {\n styleNode.setAttribute('nonce', nonce);\n }\n styleNode.setAttribute(`data-tiptap-style${suffix ? `-${suffix}` : ''}`, '');\n styleNode.innerHTML = style;\n document.getElementsByTagName('head')[0].appendChild(styleNode);\n return styleNode;\n}\n\nclass Editor extends EventEmitter {\n constructor(options = {}) {\n super();\n this.isFocused = false;\n /**\n * The editor is considered initialized after the `create` event has been emitted.\n */\n this.isInitialized = false;\n this.extensionStorage = {};\n this.options = {\n element: document.createElement('div'),\n content: '',\n injectCSS: true,\n injectNonce: undefined,\n extensions: [],\n autofocus: false,\n editable: true,\n editorProps: {},\n parseOptions: {},\n coreExtensionOptions: {},\n enableInputRules: true,\n enablePasteRules: true,\n enableCoreExtensions: true,\n enableContentCheck: false,\n onBeforeCreate: () => null,\n onCreate: () => null,\n onUpdate: () => null,\n onSelectionUpdate: () => null,\n onTransaction: () => null,\n onFocus: () => null,\n onBlur: () => null,\n onDestroy: () => null,\n onContentError: ({ error }) => { throw error; },\n };\n this.isCapturingTransaction = false;\n this.capturedTransaction = null;\n this.setOptions(options);\n this.createExtensionManager();\n this.createCommandManager();\n this.createSchema();\n this.on('beforeCreate', this.options.onBeforeCreate);\n this.emit('beforeCreate', { editor: this });\n this.on('contentError', this.options.onContentError);\n this.createView();\n this.injectCSS();\n this.on('create', this.options.onCreate);\n this.on('update', this.options.onUpdate);\n this.on('selectionUpdate', this.options.onSelectionUpdate);\n this.on('transaction', this.options.onTransaction);\n this.on('focus', this.options.onFocus);\n this.on('blur', this.options.onBlur);\n this.on('destroy', this.options.onDestroy);\n window.setTimeout(() => {\n if (this.isDestroyed) {\n return;\n }\n this.commands.focus(this.options.autofocus);\n this.emit('create', { editor: this });\n this.isInitialized = true;\n }, 0);\n }\n /**\n * Returns the editor storage.\n */\n get storage() {\n return this.extensionStorage;\n }\n /**\n * An object of all registered commands.\n */\n get commands() {\n return this.commandManager.commands;\n }\n /**\n * Create a command chain to call multiple commands at once.\n */\n chain() {\n return this.commandManager.chain();\n }\n /**\n * Check if a command or a command chain can be executed. Without executing it.\n */\n can() {\n return this.commandManager.can();\n }\n /**\n * Inject CSS styles.\n */\n injectCSS() {\n if (this.options.injectCSS && document) {\n this.css = createStyleTag(style, this.options.injectNonce);\n }\n }\n /**\n * Update editor options.\n *\n * @param options A list of options\n */\n setOptions(options = {}) {\n this.options = {\n ...this.options,\n ...options,\n };\n if (!this.view || !this.state || this.isDestroyed) {\n return;\n }\n if (this.options.editorProps) {\n this.view.setProps(this.options.editorProps);\n }\n this.view.updateState(this.state);\n }\n /**\n * Update editable state of the editor.\n */\n setEditable(editable, emitUpdate = true) {\n this.setOptions({ editable });\n if (emitUpdate) {\n this.emit('update', { editor: this, transaction: this.state.tr });\n }\n }\n /**\n * Returns whether the editor is editable.\n */\n get isEditable() {\n // since plugins are applied after creating the view\n // `editable` is always `true` for one tick.\n // that’s why we also have to check for `options.editable`\n return this.options.editable && this.view && this.view.editable;\n }\n /**\n * Returns the editor state.\n */\n get state() {\n return this.view.state;\n }\n /**\n * Register a ProseMirror plugin.\n *\n * @param plugin A ProseMirror plugin\n * @param handlePlugins Control how to merge the plugin into the existing plugins.\n */\n registerPlugin(plugin, handlePlugins) {\n const plugins = isFunction(handlePlugins)\n ? handlePlugins(plugin, [...this.state.plugins])\n : [...this.state.plugins, plugin];\n const state = this.state.reconfigure({ plugins });\n this.view.updateState(state);\n }\n /**\n * Unregister a ProseMirror plugin.\n *\n * @param nameOrPluginKey The plugins name\n */\n unregisterPlugin(nameOrPluginKey) {\n if (this.isDestroyed) {\n return;\n }\n // @ts-ignore\n const name = typeof nameOrPluginKey === 'string' ? `${nameOrPluginKey}$` : nameOrPluginKey.key;\n const state = this.state.reconfigure({\n // @ts-ignore\n plugins: this.state.plugins.filter(plugin => !plugin.key.startsWith(name)),\n });\n this.view.updateState(state);\n }\n /**\n * Creates an extension manager.\n */\n createExtensionManager() {\n var _a, _b;\n const coreExtensions = this.options.enableCoreExtensions ? [\n Editable,\n ClipboardTextSerializer.configure({\n blockSeparator: (_b = (_a = this.options.coreExtensionOptions) === null || _a === void 0 ? void 0 : _a.clipboardTextSerializer) === null || _b === void 0 ? void 0 : _b.blockSeparator,\n }),\n Commands,\n FocusEvents,\n Keymap,\n Tabindex,\n ] : [];\n const allExtensions = [...coreExtensions, ...this.options.extensions].filter(extension => {\n return ['extension', 'node', 'mark'].includes(extension === null || extension === void 0 ? void 0 : extension.type);\n });\n this.extensionManager = new ExtensionManager(allExtensions, this);\n }\n /**\n * Creates an command manager.\n */\n createCommandManager() {\n this.commandManager = new CommandManager({\n editor: this,\n });\n }\n /**\n * Creates a ProseMirror schema.\n */\n createSchema() {\n this.schema = this.extensionManager.schema;\n }\n /**\n * Creates a ProseMirror view.\n */\n createView() {\n let doc;\n try {\n doc = createDocument(this.options.content, this.schema, this.options.parseOptions, { errorOnInvalidContent: this.options.enableContentCheck });\n }\n catch (e) {\n if (!(e instanceof Error) || !['[tiptap error]: Invalid JSON content', '[tiptap error]: Invalid HTML content'].includes(e.message)) {\n // Not the content error we were expecting\n throw e;\n }\n this.emit('contentError', {\n editor: this,\n error: e,\n disableCollaboration: () => {\n // To avoid syncing back invalid content, reinitialize the extensions without the collaboration extension\n this.options.extensions = this.options.extensions.filter(extension => extension.name !== 'collaboration');\n // Restart the initialization process by recreating the extension manager with the new set of extensions\n this.createExtensionManager();\n },\n });\n // Content is invalid, but attempt to create it anyway, stripping out the invalid parts\n doc = createDocument(this.options.content, this.schema, this.options.parseOptions, { errorOnInvalidContent: false });\n }\n const selection = resolveFocusPosition(doc, this.options.autofocus);\n this.view = new EditorView(this.options.element, {\n ...this.options.editorProps,\n dispatchTransaction: this.dispatchTransaction.bind(this),\n state: EditorState.create({\n doc,\n selection: selection || undefined,\n }),\n });\n // `editor.view` is not yet available at this time.\n // Therefore we will add all plugins and node views directly afterwards.\n const newState = this.state.reconfigure({\n plugins: this.extensionManager.plugins,\n });\n this.view.updateState(newState);\n this.createNodeViews();\n this.prependClass();\n // Let’s store the editor instance in the DOM element.\n // So we’ll have access to it for tests.\n // @ts-ignore\n const dom = this.view.dom;\n dom.editor = this;\n }\n /**\n * Creates all node views.\n */\n createNodeViews() {\n if (this.view.isDestroyed) {\n return;\n }\n this.view.setProps({\n nodeViews: this.extensionManager.nodeViews,\n });\n }\n /**\n * Prepend class name to element.\n */\n prependClass() {\n this.view.dom.className = `tiptap ${this.view.dom.className}`;\n }\n captureTransaction(fn) {\n this.isCapturingTransaction = true;\n fn();\n this.isCapturingTransaction = false;\n const tr = this.capturedTransaction;\n this.capturedTransaction = null;\n return tr;\n }\n /**\n * The callback over which to send transactions (state updates) produced by the view.\n *\n * @param transaction An editor state transaction\n */\n dispatchTransaction(transaction) {\n // if the editor / the view of the editor was destroyed\n // the transaction should not be dispatched as there is no view anymore.\n if (this.view.isDestroyed) {\n return;\n }\n if (this.isCapturingTransaction) {\n if (!this.capturedTransaction) {\n this.capturedTransaction = transaction;\n return;\n }\n transaction.steps.forEach(step => { var _a; return (_a = this.capturedTransaction) === null || _a === void 0 ? void 0 : _a.step(step); });\n return;\n }\n const state = this.state.apply(transaction);\n const selectionHasChanged = !this.state.selection.eq(state.selection);\n this.emit('beforeTransaction', {\n editor: this,\n transaction,\n nextState: state,\n });\n this.view.updateState(state);\n this.emit('transaction', {\n editor: this,\n transaction,\n });\n if (selectionHasChanged) {\n this.emit('selectionUpdate', {\n editor: this,\n transaction,\n });\n }\n const focus = transaction.getMeta('focus');\n const blur = transaction.getMeta('blur');\n if (focus) {\n this.emit('focus', {\n editor: this,\n event: focus.event,\n transaction,\n });\n }\n if (blur) {\n this.emit('blur', {\n editor: this,\n event: blur.event,\n transaction,\n });\n }\n if (!transaction.docChanged || transaction.getMeta('preventUpdate')) {\n return;\n }\n this.emit('update', {\n editor: this,\n transaction,\n });\n }\n /**\n * Get attributes of the currently selected node or mark.\n */\n getAttributes(nameOrType) {\n return getAttributes(this.state, nameOrType);\n }\n isActive(nameOrAttributes, attributesOrUndefined) {\n const name = typeof nameOrAttributes === 'string' ? nameOrAttributes : null;\n const attributes = typeof nameOrAttributes === 'string' ? attributesOrUndefined : nameOrAttributes;\n return isActive(this.state, name, attributes);\n }\n /**\n * Get the document as JSON.\n */\n getJSON() {\n return this.state.doc.toJSON();\n }\n /**\n * Get the document as HTML.\n */\n getHTML() {\n return getHTMLFromFragment(this.state.doc.content, this.schema);\n }\n /**\n * Get the document as text.\n */\n getText(options) {\n const { blockSeparator = '\\n\\n', textSerializers = {} } = options || {};\n return getText(this.state.doc, {\n blockSeparator,\n textSerializers: {\n ...getTextSerializersFromSchema(this.schema),\n ...textSerializers,\n },\n });\n }\n /**\n * Check if there is no content.\n */\n get isEmpty() {\n return isNodeEmpty(this.state.doc);\n }\n /**\n * Get the number of characters for the current document.\n *\n * @deprecated\n */\n getCharacterCount() {\n console.warn('[tiptap warn]: \"editor.getCharacterCount()\" is deprecated. Please use \"editor.storage.characterCount.characters()\" instead.');\n return this.state.doc.content.size - 2;\n }\n /**\n * Destroy the editor.\n */\n destroy() {\n this.emit('destroy');\n if (this.view) {\n this.view.destroy();\n }\n this.removeAllListeners();\n }\n /**\n * Check if the editor is already destroyed.\n */\n get isDestroyed() {\n var _a;\n // @ts-ignore\n return !((_a = this.view) === null || _a === void 0 ? void 0 : _a.docView);\n }\n $node(selector, attributes) {\n var _a;\n return ((_a = this.$doc) === null || _a === void 0 ? void 0 : _a.querySelector(selector, attributes)) || null;\n }\n $nodes(selector, attributes) {\n var _a;\n return ((_a = this.$doc) === null || _a === void 0 ? void 0 : _a.querySelectorAll(selector, attributes)) || null;\n }\n $pos(pos) {\n const $pos = this.state.doc.resolve(pos);\n return new NodePos($pos, this);\n }\n get $doc() {\n return this.$pos(0);\n }\n}\n\n/**\n * Build an input rule that adds a mark when the\n * matched text is typed into it.\n * @see https://tiptap.dev/guide/custom-extensions/#input-rules\n */\nfunction markInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n const attributes = callOrReturn(config.getAttributes, undefined, match);\n if (attributes === false || attributes === null) {\n return null;\n }\n const { tr } = state;\n const captureGroup = match[match.length - 1];\n const fullMatch = match[0];\n if (captureGroup) {\n const startSpaces = fullMatch.search(/\\S/);\n const textStart = range.from + fullMatch.indexOf(captureGroup);\n const textEnd = textStart + captureGroup.length;\n const excludedMarks = getMarksBetween(range.from, range.to, state.doc)\n .filter(item => {\n // @ts-ignore\n const excluded = item.mark.type.excluded;\n return excluded.find(type => type === config.type && type !== item.mark.type);\n })\n .filter(item => item.to > textStart);\n if (excludedMarks.length) {\n return null;\n }\n if (textEnd < range.to) {\n tr.delete(textEnd, range.to);\n }\n if (textStart > range.from) {\n tr.delete(range.from + startSpaces, textStart);\n }\n const markEnd = range.from + startSpaces + captureGroup.length;\n tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));\n tr.removeStoredMark(config.type);\n }\n },\n });\n}\n\n/**\n * Build an input rule that adds a node when the\n * matched text is typed into it.\n * @see https://tiptap.dev/guide/custom-extensions/#input-rules\n */\nfunction nodeInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n const attributes = callOrReturn(config.getAttributes, undefined, match) || {};\n const { tr } = state;\n const start = range.from;\n let end = range.to;\n const newNode = config.type.create(attributes);\n if (match[1]) {\n const offset = match[0].lastIndexOf(match[1]);\n let matchStart = start + offset;\n if (matchStart > end) {\n matchStart = end;\n }\n else {\n end = matchStart + match[1].length;\n }\n // insert last typed character\n const lastChar = match[0][match[0].length - 1];\n tr.insertText(lastChar, start + match[0].length - 1);\n // insert node from input rule\n tr.replaceWith(matchStart, end, newNode);\n }\n else if (match[0]) {\n const insertionStart = config.type.isInline ? start : start - 1;\n tr.insert(insertionStart, config.type.create(attributes)).delete(tr.mapping.map(start), tr.mapping.map(end));\n }\n tr.scrollIntoView();\n },\n });\n}\n\n/**\n * Build an input rule that changes the type of a textblock when the\n * matched text is typed into it. When using a regular expresion you’ll\n * probably want the regexp to start with `^`, so that the pattern can\n * only occur at the start of a textblock.\n * @see https://tiptap.dev/guide/custom-extensions/#input-rules\n */\nfunction textblockTypeInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n const $start = state.doc.resolve(range.from);\n const attributes = callOrReturn(config.getAttributes, undefined, match) || {};\n if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), config.type)) {\n return null;\n }\n state.tr\n .delete(range.from, range.to)\n .setBlockType(range.from, range.from, config.type, attributes);\n },\n });\n}\n\n/**\n * Build an input rule that replaces text when the\n * matched text is typed into it.\n * @see https://tiptap.dev/guide/custom-extensions/#input-rules\n */\nfunction textInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n let insert = config.replace;\n let start = range.from;\n const end = range.to;\n if (match[1]) {\n const offset = match[0].lastIndexOf(match[1]);\n insert += match[0].slice(offset + match[1].length);\n start += offset;\n const cutOff = start - end;\n if (cutOff > 0) {\n insert = match[0].slice(offset - cutOff, offset) + insert;\n start = end;\n }\n }\n state.tr.insertText(insert, start, end);\n },\n });\n}\n\n/**\n * Build an input rule for automatically wrapping a textblock when a\n * given string is typed. When using a regular expresion you’ll\n * probably want the regexp to start with `^`, so that the pattern can\n * only occur at the start of a textblock.\n *\n * `type` is the type of node to wrap in.\n *\n * By default, if there’s a node with the same type above the newly\n * wrapped node, the rule will try to join those\n * two nodes. You can pass a join predicate, which takes a regular\n * expression match and the node before the wrapped node, and can\n * return a boolean to indicate whether a join should happen.\n * @see https://tiptap.dev/guide/custom-extensions/#input-rules\n */\nfunction wrappingInputRule(config) {\n return new InputRule({\n find: config.find,\n handler: ({ state, range, match, chain, }) => {\n const attributes = callOrReturn(config.getAttributes, undefined, match) || {};\n const tr = state.tr.delete(range.from, range.to);\n const $start = tr.doc.resolve(range.from);\n const blockRange = $start.blockRange();\n const wrapping = blockRange && findWrapping(blockRange, config.type, attributes);\n if (!wrapping) {\n return null;\n }\n tr.wrap(blockRange, wrapping);\n if (config.keepMarks && config.editor) {\n const { selection, storedMarks } = state;\n const { splittableMarks } = config.editor.extensionManager;\n const marks = storedMarks || (selection.$to.parentOffset && selection.$from.marks());\n if (marks) {\n const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n }\n }\n if (config.keepAttributes) {\n /** If the nodeType is `bulletList` or `orderedList` set the `nodeType` as `listItem` */\n const nodeType = config.type.name === 'bulletList' || config.type.name === 'orderedList' ? 'listItem' : 'taskList';\n chain().updateAttributes(nodeType, attributes).run();\n }\n const before = tr.doc.resolve(range.from - 1).nodeBefore;\n if (before\n && before.type === config.type\n && canJoin(tr.doc, range.from - 1)\n && (!config.joinPredicate || config.joinPredicate(match, before))) {\n tr.join(range.from - 1);\n }\n },\n });\n}\n\n/**\n * The Mark class is used to create custom mark extensions.\n * @see https://tiptap.dev/api/extensions#create-a-new-extension\n */\nclass Mark {\n constructor(config = {}) {\n this.type = 'mark';\n this.name = 'mark';\n this.parent = null;\n this.child = null;\n this.config = {\n name: this.name,\n defaultOptions: {},\n };\n this.config = {\n ...this.config,\n ...config,\n };\n this.name = this.config.name;\n if (config.defaultOptions && Object.keys(config.defaultOptions).length > 0) {\n console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${this.name}\".`);\n }\n // TODO: remove `addOptions` fallback\n this.options = this.config.defaultOptions;\n if (this.config.addOptions) {\n this.options = callOrReturn(getExtensionField(this, 'addOptions', {\n name: this.name,\n }));\n }\n this.storage = callOrReturn(getExtensionField(this, 'addStorage', {\n name: this.name,\n options: this.options,\n })) || {};\n }\n static create(config = {}) {\n return new Mark(config);\n }\n configure(options = {}) {\n // return a new instance so we can use the same extension\n // with different calls of `configure`\n const extension = this.extend({\n ...this.config,\n addOptions: () => {\n return mergeDeep(this.options, options);\n },\n });\n // Always preserve the current name\n extension.name = this.name;\n // Set the parent to be our parent\n extension.parent = this.parent;\n return extension;\n }\n extend(extendedConfig = {}) {\n const extension = new Mark(extendedConfig);\n extension.parent = this;\n this.child = extension;\n extension.name = extendedConfig.name ? extendedConfig.name : extension.parent.name;\n if (extendedConfig.defaultOptions && Object.keys(extendedConfig.defaultOptions).length > 0) {\n console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${extension.name}\".`);\n }\n extension.options = callOrReturn(getExtensionField(extension, 'addOptions', {\n name: extension.name,\n }));\n extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', {\n name: extension.name,\n options: extension.options,\n }));\n return extension;\n }\n static handleExit({ editor, mark }) {\n const { tr } = editor.state;\n const currentPos = editor.state.selection.$from;\n const isAtEnd = currentPos.pos === currentPos.end();\n if (isAtEnd) {\n const currentMarks = currentPos.marks();\n const isInMark = !!currentMarks.find(m => (m === null || m === void 0 ? void 0 : m.type.name) === mark.name);\n if (!isInMark) {\n return false;\n }\n const removeMark = currentMarks.find(m => (m === null || m === void 0 ? void 0 : m.type.name) === mark.name);\n if (removeMark) {\n tr.removeStoredMark(removeMark);\n }\n tr.insertText(' ', currentPos.pos);\n editor.view.dispatch(tr);\n return true;\n }\n return false;\n }\n}\n\n/**\n * The Node class is used to create custom node extensions.\n * @see https://tiptap.dev/api/extensions#create-a-new-extension\n */\nclass Node {\n constructor(config = {}) {\n this.type = 'node';\n this.name = 'node';\n this.parent = null;\n this.child = null;\n this.config = {\n name: this.name,\n defaultOptions: {},\n };\n this.config = {\n ...this.config,\n ...config,\n };\n this.name = this.config.name;\n if (config.defaultOptions && Object.keys(config.defaultOptions).length > 0) {\n console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${this.name}\".`);\n }\n // TODO: remove `addOptions` fallback\n this.options = this.config.defaultOptions;\n if (this.config.addOptions) {\n this.options = callOrReturn(getExtensionField(this, 'addOptions', {\n name: this.name,\n }));\n }\n this.storage = callOrReturn(getExtensionField(this, 'addStorage', {\n name: this.name,\n options: this.options,\n })) || {};\n }\n static create(config = {}) {\n return new Node(config);\n }\n configure(options = {}) {\n // return a new instance so we can use the same extension\n // with different calls of `configure`\n const extension = this.extend({\n ...this.config,\n addOptions: () => {\n return mergeDeep(this.options, options);\n },\n });\n // Always preserve the current name\n extension.name = this.name;\n // Set the parent to be our parent\n extension.parent = this.parent;\n return extension;\n }\n extend(extendedConfig = {}) {\n const extension = new Node(extendedConfig);\n extension.parent = this;\n this.child = extension;\n extension.name = extendedConfig.name ? extendedConfig.name : extension.parent.name;\n if (extendedConfig.defaultOptions && Object.keys(extendedConfig.defaultOptions).length > 0) {\n console.warn(`[tiptap warn]: BREAKING CHANGE: \"defaultOptions\" is deprecated. Please use \"addOptions\" instead. Found in extension: \"${extension.name}\".`);\n }\n extension.options = callOrReturn(getExtensionField(extension, 'addOptions', {\n name: extension.name,\n }));\n extension.storage = callOrReturn(getExtensionField(extension, 'addStorage', {\n name: extension.name,\n options: extension.options,\n }));\n return extension;\n }\n}\n\nfunction isAndroid() {\n return navigator.platform === 'Android' || /android/i.test(navigator.userAgent);\n}\n\n/**\n * Node views are used to customize the rendered DOM structure of a node.\n * @see https://tiptap.dev/guide/node-views\n */\nclass NodeView {\n constructor(component, props, options) {\n this.isDragging = false;\n this.component = component;\n this.editor = props.editor;\n this.options = {\n stopEvent: null,\n ignoreMutation: null,\n ...options,\n };\n this.extension = props.extension;\n this.node = props.node;\n this.decorations = props.decorations;\n this.getPos = props.getPos;\n this.mount();\n }\n mount() {\n // eslint-disable-next-line\n return;\n }\n get dom() {\n return this.editor.view.dom;\n }\n get contentDOM() {\n return null;\n }\n onDragStart(event) {\n var _a, _b, _c, _d, _e, _f, _g;\n const { view } = this.editor;\n const target = event.target;\n // get the drag handle element\n // `closest` is not available for text nodes so we may have to use its parent\n const dragHandle = target.nodeType === 3\n ? (_a = target.parentElement) === null || _a === void 0 ? void 0 : _a.closest('[data-drag-handle]')\n : target.closest('[data-drag-handle]');\n if (!this.dom || ((_b = this.contentDOM) === null || _b === void 0 ? void 0 : _b.contains(target)) || !dragHandle) {\n return;\n }\n let x = 0;\n let y = 0;\n // calculate offset for drag element if we use a different drag handle element\n if (this.dom !== dragHandle) {\n const domBox = this.dom.getBoundingClientRect();\n const handleBox = dragHandle.getBoundingClientRect();\n // In React, we have to go through nativeEvent to reach offsetX/offsetY.\n const offsetX = (_c = event.offsetX) !== null && _c !== void 0 ? _c : (_d = event.nativeEvent) === null || _d === void 0 ? void 0 : _d.offsetX;\n const offsetY = (_e = event.offsetY) !== null && _e !== void 0 ? _e : (_f = event.nativeEvent) === null || _f === void 0 ? void 0 : _f.offsetY;\n x = handleBox.x - domBox.x + offsetX;\n y = handleBox.y - domBox.y + offsetY;\n }\n (_g = event.dataTransfer) === null || _g === void 0 ? void 0 : _g.setDragImage(this.dom, x, y);\n // we need to tell ProseMirror that we want to move the whole node\n // so we create a NodeSelection\n const selection = NodeSelection.create(view.state.doc, this.getPos());\n const transaction = view.state.tr.setSelection(selection);\n view.dispatch(transaction);\n }\n stopEvent(event) {\n var _a;\n if (!this.dom) {\n return false;\n }\n if (typeof this.options.stopEvent === 'function') {\n return this.options.stopEvent({ event });\n }\n const target = event.target;\n const isInElement = this.dom.contains(target) && !((_a = this.contentDOM) === null || _a === void 0 ? void 0 : _a.contains(target));\n // any event from child nodes should be handled by ProseMirror\n if (!isInElement) {\n return false;\n }\n const isDragEvent = event.type.startsWith('drag');\n const isDropEvent = event.type === 'drop';\n const isInput = ['INPUT', 'BUTTON', 'SELECT', 'TEXTAREA'].includes(target.tagName) || target.isContentEditable;\n // any input event within node views should be ignored by ProseMirror\n if (isInput && !isDropEvent && !isDragEvent) {\n return true;\n }\n const { isEditable } = this.editor;\n const { isDragging } = this;\n const isDraggable = !!this.node.type.spec.draggable;\n const isSelectable = NodeSelection.isSelectable(this.node);\n const isCopyEvent = event.type === 'copy';\n const isPasteEvent = event.type === 'paste';\n const isCutEvent = event.type === 'cut';\n const isClickEvent = event.type === 'mousedown';\n // ProseMirror tries to drag selectable nodes\n // even if `draggable` is set to `false`\n // this fix prevents that\n if (!isDraggable && isSelectable && isDragEvent) {\n event.preventDefault();\n }\n if (isDraggable && isDragEvent && !isDragging) {\n event.preventDefault();\n return false;\n }\n // we have to store that dragging started\n if (isDraggable && isEditable && !isDragging && isClickEvent) {\n const dragHandle = target.closest('[data-drag-handle]');\n const isValidDragHandle = dragHandle && (this.dom === dragHandle || this.dom.contains(dragHandle));\n if (isValidDragHandle) {\n this.isDragging = true;\n document.addEventListener('dragend', () => {\n this.isDragging = false;\n }, { once: true });\n document.addEventListener('drop', () => {\n this.isDragging = false;\n }, { once: true });\n document.addEventListener('mouseup', () => {\n this.isDragging = false;\n }, { once: true });\n }\n }\n // these events are handled by prosemirror\n if (isDragging\n || isDropEvent\n || isCopyEvent\n || isPasteEvent\n || isCutEvent\n || (isClickEvent && isSelectable)) {\n return false;\n }\n return true;\n }\n ignoreMutation(mutation) {\n if (!this.dom || !this.contentDOM) {\n return true;\n }\n if (typeof this.options.ignoreMutation === 'function') {\n return this.options.ignoreMutation({ mutation });\n }\n // a leaf/atom node is like a black box for ProseMirror\n // and should be fully handled by the node view\n if (this.node.isLeaf || this.node.isAtom) {\n return true;\n }\n // ProseMirror should handle any selections\n if (mutation.type === 'selection') {\n return false;\n }\n // try to prevent a bug on iOS and Android that will break node views on enter\n // this is because ProseMirror can’t preventDispatch on enter\n // this will lead to a re-render of the node view on enter\n // see: https://github.com/ueberdosis/tiptap/issues/1214\n // see: https://github.com/ueberdosis/tiptap/issues/2534\n if (this.dom.contains(mutation.target)\n && mutation.type === 'childList'\n && (isiOS() || isAndroid())\n && this.editor.isFocused) {\n const changedNodes = [\n ...Array.from(mutation.addedNodes),\n ...Array.from(mutation.removedNodes),\n ];\n // we’ll check if every changed node is contentEditable\n // to make sure it’s probably mutated by ProseMirror\n if (changedNodes.every(node => node.isContentEditable)) {\n return false;\n }\n }\n // we will allow mutation contentDOM with attributes\n // so we can for example adding classes within our node view\n if (this.contentDOM === mutation.target && mutation.type === 'attributes') {\n return true;\n }\n // ProseMirror should handle any changes within contentDOM\n if (this.contentDOM.contains(mutation.target)) {\n return false;\n }\n return true;\n }\n updateAttributes(attributes) {\n this.editor.commands.command(({ tr }) => {\n const pos = this.getPos();\n tr.setNodeMarkup(pos, undefined, {\n ...this.node.attrs,\n ...attributes,\n });\n return true;\n });\n }\n deleteNode() {\n const from = this.getPos();\n const to = from + this.node.nodeSize;\n this.editor.commands.deleteRange({ from, to });\n }\n}\n\n/**\n * Build an paste rule that adds a mark when the\n * matched text is pasted into it.\n * @see https://tiptap.dev/guide/custom-extensions/#paste-rules\n */\nfunction markPasteRule(config) {\n return new PasteRule({\n find: config.find,\n handler: ({ state, range, match, pasteEvent, }) => {\n const attributes = callOrReturn(config.getAttributes, undefined, match, pasteEvent);\n if (attributes === false || attributes === null) {\n return null;\n }\n const { tr } = state;\n const captureGroup = match[match.length - 1];\n const fullMatch = match[0];\n let markEnd = range.to;\n if (captureGroup) {\n const startSpaces = fullMatch.search(/\\S/);\n const textStart = range.from + fullMatch.indexOf(captureGroup);\n const textEnd = textStart + captureGroup.length;\n const excludedMarks = getMarksBetween(range.from, range.to, state.doc)\n .filter(item => {\n // @ts-ignore\n const excluded = item.mark.type.excluded;\n return excluded.find(type => type === config.type && type !== item.mark.type);\n })\n .filter(item => item.to > textStart);\n if (excludedMarks.length) {\n return null;\n }\n if (textEnd < range.to) {\n tr.delete(textEnd, range.to);\n }\n if (textStart > range.from) {\n tr.delete(range.from + startSpaces, textStart);\n }\n markEnd = range.from + startSpaces + captureGroup.length;\n tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));\n tr.removeStoredMark(config.type);\n }\n },\n });\n}\n\n// source: https://stackoverflow.com/a/6969486\nfunction escapeForRegEx(string) {\n return string.replace(/[-/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nfunction isString(value) {\n return typeof value === 'string';\n}\n\n/**\n * Build an paste rule that adds a node when the\n * matched text is pasted into it.\n * @see https://tiptap.dev/guide/custom-extensions/#paste-rules\n */\nfunction nodePasteRule(config) {\n return new PasteRule({\n find: config.find,\n handler({ match, chain, range, pasteEvent, }) {\n const attributes = callOrReturn(config.getAttributes, undefined, match, pasteEvent);\n const content = callOrReturn(config.getContent, undefined, attributes);\n if (attributes === false || attributes === null) {\n return null;\n }\n const node = { type: config.type.name, attrs: attributes };\n if (content) {\n node.content = content;\n }\n if (match.input) {\n chain().deleteRange(range).insertContentAt(range.from, node);\n }\n },\n });\n}\n\n/**\n * Build an paste rule that replaces text when the\n * matched text is pasted into it.\n * @see https://tiptap.dev/guide/custom-extensions/#paste-rules\n */\nfunction textPasteRule(config) {\n return new PasteRule({\n find: config.find,\n handler: ({ state, range, match }) => {\n let insert = config.replace;\n let start = range.from;\n const end = range.to;\n if (match[1]) {\n const offset = match[0].lastIndexOf(match[1]);\n insert += match[0].slice(offset + match[1].length);\n start += offset;\n const cutOff = start - end;\n if (cutOff > 0) {\n insert = match[0].slice(offset - cutOff, offset) + insert;\n start = end;\n }\n }\n state.tr.insertText(insert, start, end);\n },\n });\n}\n\nclass Tracker {\n constructor(transaction) {\n this.transaction = transaction;\n this.currentStep = this.transaction.steps.length;\n }\n map(position) {\n let deleted = false;\n const mappedPosition = this.transaction.steps\n .slice(this.currentStep)\n .reduce((newPosition, step) => {\n const mapResult = step.getMap().mapResult(newPosition);\n if (mapResult.deleted) {\n deleted = true;\n }\n return mapResult.pos;\n }, position);\n return {\n position: mappedPosition,\n deleted,\n };\n }\n}\n\nexport { CommandManager, Editor, Extension, InputRule, Mark, Node, NodePos, NodeView, PasteRule, Tracker, callOrReturn, combineTransactionSteps, createChainableState, createDocument, createNodeFromContent, createStyleTag, defaultBlockAt, deleteProps, elementFromString, escapeForRegEx, index as extensions, findChildren, findChildrenInRange, findDuplicates, findParentNode, findParentNodeClosestToPos, fromString, generateHTML, generateJSON, generateText, getAttributes, getAttributesFromExtensions, getChangedRanges, getDebugJSON, getExtensionField, getHTMLFromFragment, getMarkAttributes, getMarkRange, getMarkType, getMarksBetween, getNodeAtPosition, getNodeAttributes, getNodeType, getRenderedAttributes, getSchema, getSchemaByResolvedExtensions, getSchemaTypeByName, getSchemaTypeNameByName, getSplittedAttributes, getText, getTextBetween, getTextContentFromNodes, getTextSerializersFromSchema, injectExtensionAttributesToParseRule, inputRulesPlugin, isActive, isAtEndOfNode, isAtStartOfNode, isEmptyObject, isExtensionRulesEnabled, isFunction, isList, isMacOS, isMarkActive, isNodeActive, isNodeEmpty, isNodeSelection, isNumber, isPlainObject, isRegExp, isString, isTextSelection, isiOS, markInputRule, markPasteRule, mergeAttributes, mergeDeep, minMax, nodeInputRule, nodePasteRule, objectIncludes, pasteRulesPlugin, posToDOMRect, removeDuplicates, resolveFocusPosition, selectionToInsertionEnd, splitExtensions, textInputRule, textPasteRule, textblockTypeInputRule, wrappingInputRule };\n//# sourceMappingURL=index.js.map\n","import { Mark, mergeAttributes, markInputRule, markPasteRule } from '@tiptap/core';\n\n/**\n * Matches bold text via `**` as input.\n */\nconst starInputRegex = /(?:^|\\s)(\\*\\*(?!\\s+\\*\\*)((?:[^*]+))\\*\\*(?!\\s+\\*\\*))$/;\n/**\n * Matches bold text via `**` while pasting.\n */\nconst starPasteRegex = /(?:^|\\s)(\\*\\*(?!\\s+\\*\\*)((?:[^*]+))\\*\\*(?!\\s+\\*\\*))/g;\n/**\n * Matches bold text via `__` as input.\n */\nconst underscoreInputRegex = /(?:^|\\s)(__(?!\\s+__)((?:[^_]+))__(?!\\s+__))$/;\n/**\n * Matches bold text via `__` while pasting.\n */\nconst underscorePasteRegex = /(?:^|\\s)(__(?!\\s+__)((?:[^_]+))__(?!\\s+__))/g;\n/**\n * This extension allows you to mark text as bold.\n * @see https://tiptap.dev/api/marks/bold\n */\nconst Bold = Mark.create({\n name: 'bold',\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n parseHTML() {\n return [\n {\n tag: 'strong',\n },\n {\n tag: 'b',\n getAttrs: node => node.style.fontWeight !== 'normal' && null,\n },\n {\n style: 'font-weight',\n getAttrs: value => /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null,\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['strong', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n setBold: () => ({ commands }) => {\n return commands.setMark(this.name);\n },\n toggleBold: () => ({ commands }) => {\n return commands.toggleMark(this.name);\n },\n unsetBold: () => ({ commands }) => {\n return commands.unsetMark(this.name);\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-b': () => this.editor.commands.toggleBold(),\n 'Mod-B': () => this.editor.commands.toggleBold(),\n };\n },\n addInputRules() {\n return [\n markInputRule({\n find: starInputRegex,\n type: this.type,\n }),\n markInputRule({\n find: underscoreInputRegex,\n type: this.type,\n }),\n ];\n },\n addPasteRules() {\n return [\n markPasteRule({\n find: starPasteRegex,\n type: this.type,\n }),\n markPasteRule({\n find: underscorePasteRegex,\n type: this.type,\n }),\n ];\n },\n});\n\nexport { Bold, Bold as default, starInputRegex, starPasteRegex, underscoreInputRegex, underscorePasteRegex };\n//# sourceMappingURL=index.js.map\n","import { isTextSelection, isNodeSelection, posToDOMRect, Extension } from '@tiptap/core';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\nimport tippy from 'tippy.js';\n\nclass BubbleMenuView {\n constructor({ editor, element, view, tippyOptions = {}, updateDelay = 250, shouldShow, }) {\n this.preventHide = false;\n this.shouldShow = ({ view, state, from, to, }) => {\n const { doc, selection } = state;\n const { empty } = selection;\n // Sometime check for `empty` is not enough.\n // Doubleclick an empty paragraph returns a node size of 2.\n // So we check also for an empty text size.\n const isEmptyTextBlock = !doc.textBetween(from, to).length && isTextSelection(state.selection);\n // When clicking on a element inside the bubble menu the editor \"blur\" event\n // is called and the bubble menu item is focussed. In this case we should\n // consider the menu as part of the editor and keep showing the menu\n const isChildOfMenu = this.element.contains(document.activeElement);\n const hasEditorFocus = view.hasFocus() || isChildOfMenu;\n if (!hasEditorFocus || empty || isEmptyTextBlock || !this.editor.isEditable) {\n return false;\n }\n return true;\n };\n this.mousedownHandler = () => {\n this.preventHide = true;\n };\n this.dragstartHandler = () => {\n this.hide();\n };\n this.focusHandler = () => {\n // we use `setTimeout` to make sure `selection` is already updated\n setTimeout(() => this.update(this.editor.view));\n };\n this.blurHandler = ({ event }) => {\n var _a;\n if (this.preventHide) {\n this.preventHide = false;\n return;\n }\n if ((event === null || event === void 0 ? void 0 : event.relatedTarget) && ((_a = this.element.parentNode) === null || _a === void 0 ? void 0 : _a.contains(event.relatedTarget))) {\n return;\n }\n this.hide();\n };\n this.tippyBlurHandler = (event) => {\n this.blurHandler({ event });\n };\n this.handleDebouncedUpdate = (view, oldState) => {\n const selectionChanged = !(oldState === null || oldState === void 0 ? void 0 : oldState.selection.eq(view.state.selection));\n const docChanged = !(oldState === null || oldState === void 0 ? void 0 : oldState.doc.eq(view.state.doc));\n if (!selectionChanged && !docChanged) {\n return;\n }\n if (this.updateDebounceTimer) {\n clearTimeout(this.updateDebounceTimer);\n }\n this.updateDebounceTimer = window.setTimeout(() => {\n this.updateHandler(view, selectionChanged, docChanged, oldState);\n }, this.updateDelay);\n };\n this.updateHandler = (view, selectionChanged, docChanged, oldState) => {\n var _a, _b, _c;\n const { state, composing } = view;\n const { selection } = state;\n const isSame = !selectionChanged && !docChanged;\n if (composing || isSame) {\n return;\n }\n this.createTooltip();\n // support for CellSelections\n const { ranges } = selection;\n const from = Math.min(...ranges.map(range => range.$from.pos));\n const to = Math.max(...ranges.map(range => range.$to.pos));\n const shouldShow = (_a = this.shouldShow) === null || _a === void 0 ? void 0 : _a.call(this, {\n editor: this.editor,\n view,\n state,\n oldState,\n from,\n to,\n });\n if (!shouldShow) {\n this.hide();\n return;\n }\n (_b = this.tippy) === null || _b === void 0 ? void 0 : _b.setProps({\n getReferenceClientRect: ((_c = this.tippyOptions) === null || _c === void 0 ? void 0 : _c.getReferenceClientRect)\n || (() => {\n if (isNodeSelection(state.selection)) {\n let node = view.nodeDOM(from);\n const nodeViewWrapper = node.dataset.nodeViewWrapper ? node : node.querySelector('[data-node-view-wrapper]');\n if (nodeViewWrapper) {\n node = nodeViewWrapper.firstChild;\n }\n if (node) {\n return node.getBoundingClientRect();\n }\n }\n return posToDOMRect(view, from, to);\n }),\n });\n this.show();\n };\n this.editor = editor;\n this.element = element;\n this.view = view;\n this.updateDelay = updateDelay;\n if (shouldShow) {\n this.shouldShow = shouldShow;\n }\n this.element.addEventListener('mousedown', this.mousedownHandler, { capture: true });\n this.view.dom.addEventListener('dragstart', this.dragstartHandler);\n this.editor.on('focus', this.focusHandler);\n this.editor.on('blur', this.blurHandler);\n this.tippyOptions = tippyOptions;\n // Detaches menu content from its current parent\n this.element.remove();\n this.element.style.visibility = 'visible';\n }\n createTooltip() {\n const { element: editorElement } = this.editor.options;\n const editorIsAttached = !!editorElement.parentElement;\n if (this.tippy || !editorIsAttached) {\n return;\n }\n this.tippy = tippy(editorElement, {\n duration: 0,\n getReferenceClientRect: null,\n content: this.element,\n interactive: true,\n trigger: 'manual',\n placement: 'top',\n hideOnClick: 'toggle',\n ...this.tippyOptions,\n });\n // maybe we have to hide tippy on its own blur event as well\n if (this.tippy.popper.firstChild) {\n this.tippy.popper.firstChild.addEventListener('blur', this.tippyBlurHandler);\n }\n }\n update(view, oldState) {\n const { state } = view;\n const hasValidSelection = state.selection.from !== state.selection.to;\n if (this.updateDelay > 0 && hasValidSelection) {\n this.handleDebouncedUpdate(view, oldState);\n return;\n }\n const selectionChanged = !(oldState === null || oldState === void 0 ? void 0 : oldState.selection.eq(view.state.selection));\n const docChanged = !(oldState === null || oldState === void 0 ? void 0 : oldState.doc.eq(view.state.doc));\n this.updateHandler(view, selectionChanged, docChanged, oldState);\n }\n show() {\n var _a;\n (_a = this.tippy) === null || _a === void 0 ? void 0 : _a.show();\n }\n hide() {\n var _a;\n (_a = this.tippy) === null || _a === void 0 ? void 0 : _a.hide();\n }\n destroy() {\n var _a, _b;\n if ((_a = this.tippy) === null || _a === void 0 ? void 0 : _a.popper.firstChild) {\n this.tippy.popper.firstChild.removeEventListener('blur', this.tippyBlurHandler);\n }\n (_b = this.tippy) === null || _b === void 0 ? void 0 : _b.destroy();\n this.element.removeEventListener('mousedown', this.mousedownHandler, { capture: true });\n this.view.dom.removeEventListener('dragstart', this.dragstartHandler);\n this.editor.off('focus', this.focusHandler);\n this.editor.off('blur', this.blurHandler);\n }\n}\nconst BubbleMenuPlugin = (options) => {\n return new Plugin({\n key: typeof options.pluginKey === 'string' ? new PluginKey(options.pluginKey) : options.pluginKey,\n view: view => new BubbleMenuView({ view, ...options }),\n });\n};\n\n/**\n * This extension allows you to create a bubble menu.\n * @see https://tiptap.dev/api/extensions/bubble-menu\n */\nconst BubbleMenu = Extension.create({\n name: 'bubbleMenu',\n addOptions() {\n return {\n element: null,\n tippyOptions: {},\n pluginKey: 'bubbleMenu',\n updateDelay: undefined,\n shouldShow: null,\n };\n },\n addProseMirrorPlugins() {\n if (!this.options.element) {\n return [];\n }\n return [\n BubbleMenuPlugin({\n pluginKey: this.options.pluginKey,\n editor: this.editor,\n element: this.options.element,\n tippyOptions: this.options.tippyOptions,\n updateDelay: this.options.updateDelay,\n shouldShow: this.options.shouldShow,\n }),\n ];\n },\n});\n\nexport { BubbleMenu, BubbleMenuPlugin, BubbleMenuView, BubbleMenu as default };\n//# sourceMappingURL=index.js.map\n","import { BubbleMenuPlugin } from '@tiptap/extension-bubble-menu';\nimport React, { forwardRef, useState, useEffect, useDebugValue, useRef, createContext, useContext } from 'react';\nimport ReactDOM, { flushSync } from 'react-dom';\nimport { Editor, NodeView } from '@tiptap/core';\nexport * from '@tiptap/core';\nimport { FloatingMenuPlugin } from '@tiptap/extension-floating-menu';\n\nvar shim = {exports: {}};\n\nvar useSyncExternalStoreShim_production_min = {};\n\n/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar hasRequiredUseSyncExternalStoreShim_production_min;\n\nfunction requireUseSyncExternalStoreShim_production_min () {\n\tif (hasRequiredUseSyncExternalStoreShim_production_min) return useSyncExternalStoreShim_production_min;\n\thasRequiredUseSyncExternalStoreShim_production_min = 1;\nvar e=React;function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c});},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c});})},[a]);p(d);return d}\n\tfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return !k(a,d)}catch(f){return !0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;useSyncExternalStoreShim_production_min.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n\treturn useSyncExternalStoreShim_production_min;\n}\n\nvar useSyncExternalStoreShim_development = {};\n\n/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar hasRequiredUseSyncExternalStoreShim_development;\n\nfunction requireUseSyncExternalStoreShim_development () {\n\tif (hasRequiredUseSyncExternalStoreShim_development) return useSyncExternalStoreShim_development;\n\thasRequiredUseSyncExternalStoreShim_development = 1;\n\n\tif (process.env.NODE_ENV !== \"production\") {\n\t (function() {\n\n\t/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n\tif (\n\t typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n\t typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n\t 'function'\n\t) {\n\t __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n\t}\n\t var React$1 = React;\n\n\tvar ReactSharedInternals = React$1.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\n\tfunction error(format) {\n\t {\n\t {\n\t for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n\t args[_key2 - 1] = arguments[_key2];\n\t }\n\n\t printWarning('error', format, args);\n\t }\n\t }\n\t}\n\n\tfunction printWarning(level, format, args) {\n\t // When changing this logic, you might want to also\n\t // update consoleWithStackDev.www.js as well.\n\t {\n\t var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\t var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n\t if (stack !== '') {\n\t format += '%s';\n\t args = args.concat([stack]);\n\t } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n\t var argsWithFormat = args.map(function (item) {\n\t return String(item);\n\t }); // Careful: RN currently depends on this prefix\n\n\t argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n\t // breaks IE9: https://github.com/facebook/react/issues/13610\n\t // eslint-disable-next-line react-internal/no-production-logging\n\n\t Function.prototype.apply.call(console[level], console, argsWithFormat);\n\t }\n\t}\n\n\t/**\n\t * inlined Object.is polyfill to avoid requiring consumers ship their own\n\t * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n\t */\n\tfunction is(x, y) {\n\t return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n\t ;\n\t}\n\n\tvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\n\t// dispatch for CommonJS interop named imports.\n\n\tvar useState = React$1.useState,\n\t useEffect = React$1.useEffect,\n\t useLayoutEffect = React$1.useLayoutEffect,\n\t useDebugValue = React$1.useDebugValue;\n\tvar didWarnOld18Alpha = false;\n\tvar didWarnUncachedGetSnapshot = false; // Disclaimer: This shim breaks many of the rules of React, and only works\n\t// because of a very particular set of implementation details and assumptions\n\t// -- change any one of them and it will break. The most important assumption\n\t// is that updates are always synchronous, because concurrent rendering is\n\t// only available in versions of React that also have a built-in\n\t// useSyncExternalStore API. And we only use this shim when the built-in API\n\t// does not exist.\n\t//\n\t// Do not assume that the clever hacks used by this hook also work in general.\n\t// The point of this shim is to replace the need for hacks by other libraries.\n\n\tfunction useSyncExternalStore(subscribe, getSnapshot, // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n\t// React do not expose a way to check if we're hydrating. So users of the shim\n\t// will need to track that themselves and return the correct value\n\t// from `getSnapshot`.\n\tgetServerSnapshot) {\n\t {\n\t if (!didWarnOld18Alpha) {\n\t if (React$1.startTransition !== undefined) {\n\t didWarnOld18Alpha = true;\n\n\t error('You are using an outdated, pre-release alpha of React 18 that ' + 'does not support useSyncExternalStore. The ' + 'use-sync-external-store shim will not work correctly. Upgrade ' + 'to a newer pre-release.');\n\t }\n\t }\n\t } // Read the current snapshot from the store on every render. Again, this\n\t // breaks the rules of React, and only works here because of specific\n\t // implementation details, most importantly that updates are\n\t // always synchronous.\n\n\n\t var value = getSnapshot();\n\n\t {\n\t if (!didWarnUncachedGetSnapshot) {\n\t var cachedValue = getSnapshot();\n\n\t if (!objectIs(value, cachedValue)) {\n\t error('The result of getSnapshot should be cached to avoid an infinite loop');\n\n\t didWarnUncachedGetSnapshot = true;\n\t }\n\t }\n\t } // Because updates are synchronous, we don't queue them. Instead we force a\n\t // re-render whenever the subscribed state changes by updating an some\n\t // arbitrary useState hook. Then, during render, we call getSnapshot to read\n\t // the current value.\n\t //\n\t // Because we don't actually use the state returned by the useState hook, we\n\t // can save a bit of memory by storing other stuff in that slot.\n\t //\n\t // To implement the early bailout, we need to track some things on a mutable\n\t // object. Usually, we would put that in a useRef hook, but we can stash it in\n\t // our useState hook instead.\n\t //\n\t // To force a re-render, we call forceUpdate({inst}). That works because the\n\t // new object always fails an equality check.\n\n\n\t var _useState = useState({\n\t inst: {\n\t value: value,\n\t getSnapshot: getSnapshot\n\t }\n\t }),\n\t inst = _useState[0].inst,\n\t forceUpdate = _useState[1]; // Track the latest getSnapshot function with a ref. This needs to be updated\n\t // in the layout phase so we can access it during the tearing check that\n\t // happens on subscribe.\n\n\n\t useLayoutEffect(function () {\n\t inst.value = value;\n\t inst.getSnapshot = getSnapshot; // Whenever getSnapshot or subscribe changes, we need to check in the\n\t // commit phase if there was an interleaved mutation. In concurrent mode\n\t // this can happen all the time, but even in synchronous mode, an earlier\n\t // effect may have mutated the store.\n\n\t if (checkIfSnapshotChanged(inst)) {\n\t // Force a re-render.\n\t forceUpdate({\n\t inst: inst\n\t });\n\t }\n\t }, [subscribe, value, getSnapshot]);\n\t useEffect(function () {\n\t // Check for changes right before subscribing. Subsequent changes will be\n\t // detected in the subscription handler.\n\t if (checkIfSnapshotChanged(inst)) {\n\t // Force a re-render.\n\t forceUpdate({\n\t inst: inst\n\t });\n\t }\n\n\t var handleStoreChange = function () {\n\t // TODO: Because there is no cross-renderer API for batching updates, it's\n\t // up to the consumer of this library to wrap their subscription event\n\t // with unstable_batchedUpdates. Should we try to detect when this isn't\n\t // the case and print a warning in development?\n\t // The store changed. Check if the snapshot changed since the last time we\n\t // read from the store.\n\t if (checkIfSnapshotChanged(inst)) {\n\t // Force a re-render.\n\t forceUpdate({\n\t inst: inst\n\t });\n\t }\n\t }; // Subscribe to the store and return a clean-up function.\n\n\n\t return subscribe(handleStoreChange);\n\t }, [subscribe]);\n\t useDebugValue(value);\n\t return value;\n\t}\n\n\tfunction checkIfSnapshotChanged(inst) {\n\t var latestGetSnapshot = inst.getSnapshot;\n\t var prevValue = inst.value;\n\n\t try {\n\t var nextValue = latestGetSnapshot();\n\t return !objectIs(prevValue, nextValue);\n\t } catch (error) {\n\t return true;\n\t }\n\t}\n\n\tfunction useSyncExternalStore$1(subscribe, getSnapshot, getServerSnapshot) {\n\t // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n\t // React do not expose a way to check if we're hydrating. So users of the shim\n\t // will need to track that themselves and return the correct value\n\t // from `getSnapshot`.\n\t return getSnapshot();\n\t}\n\n\tvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\n\tvar isServerEnvironment = !canUseDOM;\n\n\tvar shim = isServerEnvironment ? useSyncExternalStore$1 : useSyncExternalStore;\n\tvar useSyncExternalStore$2 = React$1.useSyncExternalStore !== undefined ? React$1.useSyncExternalStore : shim;\n\n\tuseSyncExternalStoreShim_development.useSyncExternalStore = useSyncExternalStore$2;\n\t /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n\tif (\n\t typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n\t typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n\t 'function'\n\t) {\n\t __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n\t}\n\t \n\t })();\n\t}\n\treturn useSyncExternalStoreShim_development;\n}\n\nif (process.env.NODE_ENV === 'production') {\n shim.exports = requireUseSyncExternalStoreShim_production_min();\n} else {\n shim.exports = requireUseSyncExternalStoreShim_development();\n}\n\nvar shimExports = shim.exports;\n\nconst mergeRefs = (...refs) => {\n return (node) => {\n refs.forEach(ref => {\n if (typeof ref === 'function') {\n ref(node);\n }\n else if (ref) {\n ref.current = node;\n }\n });\n };\n};\n/**\n * This component renders all of the editor's node views.\n */\nconst Portals = ({ contentComponent, }) => {\n // For performance reasons, we render the node view portals on state changes only\n const renderers = shimExports.useSyncExternalStore(contentComponent.subscribe, contentComponent.getSnapshot, contentComponent.getServerSnapshot);\n // This allows us to directly render the portals without any additional wrapper\n return (React.createElement(React.Fragment, null, Object.values(renderers)));\n};\nfunction getInstance() {\n const subscribers = new Set();\n let renderers = {};\n return {\n /**\n * Subscribe to the editor instance's changes.\n */\n subscribe(callback) {\n subscribers.add(callback);\n return () => {\n subscribers.delete(callback);\n };\n },\n getSnapshot() {\n return renderers;\n },\n getServerSnapshot() {\n return renderers;\n },\n /**\n * Adds a new NodeView Renderer to the editor.\n */\n setRenderer(id, renderer) {\n renderers = {\n ...renderers,\n [id]: ReactDOM.createPortal(renderer.reactElement, renderer.element, id),\n };\n subscribers.forEach(subscriber => subscriber());\n },\n /**\n * Removes a NodeView Renderer from the editor.\n */\n removeRenderer(id) {\n const nextRenderers = { ...renderers };\n delete nextRenderers[id];\n renderers = nextRenderers;\n subscribers.forEach(subscriber => subscriber());\n },\n };\n}\nclass PureEditorContent extends React.Component {\n constructor(props) {\n var _a;\n super(props);\n this.editorContentRef = React.createRef();\n this.initialized = false;\n this.state = {\n hasContentComponentInitialized: Boolean((_a = props.editor) === null || _a === void 0 ? void 0 : _a.contentComponent),\n };\n }\n componentDidMount() {\n this.init();\n }\n componentDidUpdate() {\n this.init();\n }\n init() {\n const editor = this.props.editor;\n if (editor && !editor.isDestroyed && editor.options.element) {\n if (editor.contentComponent) {\n return;\n }\n const element = this.editorContentRef.current;\n element.append(...editor.options.element.childNodes);\n editor.setOptions({\n element,\n });\n editor.contentComponent = getInstance();\n // Has the content component been initialized?\n if (!this.state.hasContentComponentInitialized) {\n // Subscribe to the content component\n this.unsubscribeToContentComponent = editor.contentComponent.subscribe(() => {\n this.setState(prevState => {\n if (!prevState.hasContentComponentInitialized) {\n return {\n hasContentComponentInitialized: true,\n };\n }\n return prevState;\n });\n // Unsubscribe to previous content component\n if (this.unsubscribeToContentComponent) {\n this.unsubscribeToContentComponent();\n }\n });\n }\n editor.createNodeViews();\n this.initialized = true;\n }\n }\n componentWillUnmount() {\n const editor = this.props.editor;\n if (!editor) {\n return;\n }\n this.initialized = false;\n if (!editor.isDestroyed) {\n editor.view.setProps({\n nodeViews: {},\n });\n }\n if (this.unsubscribeToContentComponent) {\n this.unsubscribeToContentComponent();\n }\n editor.contentComponent = null;\n if (!editor.options.element.firstChild) {\n return;\n }\n const newElement = document.createElement('div');\n newElement.append(...editor.options.element.childNodes);\n editor.setOptions({\n element: newElement,\n });\n }\n render() {\n const { editor, innerRef, ...rest } = this.props;\n return (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { ref: mergeRefs(innerRef, this.editorContentRef), ...rest }),\n (editor === null || editor === void 0 ? void 0 : editor.contentComponent) && React.createElement(Portals, { contentComponent: editor.contentComponent })));\n }\n}\n// EditorContent should be re-created whenever the Editor instance changes\nconst EditorContentWithKey = forwardRef((props, ref) => {\n const key = React.useMemo(() => {\n return Math.floor(Math.random() * 0xffffffff).toString();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.editor]);\n // Can't use JSX here because it conflicts with the type definition of Vue's JSX, so use createElement\n return React.createElement(PureEditorContent, {\n key,\n innerRef: ref,\n ...props,\n });\n});\nconst EditorContent = React.memo(EditorContentWithKey);\n\nvar withSelector = {exports: {}};\n\nvar withSelector_production_min = {};\n\n/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar hasRequiredWithSelector_production_min;\n\nfunction requireWithSelector_production_min () {\n\tif (hasRequiredWithSelector_production_min) return withSelector_production_min;\n\thasRequiredWithSelector_production_min = 1;\nvar h=React,n=shimExports;function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\n\twithSelector_production_min.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f;}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return [function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\n\tu(function(){f.hasValue=!0;f.value=d;},[d]);w(d);return d};\n\treturn withSelector_production_min;\n}\n\nvar withSelector_development = {};\n\n/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar hasRequiredWithSelector_development;\n\nfunction requireWithSelector_development () {\n\tif (hasRequiredWithSelector_development) return withSelector_development;\n\thasRequiredWithSelector_development = 1;\n\n\tif (process.env.NODE_ENV !== \"production\") {\n\t (function() {\n\n\t/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n\tif (\n\t typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n\t typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n\t 'function'\n\t) {\n\t __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n\t}\n\t var React$1 = React;\n\tvar shim = shimExports;\n\n\t/**\n\t * inlined Object.is polyfill to avoid requiring consumers ship their own\n\t * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n\t */\n\tfunction is(x, y) {\n\t return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n\t ;\n\t}\n\n\tvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\n\tvar useSyncExternalStore = shim.useSyncExternalStore;\n\n\t// for CommonJS interop.\n\n\tvar useRef = React$1.useRef,\n\t useEffect = React$1.useEffect,\n\t useMemo = React$1.useMemo,\n\t useDebugValue = React$1.useDebugValue; // Same as useSyncExternalStore, but supports selector and isEqual arguments.\n\n\tfunction useSyncExternalStoreWithSelector(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {\n\t // Use this to track the rendered snapshot.\n\t var instRef = useRef(null);\n\t var inst;\n\n\t if (instRef.current === null) {\n\t inst = {\n\t hasValue: false,\n\t value: null\n\t };\n\t instRef.current = inst;\n\t } else {\n\t inst = instRef.current;\n\t }\n\n\t var _useMemo = useMemo(function () {\n\t // Track the memoized state using closure variables that are local to this\n\t // memoized instance of a getSnapshot function. Intentionally not using a\n\t // useRef hook, because that state would be shared across all concurrent\n\t // copies of the hook/component.\n\t var hasMemo = false;\n\t var memoizedSnapshot;\n\t var memoizedSelection;\n\n\t var memoizedSelector = function (nextSnapshot) {\n\t if (!hasMemo) {\n\t // The first time the hook is called, there is no memoized result.\n\t hasMemo = true;\n\t memoizedSnapshot = nextSnapshot;\n\n\t var _nextSelection = selector(nextSnapshot);\n\n\t if (isEqual !== undefined) {\n\t // Even if the selector has changed, the currently rendered selection\n\t // may be equal to the new selection. We should attempt to reuse the\n\t // current value if possible, to preserve downstream memoizations.\n\t if (inst.hasValue) {\n\t var currentSelection = inst.value;\n\n\t if (isEqual(currentSelection, _nextSelection)) {\n\t memoizedSelection = currentSelection;\n\t return currentSelection;\n\t }\n\t }\n\t }\n\n\t memoizedSelection = _nextSelection;\n\t return _nextSelection;\n\t } // We may be able to reuse the previous invocation's result.\n\n\n\t // We may be able to reuse the previous invocation's result.\n\t var prevSnapshot = memoizedSnapshot;\n\t var prevSelection = memoizedSelection;\n\n\t if (objectIs(prevSnapshot, nextSnapshot)) {\n\t // The snapshot is the same as last time. Reuse the previous selection.\n\t return prevSelection;\n\t } // The snapshot has changed, so we need to compute a new selection.\n\n\n\t // The snapshot has changed, so we need to compute a new selection.\n\t var nextSelection = selector(nextSnapshot); // If a custom isEqual function is provided, use that to check if the data\n\t // has changed. If it hasn't, return the previous selection. That signals\n\t // to React that the selections are conceptually equal, and we can bail\n\t // out of rendering.\n\n\t // If a custom isEqual function is provided, use that to check if the data\n\t // has changed. If it hasn't, return the previous selection. That signals\n\t // to React that the selections are conceptually equal, and we can bail\n\t // out of rendering.\n\t if (isEqual !== undefined && isEqual(prevSelection, nextSelection)) {\n\t return prevSelection;\n\t }\n\n\t memoizedSnapshot = nextSnapshot;\n\t memoizedSelection = nextSelection;\n\t return nextSelection;\n\t }; // Assigning this to a constant so that Flow knows it can't change.\n\n\n\t // Assigning this to a constant so that Flow knows it can't change.\n\t var maybeGetServerSnapshot = getServerSnapshot === undefined ? null : getServerSnapshot;\n\n\t var getSnapshotWithSelector = function () {\n\t return memoizedSelector(getSnapshot());\n\t };\n\n\t var getServerSnapshotWithSelector = maybeGetServerSnapshot === null ? undefined : function () {\n\t return memoizedSelector(maybeGetServerSnapshot());\n\t };\n\t return [getSnapshotWithSelector, getServerSnapshotWithSelector];\n\t }, [getSnapshot, getServerSnapshot, selector, isEqual]),\n\t getSelection = _useMemo[0],\n\t getServerSelection = _useMemo[1];\n\n\t var value = useSyncExternalStore(subscribe, getSelection, getServerSelection);\n\t useEffect(function () {\n\t inst.hasValue = true;\n\t inst.value = value;\n\t }, [value]);\n\t useDebugValue(value);\n\t return value;\n\t}\n\n\twithSelector_development.useSyncExternalStoreWithSelector = useSyncExternalStoreWithSelector;\n\t /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n\tif (\n\t typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n\t typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n\t 'function'\n\t) {\n\t __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n\t}\n\t \n\t })();\n\t}\n\treturn withSelector_development;\n}\n\nif (process.env.NODE_ENV === 'production') {\n withSelector.exports = requireWithSelector_production_min();\n} else {\n withSelector.exports = requireWithSelector_development();\n}\n\nvar withSelectorExports = withSelector.exports;\n\n/**\n * To synchronize the editor instance with the component state,\n * we need to create a separate instance that is not affected by the component re-renders.\n */\nclass EditorStateManager {\n constructor(initialEditor) {\n this.transactionNumber = 0;\n this.lastTransactionNumber = 0;\n this.subscribers = new Set();\n this.editor = initialEditor;\n this.lastSnapshot = { editor: initialEditor, transactionNumber: 0 };\n this.getSnapshot = this.getSnapshot.bind(this);\n this.getServerSnapshot = this.getServerSnapshot.bind(this);\n this.watch = this.watch.bind(this);\n this.subscribe = this.subscribe.bind(this);\n }\n /**\n * Get the current editor instance.\n */\n getSnapshot() {\n if (this.transactionNumber === this.lastTransactionNumber) {\n return this.lastSnapshot;\n }\n this.lastTransactionNumber = this.transactionNumber;\n this.lastSnapshot = { editor: this.editor, transactionNumber: this.transactionNumber };\n return this.lastSnapshot;\n }\n /**\n * Always disable the editor on the server-side.\n */\n getServerSnapshot() {\n return { editor: null, transactionNumber: 0 };\n }\n /**\n * Subscribe to the editor instance's changes.\n */\n subscribe(callback) {\n this.subscribers.add(callback);\n return () => {\n this.subscribers.delete(callback);\n };\n }\n /**\n * Watch the editor instance for changes.\n */\n watch(nextEditor) {\n this.editor = nextEditor;\n if (this.editor) {\n /**\n * This will force a re-render when the editor state changes.\n * This is to support things like `editor.can().toggleBold()` in components that `useEditor`.\n * This could be more efficient, but it's a good trade-off for now.\n */\n const fn = () => {\n this.transactionNumber += 1;\n this.subscribers.forEach(callback => callback());\n };\n const currentEditor = this.editor;\n currentEditor.on('transaction', fn);\n return () => {\n currentEditor.off('transaction', fn);\n };\n }\n return undefined;\n }\n}\nfunction useEditorState(options) {\n const [editorInstance] = useState(() => new EditorStateManager(options.editor));\n // Using the `useSyncExternalStore` hook to sync the editor instance with the component state\n const selectedState = withSelectorExports.useSyncExternalStoreWithSelector(editorInstance.subscribe, editorInstance.getSnapshot, editorInstance.getServerSnapshot, options.selector, options.equalityFn);\n useEffect(() => {\n return editorInstance.watch(options.editor);\n }, [options.editor, editorInstance]);\n useDebugValue(selectedState);\n return selectedState;\n}\n\nconst isDev = process.env.NODE_ENV !== 'production';\nconst isSSR = typeof window === 'undefined';\nconst isNext = isSSR || Boolean(typeof window !== 'undefined' && window.next);\n/**\n * This class handles the creation, destruction, and re-creation of the editor instance.\n */\nclass EditorInstanceManager {\n constructor(options) {\n /**\n * The current editor instance.\n */\n this.editor = null;\n /**\n * The subscriptions to notify when the editor instance\n * has been created or destroyed.\n */\n this.subscriptions = new Set();\n /**\n * Whether the editor has been mounted.\n */\n this.isComponentMounted = false;\n /**\n * The most recent dependencies array.\n */\n this.previousDeps = null;\n /**\n * The unique instance ID. This is used to identify the editor instance. And will be re-generated for each new instance.\n */\n this.instanceId = '';\n this.options = options;\n this.subscriptions = new Set();\n this.setEditor(this.getInitialEditor());\n this.scheduleDestroy();\n this.getEditor = this.getEditor.bind(this);\n this.getServerSnapshot = this.getServerSnapshot.bind(this);\n this.subscribe = this.subscribe.bind(this);\n this.refreshEditorInstance = this.refreshEditorInstance.bind(this);\n this.scheduleDestroy = this.scheduleDestroy.bind(this);\n this.onRender = this.onRender.bind(this);\n this.createEditor = this.createEditor.bind(this);\n }\n setEditor(editor) {\n this.editor = editor;\n this.instanceId = Math.random().toString(36).slice(2, 9);\n // Notify all subscribers that the editor instance has been created\n this.subscriptions.forEach(cb => cb());\n }\n getInitialEditor() {\n if (this.options.current.immediatelyRender === undefined) {\n if (isSSR || isNext) {\n // TODO in the next major release, we should throw an error here\n if (isDev) {\n /**\n * Throw an error in development, to make sure the developer is aware that tiptap cannot be SSR'd\n * and that they need to set `immediatelyRender` to `false` to avoid hydration mismatches.\n */\n console.warn('Tiptap Error: SSR has been detected, please set `immediatelyRender` explicitly to `false` to avoid hydration mismatches.');\n }\n // Best faith effort in production, run the code in the legacy mode to avoid hydration mismatches and errors in production\n return null;\n }\n // Default to immediately rendering when client-side rendering\n return this.createEditor();\n }\n if (this.options.current.immediatelyRender && isSSR && isDev) {\n // Warn in development, to make sure the developer is aware that tiptap cannot be SSR'd, set `immediatelyRender` to `false` to avoid hydration mismatches.\n throw new Error('Tiptap Error: SSR has been detected, and `immediatelyRender` has been set to `true` this is an unsupported configuration that may result in errors, explicitly set `immediatelyRender` to `false` to avoid hydration mismatches.');\n }\n if (this.options.current.immediatelyRender) {\n return this.createEditor();\n }\n return null;\n }\n /**\n * Create a new editor instance. And attach event listeners.\n */\n createEditor() {\n const optionsToApply = {\n ...this.options.current,\n // Always call the most recent version of the callback function by default\n onBeforeCreate: (...args) => { var _a, _b; return (_b = (_a = this.options.current).onBeforeCreate) === null || _b === void 0 ? void 0 : _b.call(_a, ...args); },\n onBlur: (...args) => { var _a, _b; return (_b = (_a = this.options.current).onBlur) === null || _b === void 0 ? void 0 : _b.call(_a, ...args); },\n onCreate: (...args) => { var _a, _b; return (_b = (_a = this.options.current).onCreate) === null || _b === void 0 ? void 0 : _b.call(_a, ...args); },\n onDestroy: (...args) => { var _a, _b; return (_b = (_a = this.options.current).onDestroy) === null || _b === void 0 ? void 0 : _b.call(_a, ...args); },\n onFocus: (...args) => { var _a, _b; return (_b = (_a = this.options.current).onFocus) === null || _b === void 0 ? void 0 : _b.call(_a, ...args); },\n onSelectionUpdate: (...args) => { var _a, _b; return (_b = (_a = this.options.current).onSelectionUpdate) === null || _b === void 0 ? void 0 : _b.call(_a, ...args); },\n onTransaction: (...args) => { var _a, _b; return (_b = (_a = this.options.current).onTransaction) === null || _b === void 0 ? void 0 : _b.call(_a, ...args); },\n onUpdate: (...args) => { var _a, _b; return (_b = (_a = this.options.current).onUpdate) === null || _b === void 0 ? void 0 : _b.call(_a, ...args); },\n onContentError: (...args) => { var _a, _b; return (_b = (_a = this.options.current).onContentError) === null || _b === void 0 ? void 0 : _b.call(_a, ...args); },\n };\n const editor = new Editor(optionsToApply);\n // no need to keep track of the event listeners, they will be removed when the editor is destroyed\n return editor;\n }\n /**\n * Get the current editor instance.\n */\n getEditor() {\n return this.editor;\n }\n /**\n * Always disable the editor on the server-side.\n */\n getServerSnapshot() {\n return null;\n }\n /**\n * Subscribe to the editor instance's changes.\n */\n subscribe(onStoreChange) {\n this.subscriptions.add(onStoreChange);\n return () => {\n this.subscriptions.delete(onStoreChange);\n };\n }\n /**\n * On each render, we will create, update, or destroy the editor instance.\n * @param deps The dependencies to watch for changes\n * @returns A cleanup function\n */\n onRender(deps) {\n // The returned callback will run on each render\n return () => {\n this.isComponentMounted = true;\n // Cleanup any scheduled destructions, since we are currently rendering\n clearTimeout(this.scheduledDestructionTimeout);\n if (this.editor && !this.editor.isDestroyed && deps.length === 0) {\n // if the editor does exist & deps are empty, we don't need to re-initialize the editor\n // we can fast-path to update the editor options on the existing instance\n this.editor.setOptions(this.options.current);\n }\n else {\n // When the editor:\n // - does not yet exist\n // - is destroyed\n // - the deps array changes\n // We need to destroy the editor instance and re-initialize it\n this.refreshEditorInstance(deps);\n }\n return () => {\n this.isComponentMounted = false;\n this.scheduleDestroy();\n };\n };\n }\n /**\n * Recreate the editor instance if the dependencies have changed.\n */\n refreshEditorInstance(deps) {\n if (this.editor && !this.editor.isDestroyed) {\n // Editor instance already exists\n if (this.previousDeps === null) {\n // If lastDeps has not yet been initialized, reuse the current editor instance\n this.previousDeps = deps;\n return;\n }\n const depsAreEqual = this.previousDeps.length === deps.length\n && this.previousDeps.every((dep, index) => dep === deps[index]);\n if (depsAreEqual) {\n // deps exist and are equal, no need to recreate\n return;\n }\n }\n if (this.editor && !this.editor.isDestroyed) {\n // Destroy the editor instance if it exists\n this.editor.destroy();\n }\n this.setEditor(this.createEditor());\n // Update the lastDeps to the current deps\n this.previousDeps = deps;\n }\n /**\n * Schedule the destruction of the editor instance.\n * This will only destroy the editor if it was not mounted on the next tick.\n * This is to avoid destroying the editor instance when it's actually still mounted.\n */\n scheduleDestroy() {\n const currentInstanceId = this.instanceId;\n const currentEditor = this.editor;\n // Wait two ticks to see if the component is still mounted\n this.scheduledDestructionTimeout = setTimeout(() => {\n if (this.isComponentMounted && this.instanceId === currentInstanceId) {\n // If still mounted on the following tick, with the same instanceId, do not destroy the editor\n if (currentEditor) {\n // just re-apply options as they might have changed\n currentEditor.setOptions(this.options.current);\n }\n return;\n }\n if (currentEditor && !currentEditor.isDestroyed) {\n currentEditor.destroy();\n if (this.instanceId === currentInstanceId) {\n this.setEditor(null);\n }\n }\n // This allows the effect to run again between ticks\n // which may save us from having to re-create the editor\n }, 1);\n }\n}\nfunction useEditor(options = {}, deps = []) {\n const mostRecentOptions = useRef(options);\n mostRecentOptions.current = options;\n const [instanceManager] = useState(() => new EditorInstanceManager(mostRecentOptions));\n const editor = shimExports.useSyncExternalStore(instanceManager.subscribe, instanceManager.getEditor, instanceManager.getServerSnapshot);\n useDebugValue(editor);\n // This effect will handle creating/updating the editor instance\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(instanceManager.onRender(deps));\n // The default behavior is to re-render on each transaction\n // This is legacy behavior that will be removed in future versions\n useEditorState({\n editor,\n selector: ({ transactionNumber }) => {\n if (options.shouldRerenderOnTransaction === false) {\n // This will prevent the editor from re-rendering on each transaction\n return null;\n }\n // This will avoid re-rendering on the first transaction when `immediatelyRender` is set to `true`\n if (options.immediatelyRender && transactionNumber === 0) {\n return 0;\n }\n return transactionNumber + 1;\n },\n });\n return editor;\n}\n\nconst EditorContext = createContext({\n editor: null,\n});\nconst EditorConsumer = EditorContext.Consumer;\n/**\n * A hook to get the current editor instance.\n */\nconst useCurrentEditor = () => useContext(EditorContext);\n/**\n * This is the provider component for the editor.\n * It allows the editor to be accessible across the entire component tree\n * with `useCurrentEditor`.\n */\nfunction EditorProvider({ children, slotAfter, slotBefore, ...editorOptions }) {\n const editor = useEditor(editorOptions);\n if (!editor) {\n return null;\n }\n return (React.createElement(EditorContext.Provider, { value: { editor } },\n slotBefore,\n React.createElement(EditorConsumer, null, ({ editor: currentEditor }) => (React.createElement(EditorContent, { editor: currentEditor }))),\n children,\n slotAfter));\n}\n\nconst BubbleMenu = (props) => {\n const [element, setElement] = useState(null);\n const { editor: currentEditor } = useCurrentEditor();\n useEffect(() => {\n var _a;\n if (!element) {\n return;\n }\n if (((_a = props.editor) === null || _a === void 0 ? void 0 : _a.isDestroyed) || (currentEditor === null || currentEditor === void 0 ? void 0 : currentEditor.isDestroyed)) {\n return;\n }\n const { pluginKey = 'bubbleMenu', editor, tippyOptions = {}, updateDelay, shouldShow = null, } = props;\n const menuEditor = editor || currentEditor;\n if (!menuEditor) {\n console.warn('BubbleMenu component is not rendered inside of an editor component or does not have editor prop.');\n return;\n }\n const plugin = BubbleMenuPlugin({\n updateDelay,\n editor: menuEditor,\n element,\n pluginKey,\n shouldShow,\n tippyOptions,\n });\n menuEditor.registerPlugin(plugin);\n return () => menuEditor.unregisterPlugin(pluginKey);\n }, [props.editor, currentEditor, element]);\n return (React.createElement(\"div\", { ref: setElement, className: props.className, style: { visibility: 'hidden' } }, props.children));\n};\n\nconst FloatingMenu = (props) => {\n const [element, setElement] = useState(null);\n const { editor: currentEditor } = useCurrentEditor();\n useEffect(() => {\n var _a;\n if (!element) {\n return;\n }\n if (((_a = props.editor) === null || _a === void 0 ? void 0 : _a.isDestroyed) || (currentEditor === null || currentEditor === void 0 ? void 0 : currentEditor.isDestroyed)) {\n return;\n }\n const { pluginKey = 'floatingMenu', editor, tippyOptions = {}, shouldShow = null, } = props;\n const menuEditor = editor || currentEditor;\n if (!menuEditor) {\n console.warn('FloatingMenu component is not rendered inside of an editor component or does not have editor prop.');\n return;\n }\n const plugin = FloatingMenuPlugin({\n pluginKey,\n editor: menuEditor,\n element,\n tippyOptions,\n shouldShow,\n });\n menuEditor.registerPlugin(plugin);\n return () => menuEditor.unregisterPlugin(pluginKey);\n }, [\n props.editor,\n currentEditor,\n element,\n ]);\n return (React.createElement(\"div\", { ref: setElement, className: props.className, style: { visibility: 'hidden' } }, props.children));\n};\n\nconst ReactNodeViewContext = createContext({\n onDragStart: undefined,\n});\nconst useReactNodeView = () => useContext(ReactNodeViewContext);\n\nconst NodeViewContent = props => {\n const Tag = props.as || 'div';\n const { nodeViewContentRef } = useReactNodeView();\n return (\n // @ts-ignore\n React.createElement(Tag, { ...props, ref: nodeViewContentRef, \"data-node-view-content\": \"\", style: {\n whiteSpace: 'pre-wrap',\n ...props.style,\n } }));\n};\n\nconst NodeViewWrapper = React.forwardRef((props, ref) => {\n const { onDragStart } = useReactNodeView();\n const Tag = props.as || 'div';\n return (\n // @ts-ignore\n React.createElement(Tag, { ...props, ref: ref, \"data-node-view-wrapper\": \"\", onDragStart: onDragStart, style: {\n whiteSpace: 'normal',\n ...props.style,\n } }));\n});\n\n/**\n * Check if a component is a class component.\n * @param Component\n * @returns {boolean}\n */\nfunction isClassComponent(Component) {\n return !!(typeof Component === 'function'\n && Component.prototype\n && Component.prototype.isReactComponent);\n}\n/**\n * Check if a component is a forward ref component.\n * @param Component\n * @returns {boolean}\n */\nfunction isForwardRefComponent(Component) {\n var _a;\n return !!(typeof Component === 'object'\n && ((_a = Component.$$typeof) === null || _a === void 0 ? void 0 : _a.toString()) === 'Symbol(react.forward_ref)');\n}\n/**\n * The ReactRenderer class. It's responsible for rendering React components inside the editor.\n * @example\n * new ReactRenderer(MyComponent, {\n * editor,\n * props: {\n * foo: 'bar',\n * },\n * as: 'span',\n * })\n*/\nclass ReactRenderer {\n constructor(component, { editor, props = {}, as = 'div', className = '', attrs, }) {\n this.ref = null;\n this.id = Math.floor(Math.random() * 0xFFFFFFFF).toString();\n this.component = component;\n this.editor = editor;\n this.props = props;\n this.element = document.createElement(as);\n this.element.classList.add('react-renderer');\n if (className) {\n this.element.classList.add(...className.split(' '));\n }\n if (attrs) {\n Object.keys(attrs).forEach(key => {\n this.element.setAttribute(key, attrs[key]);\n });\n }\n if (this.editor.isInitialized) {\n // On first render, we need to flush the render synchronously\n // Renders afterwards can be async, but this fixes a cursor positioning issue\n flushSync(() => {\n this.render();\n });\n }\n else {\n this.render();\n }\n }\n render() {\n var _a;\n const Component = this.component;\n const props = this.props;\n const editor = this.editor;\n if (isClassComponent(Component) || isForwardRefComponent(Component)) {\n props.ref = (ref) => {\n this.ref = ref;\n };\n }\n this.reactElement = React.createElement(Component, props);\n (_a = editor === null || editor === void 0 ? void 0 : editor.contentComponent) === null || _a === void 0 ? void 0 : _a.setRenderer(this.id, this);\n }\n updateProps(props = {}) {\n this.props = {\n ...this.props,\n ...props,\n };\n this.render();\n }\n destroy() {\n var _a;\n const editor = this.editor;\n (_a = editor === null || editor === void 0 ? void 0 : editor.contentComponent) === null || _a === void 0 ? void 0 : _a.removeRenderer(this.id);\n }\n}\n\nclass ReactNodeView extends NodeView {\n mount() {\n const props = {\n editor: this.editor,\n node: this.node,\n decorations: this.decorations,\n selected: false,\n extension: this.extension,\n getPos: () => this.getPos(),\n updateAttributes: (attributes = {}) => this.updateAttributes(attributes),\n deleteNode: () => this.deleteNode(),\n };\n if (!this.component.displayName) {\n const capitalizeFirstChar = (string) => {\n return string.charAt(0).toUpperCase() + string.substring(1);\n };\n this.component.displayName = capitalizeFirstChar(this.extension.name);\n }\n const onDragStart = this.onDragStart.bind(this);\n const nodeViewContentRef = element => {\n if (element && this.contentDOMElement && element.firstChild !== this.contentDOMElement) {\n element.appendChild(this.contentDOMElement);\n }\n };\n const context = { onDragStart, nodeViewContentRef };\n const Component = this.component;\n // For performance reasons, we memoize the provider component\n // And all of the things it requires are declared outside of the component, so it doesn't need to re-render\n const ReactNodeViewProvider = React.memo(componentProps => {\n return (React.createElement(ReactNodeViewContext.Provider, { value: context }, React.createElement(Component, componentProps)));\n });\n ReactNodeViewProvider.displayName = 'ReactNodeView';\n if (this.node.isLeaf) {\n this.contentDOMElement = null;\n }\n else if (this.options.contentDOMElementTag) {\n this.contentDOMElement = document.createElement(this.options.contentDOMElementTag);\n }\n else {\n this.contentDOMElement = document.createElement(this.node.isInline ? 'span' : 'div');\n }\n if (this.contentDOMElement) {\n // For some reason the whiteSpace prop is not inherited properly in Chrome and Safari\n // With this fix it seems to work fine\n // See: https://github.com/ueberdosis/tiptap/issues/1197\n this.contentDOMElement.style.whiteSpace = 'inherit';\n }\n let as = this.node.isInline ? 'span' : 'div';\n if (this.options.as) {\n as = this.options.as;\n }\n const { className = '' } = this.options;\n this.handleSelectionUpdate = this.handleSelectionUpdate.bind(this);\n this.editor.on('selectionUpdate', this.handleSelectionUpdate);\n this.renderer = new ReactRenderer(ReactNodeViewProvider, {\n editor: this.editor,\n props,\n as,\n className: `node-${this.node.type.name} ${className}`.trim(),\n attrs: this.options.attrs,\n });\n }\n get dom() {\n var _a;\n if (this.renderer.element.firstElementChild\n && !((_a = this.renderer.element.firstElementChild) === null || _a === void 0 ? void 0 : _a.hasAttribute('data-node-view-wrapper'))) {\n throw Error('Please use the NodeViewWrapper component for your node view.');\n }\n return this.renderer.element;\n }\n get contentDOM() {\n if (this.node.isLeaf) {\n return null;\n }\n return this.contentDOMElement;\n }\n handleSelectionUpdate() {\n const { from, to } = this.editor.state.selection;\n if (from <= this.getPos() && to >= this.getPos() + this.node.nodeSize) {\n if (this.renderer.props.selected) {\n return;\n }\n this.selectNode();\n }\n else {\n if (!this.renderer.props.selected) {\n return;\n }\n this.deselectNode();\n }\n }\n update(node, decorations) {\n const updateProps = (props) => {\n this.renderer.updateProps(props);\n };\n if (node.type !== this.node.type) {\n return false;\n }\n if (typeof this.options.update === 'function') {\n const oldNode = this.node;\n const oldDecorations = this.decorations;\n this.node = node;\n this.decorations = decorations;\n return this.options.update({\n oldNode,\n oldDecorations,\n newNode: node,\n newDecorations: decorations,\n updateProps: () => updateProps({ node, decorations }),\n });\n }\n if (node === this.node && this.decorations === decorations) {\n return true;\n }\n this.node = node;\n this.decorations = decorations;\n updateProps({ node, decorations });\n return true;\n }\n selectNode() {\n this.renderer.updateProps({\n selected: true,\n });\n this.renderer.element.classList.add('ProseMirror-selectednode');\n }\n deselectNode() {\n this.renderer.updateProps({\n selected: false,\n });\n this.renderer.element.classList.remove('ProseMirror-selectednode');\n }\n destroy() {\n this.renderer.destroy();\n this.editor.off('selectionUpdate', this.handleSelectionUpdate);\n this.contentDOMElement = null;\n }\n}\nfunction ReactNodeViewRenderer(component, options) {\n return (props) => {\n // try to get the parent component\n // this is important for vue devtools to show the component hierarchy correctly\n // maybe it’s `undefined` because <editor-content> isn’t rendered yet\n if (!props.editor.contentComponent) {\n return {};\n }\n return new ReactNodeView(component, props, options);\n };\n}\n\nexport { BubbleMenu, EditorConsumer, EditorContent, EditorContext, EditorProvider, FloatingMenu, NodeViewContent, NodeViewWrapper, PureEditorContent, ReactNodeViewContext, ReactNodeViewRenderer, ReactRenderer, useCurrentEditor, useEditor, useEditorState, useReactNodeView };\n//# sourceMappingURL=index.js.map\n","import { SelectionRange, Selection, PluginKey, Plugin } from '@tiptap/pm/state';\nimport tippy from 'tippy.js';\nimport { ySyncPluginKey, absolutePositionToRelativePosition } from 'y-prosemirror';\nimport { NodeRange } from '@tiptap/pm/model';\n\nfunction getSelectionRanges(state, range, depth) {\n const ranges = [];\n const root = state.node(0);\n depth =\n typeof depth === 'number' && depth >= 0\n ? depth\n : state.sameParent(range)\n ? Math.max(0, state.sharedDepth(range.pos) - 1)\n : state.sharedDepth(range.pos);\n const nodeRange = new NodeRange(state, range, depth);\n const startIndex = nodeRange.depth === 0 ? 0 : root.resolve(nodeRange.start).posAtIndex(0);\n nodeRange.parent.forEach((size, offset) => {\n const from = startIndex + offset;\n const to = from + size.nodeSize;\n if (from < nodeRange.start || from >= nodeRange.end)\n return;\n const selectionRange = new SelectionRange(root.resolve(from), root.resolve(to));\n ranges.push(selectionRange);\n });\n return ranges;\n}\nclass NodeRangeBookmark {\n anchor;\n head;\n constructor(anchor, head) {\n this.anchor = anchor;\n this.head = head;\n }\n map(mapping) {\n return new NodeRangeBookmark(mapping.map(this.anchor), mapping.map(this.head));\n }\n resolve(doc) {\n const e = doc.resolve(this.anchor);\n const o = doc.resolve(this.head);\n return new NodeRangeSelection(e, o);\n }\n}\nclass NodeRangeSelection extends Selection {\n depth;\n constructor(t, e, o, s = 1) {\n const { doc: r } = t;\n const n = t === e;\n const i = t.pos === r.content.size && e.pos === r.content.size;\n const a = n && !i ? r.resolve(e.pos + (s > 0 ? 1 : -1)) : e;\n const c = n && i ? r.resolve(t.pos - (s > 0 ? 1 : -1)) : t;\n const d = getSelectionRanges(c.min(a), c.max(a), o);\n super(a.pos >= t.pos ? d[0].$from : d[d.length - 1].$to, a.pos >= t.pos ? d[d.length - 1].$to : d[0].$from, d);\n this.depth = o;\n }\n get $to() {\n return this.ranges[this.ranges.length - 1].$to;\n }\n eq(other) {\n return other instanceof NodeRangeSelection && other.$from.pos === this.$from.pos && other.$to.pos === this.$to.pos;\n }\n map(doc, mapping) {\n const o = doc.resolve(mapping.map(this.anchor));\n const s = doc.resolve(mapping.map(this.head));\n return new NodeRangeSelection(o, s);\n }\n toJSON() {\n return { type: 'nodeRange', anchor: this.anchor, head: this.head };\n }\n get isForwards() {\n return this.head >= this.anchor;\n }\n get isBackwards() {\n return !this.isForwards;\n }\n extendBackwards() {\n const { doc: t } = this.$from;\n if (this.isForwards && this.ranges.length > 1) {\n const t = this.ranges.slice(0, -1);\n const e = t[0].$from;\n const o = t[t.length - 1].$to;\n return new NodeRangeSelection(e, o, this.depth);\n }\n const e = this.ranges[0];\n const o = t.resolve(Math.max(0, e.$from.pos - 1));\n return new NodeRangeSelection(this.$anchor, o, this.depth);\n }\n extendForwards() {\n const { doc: t } = this.$from;\n if (this.isBackwards && this.ranges.length > 1) {\n const t = this.ranges.slice(1);\n const e = t[0].$from;\n const o = t[t.length - 1].$to;\n return new NodeRangeSelection(o, e, this.depth);\n }\n const e = this.ranges[this.ranges.length - 1];\n const o = t.resolve(Math.min(t.content.size, e.$to.pos + 1));\n return new NodeRangeSelection(this.$anchor, o, this.depth);\n }\n static fromJSON(doc, json) {\n return new NodeRangeSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n }\n static create(doc, anchor, head, depth, bias = 1) {\n return new this(doc.resolve(anchor), doc.resolve(head), depth, bias);\n }\n getBookmark() {\n return new NodeRangeBookmark(this.anchor, this.head);\n }\n}\n\nfunction cloneElement(node) {\n const clonedNode = node.cloneNode(true);\n const originalElements = [node, ...Array.from(node.getElementsByTagName('*'))];\n const clonedElements = [clonedNode, ...Array.from(clonedNode.getElementsByTagName('*'))];\n originalElements.forEach((element, index) => {\n clonedElements[index].style.cssText = (function (element) {\n let styles = '';\n const computedStyles = getComputedStyle(element);\n for (let i = 0; i < computedStyles.length; i += 1) {\n styles += `${computedStyles[i]}:${computedStyles.getPropertyValue(computedStyles[i])};`;\n }\n return styles;\n })(element);\n });\n return clonedNode;\n}\nfunction getComputedStyles(node, property) {\n return window.getComputedStyle(node)[property];\n}\nfunction minMax(value = 0, min = 0, max = 0) {\n return Math.min(Math.max(value, min), max);\n}\nfunction removeNode(node) {\n if (node.parentNode !== null && node.parentNode !== undefined) {\n node.parentNode.removeChild(node);\n }\n}\nconst findElementNextToCoords = (options) => {\n const { x, y, direction, editor } = options;\n let resultElement = null;\n let resultNode = null;\n let d = null;\n let l = x;\n for (; null === resultNode && l < window.innerWidth && l > 0;) {\n const elements = document.elementsFromPoint(l, y);\n const index = elements.findIndex(el => el.classList.contains('ProseMirror'));\n const filteredElements = elements.slice(0, index);\n if (filteredElements.length > 0) {\n const element = filteredElements[0];\n resultElement = element;\n d = editor.view.posAtDOM(element, 0);\n if (d >= 0) {\n resultNode = editor.state.doc.nodeAt(Math.max(d - 1, 0));\n if (resultNode === null || resultNode.isText) {\n resultNode = editor.state.doc.nodeAt(Math.max(d - 1, 0));\n }\n if (!resultNode) {\n resultNode = editor.state.doc.nodeAt(Math.max(d, 0));\n }\n break;\n }\n }\n if (direction === 'left') {\n l -= 1;\n }\n else {\n l += 1;\n }\n }\n return { resultElement, resultNode, pos: d !== null ? d : null };\n};\n\nfunction getSelectionRangesNearCursor(e, t) {\n const { doc: n } = t.view.state, o = findElementNextToCoords({ editor: t, x: e.clientX, y: e.clientY, direction: 'right' });\n if (!o.resultNode || null === o.pos)\n return [];\n const r = e.clientX, i = (function (e, t, n) {\n const o = parseInt(getComputedStyles(e.dom, 'paddingLeft'), 10), r = parseInt(getComputedStyles(e.dom, 'paddingRight'), 10), i = parseInt(getComputedStyles(e.dom, 'borderLeftWidth'), 10), s = parseInt(getComputedStyles(e.dom, 'borderLeftWidth'), 10), d = e.dom.getBoundingClientRect();\n return { left: minMax(t, d.left + o + i, d.right - r - s), top: n };\n })(t.view, r, e.clientY), s = t.view.posAtCoords(i);\n if (!s)\n return [];\n const { pos: d } = s;\n if (!n.resolve(d).parent)\n return [];\n const a = n.resolve(o.pos), p = n.resolve(o.pos + 1);\n return getSelectionRanges(a, p, 0);\n}\nconst getPreviousNodeStartPosition = (e, t) => {\n const n = e.resolve(t), { depth: o } = n;\n if (0 === o)\n return t;\n return n.pos - n.parentOffset - 1;\n};\nconst getAncestorNodeAtDepth = (e, t) => {\n const n = e.nodeAt(t), o = e.resolve(t);\n let { depth: r } = o, i = n;\n for (; r > 0;) {\n const e = o.node(r);\n (r -= 1), 0 === r && (i = e);\n }\n return i;\n};\nconst getOuterNode = (doc, pos) => {\n const n = ySyncPluginKey.getState(doc);\n return n ? absolutePositionToRelativePosition(pos, n.type, n.binding.mapping) : null;\n};\nconst getOuterNodePos = (e, t) => {\n let n = t;\n for (; n && n.parentNode && n.parentNode !== e.dom;)\n n = n.parentNode;\n return n;\n};\nconst dragHandlePluginDefaultKey = new PluginKey('dragHandle');\nconst DragHandlePlugin = ({ pluginKey: e = dragHandlePluginDefaultKey, element, editor, tippyOptions, onNodeChange, }) => {\n const container = document.createElement('div');\n let tippyInstance = null;\n let x = false;\n let currentNode = null;\n let lastNodePos = -1;\n element.addEventListener('dragstart', e => {\n const { view } = editor;\n if (!e.dataTransfer)\n return;\n const { empty, $from, $to } = view.state.selection;\n const s = getSelectionRangesNearCursor(e, editor);\n const d = getSelectionRanges($from, $to, 0);\n const c = d.some(e => s.find(t => t.$from === e.$from && t.$to === e.$to));\n const u = empty || !c ? s : d;\n if (!u.length)\n return;\n const { tr: g } = view.state;\n const h = document.createElement('div');\n const y = u[0].$from.pos;\n const v = u[u.length - 1].$to.pos;\n const C = NodeRangeSelection.create(view.state.doc, y, v);\n const E = C.content();\n u.forEach(e => {\n const t = cloneElement(view.nodeDOM(e.$from.pos));\n h.append(t);\n });\n h.style.position = 'absolute';\n h.style.top = '-10000px';\n document.body.append(h);\n e.dataTransfer.clearData();\n e.dataTransfer.setDragImage(h, 0, 0);\n view.dragging = { slice: E, move: true };\n g.setSelection(C);\n view.dispatch(g);\n document.addEventListener('drop', () => removeNode(h), { once: true });\n setTimeout(() => {\n element && (element.style.pointerEvents = 'none');\n }, 0);\n });\n element.addEventListener('dragend', () => {\n element && (element.style.pointerEvents = 'auto');\n });\n return new Plugin({\n key: typeof e === 'string' ? new PluginKey(e) : e,\n state: {\n init: () => ({ locked: false }),\n apply(e, t, n, o) {\n const l = e.getMeta('lockDragHandle');\n const a = e.getMeta('hideDragHandle');\n if ((undefined !== l && (x = l), a && tippyInstance)) {\n return (tippyInstance.hide(),\n (x = false),\n (currentNode = null),\n (lastNodePos = -1),\n null == onNodeChange || onNodeChange({ editor: editor, node: null, pos: -1 }),\n t);\n }\n if (e.docChanged && -1 !== lastNodePos && element && tippyInstance) {\n const t = e.mapping.map(lastNodePos);\n t !== lastNodePos && ((lastNodePos = t), (getOuterNode(o, lastNodePos)));\n }\n return t;\n },\n },\n view: e => {\n var t;\n return ((element.draggable = true),\n (element.style.pointerEvents = 'auto'),\n null === (t = editor.view.dom.parentElement) || undefined === t || t.appendChild(container),\n container.appendChild(element),\n (container.style.pointerEvents = 'none'),\n (container.style.position = 'absolute'),\n (container.style.top = '0'),\n (container.style.left = '0'),\n (tippyInstance = tippy(e.dom, {\n getReferenceClientRect: null,\n interactive: true,\n trigger: 'manual',\n placement: 'left-start',\n hideOnClick: false,\n duration: 100,\n zIndex: 10,\n popperOptions: {\n modifiers: [\n { name: 'flip', enabled: false },\n { name: 'preventOverflow', options: { rootBoundary: 'document', mainAxis: false } },\n ],\n },\n ...tippyOptions,\n appendTo: container,\n content: element,\n })),\n {\n update(t, n) {\n if (!element || !tippyInstance)\n return;\n if (((element.draggable = !x), e.state.doc.eq(n.doc) || -1 === lastNodePos))\n return;\n let o = e.nodeDOM(lastNodePos);\n if (((o = getOuterNodePos(e, o)), o === e.dom))\n return;\n if (1 !== (null == o ? undefined : o.nodeType))\n return;\n const r = e.posAtDOM(o, 0), s = getAncestorNodeAtDepth(editor.state.doc, r);\n if (s !== currentNode) {\n const t = getPreviousNodeStartPosition(editor.state.doc, r);\n (currentNode = s),\n (lastNodePos = t),\n (getOuterNode(e.state, lastNodePos)),\n null == onNodeChange || onNodeChange({ editor: editor, node: currentNode, pos: lastNodePos }),\n tippyInstance.setProps({ getReferenceClientRect: () => o.getBoundingClientRect() }),\n tippyInstance.show();\n }\n },\n destroy() {\n null == tippyInstance || tippyInstance.destroy(), element && removeNode(container);\n },\n });\n },\n props: {\n handleDOMEvents: {\n mouseleave: (e, event) => (x ||\n (event.target &&\n !container.contains(event.relatedTarget) &&\n (null == tippyInstance || tippyInstance.hide(),\n (currentNode = null),\n (lastNodePos = -1),\n null == onNodeChange || onNodeChange({ editor: editor, node: null, pos: -1 }))),\n false),\n mousemove(e, t) {\n if (!element || !tippyInstance || x)\n return false;\n const n = findElementNextToCoords({ x: t.clientX, y: t.clientY, direction: 'right', editor: editor });\n if (!n.resultElement)\n return false;\n let o = n.resultElement;\n if (((o = getOuterNodePos(e, o)), o === e.dom))\n return false;\n if (1 !== (null == o ? undefined : o.nodeType))\n return false;\n const r = e.posAtDOM(o, 0), s = getAncestorNodeAtDepth(editor.state.doc, r);\n if (s !== currentNode) {\n const t = getPreviousNodeStartPosition(editor.state.doc, r);\n (currentNode = s),\n (lastNodePos = t),\n (getOuterNode(e.state, lastNodePos)),\n null == onNodeChange || onNodeChange({ editor: editor, node: currentNode, pos: lastNodePos }),\n tippyInstance.setProps({ getReferenceClientRect: () => o.getBoundingClientRect() }),\n tippyInstance.show();\n }\n return false;\n },\n },\n },\n });\n};\n\nexport { DragHandlePlugin, dragHandlePluginDefaultKey };\n","import { Mark, mergeAttributes, markInputRule, markPasteRule } from '@tiptap/core';\n\n/**\n * Matches an italic to a *italic* on input.\n */\nconst starInputRegex = /(?:^|\\s)(\\*(?!\\s+\\*)((?:[^*]+))\\*(?!\\s+\\*))$/;\n/**\n * Matches an italic to a *italic* on paste.\n */\nconst starPasteRegex = /(?:^|\\s)(\\*(?!\\s+\\*)((?:[^*]+))\\*(?!\\s+\\*))/g;\n/**\n * Matches an italic to a _italic_ on input.\n */\nconst underscoreInputRegex = /(?:^|\\s)(_(?!\\s+_)((?:[^_]+))_(?!\\s+_))$/;\n/**\n * Matches an italic to a _italic_ on paste.\n */\nconst underscorePasteRegex = /(?:^|\\s)(_(?!\\s+_)((?:[^_]+))_(?!\\s+_))/g;\n/**\n * This extension allows you to create italic text.\n * @see https://www.tiptap.dev/api/marks/italic\n */\nconst Italic = Mark.create({\n name: 'italic',\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n parseHTML() {\n return [\n {\n tag: 'em',\n },\n {\n tag: 'i',\n getAttrs: node => node.style.fontStyle !== 'normal' && null,\n },\n {\n style: 'font-style=italic',\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['em', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n setItalic: () => ({ commands }) => {\n return commands.setMark(this.name);\n },\n toggleItalic: () => ({ commands }) => {\n return commands.toggleMark(this.name);\n },\n unsetItalic: () => ({ commands }) => {\n return commands.unsetMark(this.name);\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-i': () => this.editor.commands.toggleItalic(),\n 'Mod-I': () => this.editor.commands.toggleItalic(),\n };\n },\n addInputRules() {\n return [\n markInputRule({\n find: starInputRegex,\n type: this.type,\n }),\n markInputRule({\n find: underscoreInputRegex,\n type: this.type,\n }),\n ];\n },\n addPasteRules() {\n return [\n markPasteRule({\n find: starPasteRegex,\n type: this.type,\n }),\n markPasteRule({\n find: underscorePasteRegex,\n type: this.type,\n }),\n ];\n },\n});\n\nexport { Italic, Italic as default, starInputRegex, starPasteRegex, underscoreInputRegex, underscorePasteRegex };\n//# sourceMappingURL=index.js.map\n","import { Mark, mergeAttributes } from '@tiptap/core';\n\n/**\n * This extension allows you to create underline text.\n * @see https://www.tiptap.dev/api/marks/underline\n */\nconst Underline = Mark.create({\n name: 'underline',\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n parseHTML() {\n return [\n {\n tag: 'u',\n },\n {\n style: 'text-decoration',\n consuming: false,\n getAttrs: style => (style.includes('underline') ? {} : false),\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['u', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n setUnderline: () => ({ commands }) => {\n return commands.setMark(this.name);\n },\n toggleUnderline: () => ({ commands }) => {\n return commands.toggleMark(this.name);\n },\n unsetUnderline: () => ({ commands }) => {\n return commands.unsetMark(this.name);\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-u': () => this.editor.commands.toggleUnderline(),\n 'Mod-U': () => this.editor.commands.toggleUnderline(),\n };\n },\n});\n\nexport { Underline, Underline as default };\n//# sourceMappingURL=index.js.map\n","import { Mark, mergeAttributes, markInputRule, markPasteRule } from '@tiptap/core';\n\n/**\n * Matches a strike to a ~~strike~~ on input.\n */\nconst inputRegex = /(?:^|\\s)(~~(?!\\s+~~)((?:[^~]+))~~(?!\\s+~~))$/;\n/**\n * Matches a strike to a ~~strike~~ on paste.\n */\nconst pasteRegex = /(?:^|\\s)(~~(?!\\s+~~)((?:[^~]+))~~(?!\\s+~~))/g;\n/**\n * This extension allows you to create strike text.\n * @see https://www.tiptap.dev/api/marks/strike\n */\nconst Strike = Mark.create({\n name: 'strike',\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n parseHTML() {\n return [\n {\n tag: 's',\n },\n {\n tag: 'del',\n },\n {\n tag: 'strike',\n },\n {\n style: 'text-decoration',\n consuming: false,\n getAttrs: style => (style.includes('line-through') ? {} : false),\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['s', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n setStrike: () => ({ commands }) => {\n return commands.setMark(this.name);\n },\n toggleStrike: () => ({ commands }) => {\n return commands.toggleMark(this.name);\n },\n unsetStrike: () => ({ commands }) => {\n return commands.unsetMark(this.name);\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-Shift-s': () => this.editor.commands.toggleStrike(),\n };\n },\n addInputRules() {\n return [\n markInputRule({\n find: inputRegex,\n type: this.type,\n }),\n ];\n },\n addPasteRules() {\n return [\n markPasteRule({\n find: pasteRegex,\n type: this.type,\n }),\n ];\n },\n});\n\nexport { Strike, Strike as default, inputRegex, pasteRegex };\n//# sourceMappingURL=index.js.map\n","import { Mark, mergeAttributes, markInputRule, markPasteRule } from '@tiptap/core';\n\n/**\n * Matches inline code.\n */\nconst inputRegex = /(?:^|\\s)(`(?!\\s+`)((?:[^`]+))`(?!\\s+`))$/;\n/**\n * Matches inline code while pasting.\n */\nconst pasteRegex = /(?:^|\\s)(`(?!\\s+`)((?:[^`]+))`(?!\\s+`))/g;\n/**\n * This extension allows you to mark text as inline code.\n * @see https://tiptap.dev/api/marks/code\n */\nconst Code = Mark.create({\n name: 'code',\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n excludes: '_',\n code: true,\n exitable: true,\n parseHTML() {\n return [\n { tag: 'code' },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['code', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n setCode: () => ({ commands }) => {\n return commands.setMark(this.name);\n },\n toggleCode: () => ({ commands }) => {\n return commands.toggleMark(this.name);\n },\n unsetCode: () => ({ commands }) => {\n return commands.unsetMark(this.name);\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-e': () => this.editor.commands.toggleCode(),\n };\n },\n addInputRules() {\n return [\n markInputRule({\n find: inputRegex,\n type: this.type,\n }),\n ];\n },\n addPasteRules() {\n return [\n markPasteRule({\n find: pasteRegex,\n type: this.type,\n }),\n ];\n },\n});\n\nexport { Code, Code as default, inputRegex, pasteRegex };\n//# sourceMappingURL=index.js.map\n","import { Node, mergeAttributes, textblockTypeInputRule } from '@tiptap/core';\nimport { Selection, Plugin, PluginKey, TextSelection } from '@tiptap/pm/state';\n\n/**\n * Matches a code block with backticks.\n */\nconst backtickInputRegex = /^```([a-z]+)?[\\s\\n]$/;\n/**\n * Matches a code block with tildes.\n */\nconst tildeInputRegex = /^~~~([a-z]+)?[\\s\\n]$/;\n/**\n * This extension allows you to create code blocks.\n * @see https://tiptap.dev/api/nodes/code-block\n */\nconst CodeBlock = Node.create({\n name: 'codeBlock',\n addOptions() {\n return {\n languageClassPrefix: 'language-',\n exitOnTripleEnter: true,\n exitOnArrowDown: true,\n defaultLanguage: null,\n HTMLAttributes: {},\n };\n },\n content: 'text*',\n marks: '',\n group: 'block',\n code: true,\n defining: true,\n addAttributes() {\n return {\n language: {\n default: this.options.defaultLanguage,\n parseHTML: element => {\n var _a;\n const { languageClassPrefix } = this.options;\n const classNames = [...(((_a = element.firstElementChild) === null || _a === void 0 ? void 0 : _a.classList) || [])];\n const languages = classNames\n .filter(className => className.startsWith(languageClassPrefix))\n .map(className => className.replace(languageClassPrefix, ''));\n const language = languages[0];\n if (!language) {\n return null;\n }\n return language;\n },\n rendered: false,\n },\n };\n },\n parseHTML() {\n return [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n },\n ];\n },\n renderHTML({ node, HTMLAttributes }) {\n return [\n 'pre',\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),\n [\n 'code',\n {\n class: node.attrs.language\n ? this.options.languageClassPrefix + node.attrs.language\n : null,\n },\n 0,\n ],\n ];\n },\n addCommands() {\n return {\n setCodeBlock: attributes => ({ commands }) => {\n return commands.setNode(this.name, attributes);\n },\n toggleCodeBlock: attributes => ({ commands }) => {\n return commands.toggleNode(this.name, 'paragraph', attributes);\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-Alt-c': () => this.editor.commands.toggleCodeBlock(),\n // remove code block when at start of document or code block is empty\n Backspace: () => {\n const { empty, $anchor } = this.editor.state.selection;\n const isAtStart = $anchor.pos === 1;\n if (!empty || $anchor.parent.type.name !== this.name) {\n return false;\n }\n if (isAtStart || !$anchor.parent.textContent.length) {\n return this.editor.commands.clearNodes();\n }\n return false;\n },\n // exit node on triple enter\n Enter: ({ editor }) => {\n if (!this.options.exitOnTripleEnter) {\n return false;\n }\n const { state } = editor;\n const { selection } = state;\n const { $from, empty } = selection;\n if (!empty || $from.parent.type !== this.type) {\n return false;\n }\n const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2;\n const endsWithDoubleNewline = $from.parent.textContent.endsWith('\\n\\n');\n if (!isAtEnd || !endsWithDoubleNewline) {\n return false;\n }\n return editor\n .chain()\n .command(({ tr }) => {\n tr.delete($from.pos - 2, $from.pos);\n return true;\n })\n .exitCode()\n .run();\n },\n // exit node on arrow down\n ArrowDown: ({ editor }) => {\n if (!this.options.exitOnArrowDown) {\n return false;\n }\n const { state } = editor;\n const { selection, doc } = state;\n const { $from, empty } = selection;\n if (!empty || $from.parent.type !== this.type) {\n return false;\n }\n const isAtEnd = $from.parentOffset === $from.parent.nodeSize - 2;\n if (!isAtEnd) {\n return false;\n }\n const after = $from.after();\n if (after === undefined) {\n return false;\n }\n const nodeAfter = doc.nodeAt(after);\n if (nodeAfter) {\n return editor.commands.command(({ tr }) => {\n tr.setSelection(Selection.near(doc.resolve(after)));\n return true;\n });\n }\n return editor.commands.exitCode();\n },\n };\n },\n addInputRules() {\n return [\n textblockTypeInputRule({\n find: backtickInputRegex,\n type: this.type,\n getAttributes: match => ({\n language: match[1],\n }),\n }),\n textblockTypeInputRule({\n find: tildeInputRegex,\n type: this.type,\n getAttributes: match => ({\n language: match[1],\n }),\n }),\n ];\n },\n addProseMirrorPlugins() {\n return [\n // this plugin creates a code block for pasted content from VS Code\n // we can also detect the copied code language\n new Plugin({\n key: new PluginKey('codeBlockVSCodeHandler'),\n props: {\n handlePaste: (view, event) => {\n if (!event.clipboardData) {\n return false;\n }\n // don’t create a new code block within code blocks\n if (this.editor.isActive(this.type.name)) {\n return false;\n }\n const text = event.clipboardData.getData('text/plain');\n const vscode = event.clipboardData.getData('vscode-editor-data');\n const vscodeData = vscode ? JSON.parse(vscode) : undefined;\n const language = vscodeData === null || vscodeData === void 0 ? void 0 : vscodeData.mode;\n if (!text || !language) {\n return false;\n }\n const { tr, schema } = view.state;\n // prepare a text node\n // strip carriage return chars from text pasted as code\n // see: https://github.com/ProseMirror/prosemirror-view/commit/a50a6bcceb4ce52ac8fcc6162488d8875613aacd\n const textNode = schema.text(text.replace(/\\r\\n?/g, '\\n'));\n // create a code block with the text node\n // replace selection with the code block\n tr.replaceSelectionWith(this.type.create({ language }, textNode));\n if (tr.selection.$from.parent.type !== this.type) {\n // put cursor inside the newly created code block\n tr.setSelection(TextSelection.near(tr.doc.resolve(Math.max(0, tr.selection.from - 2))));\n }\n // store meta information\n // this is useful for other plugins that depends on the paste event\n // like the paste rule plugin\n tr.setMeta('paste', true);\n view.dispatch(tr);\n return true;\n },\n },\n }),\n ];\n },\n});\n\nexport { CodeBlock, backtickInputRegex, CodeBlock as default, tildeInputRegex };\n//# sourceMappingURL=index.js.map\n","import { Mark, mergeAttributes, getMarkAttributes } from '@tiptap/core';\n\n/**\n * This extension allows you to create text styles. It is required by default\n * for the `textColor` and `backgroundColor` extensions.\n * @see https://www.tiptap.dev/api/marks/text-style\n */\nconst TextStyle = Mark.create({\n name: 'textStyle',\n priority: 101,\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n parseHTML() {\n return [\n {\n tag: 'span',\n getAttrs: element => {\n const hasStyles = element.hasAttribute('style');\n if (!hasStyles) {\n return false;\n }\n return {};\n },\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n removeEmptyTextStyle: () => ({ state, commands }) => {\n const attributes = getMarkAttributes(state, this.type);\n const hasStyles = Object.entries(attributes).some(([, value]) => !!value);\n if (hasStyles) {\n return true;\n }\n return commands.unsetMark(this.name);\n },\n };\n },\n});\n\nexport { TextStyle, TextStyle as default };\n//# sourceMappingURL=index.js.map\n","import '@tiptap/extension-text-style';\nimport { Extension } from '@tiptap/core';\n\n/**\n * This extension allows you to set a font family for text.\n * @see https://www.tiptap.dev/api/extensions/font-family\n */\nconst FontFamily = Extension.create({\n name: 'fontFamily',\n addOptions() {\n return {\n types: ['textStyle'],\n };\n },\n addGlobalAttributes() {\n return [\n {\n types: this.options.types,\n attributes: {\n fontFamily: {\n default: null,\n parseHTML: element => { var _a; return (_a = element.style.fontFamily) === null || _a === void 0 ? void 0 : _a.replace(/['\"]+/g, ''); },\n renderHTML: attributes => {\n if (!attributes.fontFamily) {\n return {};\n }\n return {\n style: `font-family: ${attributes.fontFamily}`,\n };\n },\n },\n },\n },\n ];\n },\n addCommands() {\n return {\n setFontFamily: fontFamily => ({ chain }) => {\n return chain()\n .setMark('textStyle', { fontFamily })\n .run();\n },\n unsetFontFamily: () => ({ chain }) => {\n return chain()\n .setMark('textStyle', { fontFamily: null })\n .removeEmptyTextStyle()\n .run();\n },\n };\n },\n});\n\nexport { FontFamily, FontFamily as default };\n//# sourceMappingURL=index.js.map\n","import { Node, mergeAttributes, textblockTypeInputRule } from '@tiptap/core';\n\n/**\n * This extension allows you to create headings.\n * @see https://www.tiptap.dev/api/nodes/heading\n */\nconst Heading = Node.create({\n name: 'heading',\n addOptions() {\n return {\n levels: [1, 2, 3, 4, 5, 6],\n HTMLAttributes: {},\n };\n },\n content: 'inline*',\n group: 'block',\n defining: true,\n addAttributes() {\n return {\n level: {\n default: 1,\n rendered: false,\n },\n };\n },\n parseHTML() {\n return this.options.levels\n .map((level) => ({\n tag: `h${level}`,\n attrs: { level },\n }));\n },\n renderHTML({ node, HTMLAttributes }) {\n const hasLevel = this.options.levels.includes(node.attrs.level);\n const level = hasLevel\n ? node.attrs.level\n : this.options.levels[0];\n return [`h${level}`, mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n setHeading: attributes => ({ commands }) => {\n if (!this.options.levels.includes(attributes.level)) {\n return false;\n }\n return commands.setNode(this.name, attributes);\n },\n toggleHeading: attributes => ({ commands }) => {\n if (!this.options.levels.includes(attributes.level)) {\n return false;\n }\n return commands.toggleNode(this.name, 'paragraph', attributes);\n },\n };\n },\n addKeyboardShortcuts() {\n return this.options.levels.reduce((items, level) => ({\n ...items,\n ...{\n [`Mod-Alt-${level}`]: () => this.editor.commands.toggleHeading({ level }),\n },\n }), {});\n },\n addInputRules() {\n return this.options.levels.map(level => {\n return textblockTypeInputRule({\n find: new RegExp(`^(#{1,${level}})\\\\s$`),\n type: this.type,\n getAttributes: {\n level,\n },\n });\n });\n },\n});\n\nexport { Heading, Heading as default };\n//# sourceMappingURL=index.js.map\n","import { Extension } from '@tiptap/core';\n\n/**\n * This extension allows you to align text.\n * @see https://www.tiptap.dev/api/extensions/text-align\n */\nconst TextAlign = Extension.create({\n name: 'textAlign',\n addOptions() {\n return {\n types: [],\n alignments: ['left', 'center', 'right', 'justify'],\n defaultAlignment: 'left',\n };\n },\n addGlobalAttributes() {\n return [\n {\n types: this.options.types,\n attributes: {\n textAlign: {\n default: this.options.defaultAlignment,\n parseHTML: element => {\n const alignment = element.style.textAlign || this.options.defaultAlignment;\n return this.options.alignments.includes(alignment) ? alignment : this.options.defaultAlignment;\n },\n renderHTML: attributes => {\n if (attributes.textAlign === this.options.defaultAlignment) {\n return {};\n }\n return { style: `text-align: ${attributes.textAlign}` };\n },\n },\n },\n },\n ];\n },\n addCommands() {\n return {\n setTextAlign: (alignment) => ({ commands }) => {\n if (!this.options.alignments.includes(alignment)) {\n return false;\n }\n return this.options.types\n .map(type => commands.updateAttributes(type, { textAlign: alignment }))\n .every(response => response);\n },\n unsetTextAlign: () => ({ commands }) => {\n return this.options.types\n .map(type => commands.resetAttributes(type, 'textAlign'))\n .every(response => response);\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-Shift-l': () => this.editor.commands.setTextAlign('left'),\n 'Mod-Shift-e': () => this.editor.commands.setTextAlign('center'),\n 'Mod-Shift-r': () => this.editor.commands.setTextAlign('right'),\n 'Mod-Shift-j': () => this.editor.commands.setTextAlign('justify'),\n };\n },\n});\n\nexport { TextAlign, TextAlign as default };\n//# sourceMappingURL=index.js.map\n","import '@tiptap/extension-text-style';\nimport { Extension } from '@tiptap/core';\n\n/**\n * This extension allows you to color your text.\n * @see https://tiptap.dev/api/extensions/color\n */\nconst Color = Extension.create({\n name: 'color',\n addOptions() {\n return {\n types: ['textStyle'],\n };\n },\n addGlobalAttributes() {\n return [\n {\n types: this.options.types,\n attributes: {\n color: {\n default: null,\n parseHTML: element => { var _a; return (_a = element.style.color) === null || _a === void 0 ? void 0 : _a.replace(/['\"]+/g, ''); },\n renderHTML: attributes => {\n if (!attributes.color) {\n return {};\n }\n return {\n style: `color: ${attributes.color}`,\n };\n },\n },\n },\n },\n ];\n },\n addCommands() {\n return {\n setColor: color => ({ chain }) => {\n return chain()\n .setMark('textStyle', { color })\n .run();\n },\n unsetColor: () => ({ chain }) => {\n return chain()\n .setMark('textStyle', { color: null })\n .removeEmptyTextStyle()\n .run();\n },\n };\n },\n});\n\nexport { Color, Color as default };\n//# sourceMappingURL=index.js.map\n","import { Mark, mergeAttributes, markInputRule, markPasteRule } from '@tiptap/core';\n\n/**\n * Matches a highlight to a ==highlight== on input.\n */\nconst inputRegex = /(?:^|\\s)(==(?!\\s+==)((?:[^=]+))==(?!\\s+==))$/;\n/**\n * Matches a highlight to a ==highlight== on paste.\n */\nconst pasteRegex = /(?:^|\\s)(==(?!\\s+==)((?:[^=]+))==(?!\\s+==))/g;\n/**\n * This extension allows you to highlight text.\n * @see https://www.tiptap.dev/api/marks/highlight\n */\nconst Highlight = Mark.create({\n name: 'highlight',\n addOptions() {\n return {\n multicolor: false,\n HTMLAttributes: {},\n };\n },\n addAttributes() {\n if (!this.options.multicolor) {\n return {};\n }\n return {\n color: {\n default: null,\n parseHTML: element => element.getAttribute('data-color') || element.style.backgroundColor,\n renderHTML: attributes => {\n if (!attributes.color) {\n return {};\n }\n return {\n 'data-color': attributes.color,\n style: `background-color: ${attributes.color}; color: inherit`,\n };\n },\n },\n };\n },\n parseHTML() {\n return [\n {\n tag: 'mark',\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['mark', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n setHighlight: attributes => ({ commands }) => {\n return commands.setMark(this.name, attributes);\n },\n toggleHighlight: attributes => ({ commands }) => {\n return commands.toggleMark(this.name, attributes);\n },\n unsetHighlight: () => ({ commands }) => {\n return commands.unsetMark(this.name);\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-Shift-h': () => this.editor.commands.toggleHighlight(),\n };\n },\n addInputRules() {\n return [\n markInputRule({\n find: inputRegex,\n type: this.type,\n }),\n ];\n },\n addPasteRules() {\n return [\n markPasteRule({\n find: pasteRegex,\n type: this.type,\n }),\n ];\n },\n});\n\nexport { Highlight, Highlight as default, inputRegex, pasteRegex };\n//# sourceMappingURL=index.js.map\n","import { Node, mergeAttributes, Mark, getMarkAttributes, wrappingInputRule } from '@tiptap/core';\n\n/**\n * This extension allows you to create list items.\n * @see https://www.tiptap.dev/api/nodes/list-item\n */\nconst ListItem = Node.create({\n name: 'listItem',\n addOptions() {\n return {\n HTMLAttributes: {},\n bulletListTypeName: 'bulletList',\n orderedListTypeName: 'orderedList',\n };\n },\n content: 'paragraph block*',\n defining: true,\n parseHTML() {\n return [\n {\n tag: 'li',\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['li', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addKeyboardShortcuts() {\n return {\n Enter: () => this.editor.commands.splitListItem(this.name),\n Tab: () => this.editor.commands.sinkListItem(this.name),\n 'Shift-Tab': () => this.editor.commands.liftListItem(this.name),\n };\n },\n});\n\n/**\n * This extension allows you to create text styles. It is required by default\n * for the `textColor` and `backgroundColor` extensions.\n * @see https://www.tiptap.dev/api/marks/text-style\n */\nconst TextStyle = Mark.create({\n name: 'textStyle',\n priority: 101,\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n parseHTML() {\n return [\n {\n tag: 'span',\n getAttrs: element => {\n const hasStyles = element.hasAttribute('style');\n if (!hasStyles) {\n return false;\n }\n return {};\n },\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n removeEmptyTextStyle: () => ({ state, commands }) => {\n const attributes = getMarkAttributes(state, this.type);\n const hasStyles = Object.entries(attributes).some(([, value]) => !!value);\n if (hasStyles) {\n return true;\n }\n return commands.unsetMark(this.name);\n },\n };\n },\n});\n\n/**\n * Matches a bullet list to a dash or asterisk.\n */\nconst inputRegex = /^\\s*([-+*])\\s$/;\n/**\n * This extension allows you to create bullet lists.\n * This requires the ListItem extension\n * @see https://tiptap.dev/api/nodes/bullet-list\n * @see https://tiptap.dev/api/nodes/list-item.\n */\nconst BulletList = Node.create({\n name: 'bulletList',\n addOptions() {\n return {\n itemTypeName: 'listItem',\n HTMLAttributes: {},\n keepMarks: false,\n keepAttributes: false,\n };\n },\n group: 'block list',\n content() {\n return `${this.options.itemTypeName}+`;\n },\n parseHTML() {\n return [\n { tag: 'ul' },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['ul', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n toggleBulletList: () => ({ commands, chain }) => {\n if (this.options.keepAttributes) {\n return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItem.name, this.editor.getAttributes(TextStyle.name)).run();\n }\n return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks);\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-Shift-8': () => this.editor.commands.toggleBulletList(),\n };\n },\n addInputRules() {\n let inputRule = wrappingInputRule({\n find: inputRegex,\n type: this.type,\n });\n if (this.options.keepMarks || this.options.keepAttributes) {\n inputRule = wrappingInputRule({\n find: inputRegex,\n type: this.type,\n keepMarks: this.options.keepMarks,\n keepAttributes: this.options.keepAttributes,\n getAttributes: () => { return this.editor.getAttributes(TextStyle.name); },\n editor: this.editor,\n });\n }\n return [\n inputRule,\n ];\n },\n});\n\nexport { BulletList, BulletList as default, inputRegex };\n//# sourceMappingURL=index.js.map\n","import { Node, mergeAttributes, Mark, getMarkAttributes, wrappingInputRule } from '@tiptap/core';\n\n/**\n * This extension allows you to create list items.\n * @see https://www.tiptap.dev/api/nodes/list-item\n */\nconst ListItem = Node.create({\n name: 'listItem',\n addOptions() {\n return {\n HTMLAttributes: {},\n bulletListTypeName: 'bulletList',\n orderedListTypeName: 'orderedList',\n };\n },\n content: 'paragraph block*',\n defining: true,\n parseHTML() {\n return [\n {\n tag: 'li',\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['li', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addKeyboardShortcuts() {\n return {\n Enter: () => this.editor.commands.splitListItem(this.name),\n Tab: () => this.editor.commands.sinkListItem(this.name),\n 'Shift-Tab': () => this.editor.commands.liftListItem(this.name),\n };\n },\n});\n\n/**\n * This extension allows you to create text styles. It is required by default\n * for the `textColor` and `backgroundColor` extensions.\n * @see https://www.tiptap.dev/api/marks/text-style\n */\nconst TextStyle = Mark.create({\n name: 'textStyle',\n priority: 101,\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n parseHTML() {\n return [\n {\n tag: 'span',\n getAttrs: element => {\n const hasStyles = element.hasAttribute('style');\n if (!hasStyles) {\n return false;\n }\n return {};\n },\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n removeEmptyTextStyle: () => ({ state, commands }) => {\n const attributes = getMarkAttributes(state, this.type);\n const hasStyles = Object.entries(attributes).some(([, value]) => !!value);\n if (hasStyles) {\n return true;\n }\n return commands.unsetMark(this.name);\n },\n };\n },\n});\n\n/**\n * Matches an ordered list to a 1. on input (or any number followed by a dot).\n */\nconst inputRegex = /^(\\d+)\\.\\s$/;\n/**\n * This extension allows you to create ordered lists.\n * This requires the ListItem extension\n * @see https://www.tiptap.dev/api/nodes/ordered-list\n * @see https://www.tiptap.dev/api/nodes/list-item\n */\nconst OrderedList = Node.create({\n name: 'orderedList',\n addOptions() {\n return {\n itemTypeName: 'listItem',\n HTMLAttributes: {},\n keepMarks: false,\n keepAttributes: false,\n };\n },\n group: 'block list',\n content() {\n return `${this.options.itemTypeName}+`;\n },\n addAttributes() {\n return {\n start: {\n default: 1,\n parseHTML: element => {\n return element.hasAttribute('start')\n ? parseInt(element.getAttribute('start') || '', 10)\n : 1;\n },\n },\n type: {\n default: undefined,\n parseHTML: element => element.getAttribute('type'),\n },\n };\n },\n parseHTML() {\n return [\n {\n tag: 'ol',\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n const { start, ...attributesWithoutStart } = HTMLAttributes;\n return start === 1\n ? ['ol', mergeAttributes(this.options.HTMLAttributes, attributesWithoutStart), 0]\n : ['ol', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n toggleOrderedList: () => ({ commands, chain }) => {\n if (this.options.keepAttributes) {\n return chain().toggleList(this.name, this.options.itemTypeName, this.options.keepMarks).updateAttributes(ListItem.name, this.editor.getAttributes(TextStyle.name)).run();\n }\n return commands.toggleList(this.name, this.options.itemTypeName, this.options.keepMarks);\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-Shift-7': () => this.editor.commands.toggleOrderedList(),\n };\n },\n addInputRules() {\n let inputRule = wrappingInputRule({\n find: inputRegex,\n type: this.type,\n getAttributes: match => ({ start: +match[1] }),\n joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n });\n if (this.options.keepMarks || this.options.keepAttributes) {\n inputRule = wrappingInputRule({\n find: inputRegex,\n type: this.type,\n keepMarks: this.options.keepMarks,\n keepAttributes: this.options.keepAttributes,\n getAttributes: match => ({ start: +match[1], ...this.editor.getAttributes(TextStyle.name) }),\n joinPredicate: (match, node) => node.childCount + node.attrs.start === +match[1],\n editor: this.editor,\n });\n }\n return [\n inputRule,\n ];\n },\n});\n\nexport { OrderedList, OrderedList as default, inputRegex };\n//# sourceMappingURL=index.js.map\n","import { Node, mergeAttributes, wrappingInputRule } from '@tiptap/core';\n\n/**\n * Matches a task item to a - [ ] on input.\n */\nconst inputRegex = /^\\s*(\\[([( |x])?\\])\\s$/;\n/**\n * This extension allows you to create task items.\n * @see https://www.tiptap.dev/api/nodes/task-item\n */\nconst TaskItem = Node.create({\n name: 'taskItem',\n addOptions() {\n return {\n nested: false,\n HTMLAttributes: {},\n taskListTypeName: 'taskList',\n };\n },\n content() {\n return this.options.nested ? 'paragraph block*' : 'paragraph+';\n },\n defining: true,\n addAttributes() {\n return {\n checked: {\n default: false,\n keepOnSplit: false,\n parseHTML: element => {\n const dataChecked = element.getAttribute('data-checked');\n return dataChecked === '' || dataChecked === 'true';\n },\n renderHTML: attributes => ({\n 'data-checked': attributes.checked,\n }),\n },\n };\n },\n parseHTML() {\n return [\n {\n tag: `li[data-type=\"${this.name}\"]`,\n priority: 51,\n },\n ];\n },\n renderHTML({ node, HTMLAttributes }) {\n return [\n 'li',\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n 'data-type': this.name,\n }),\n [\n 'label',\n [\n 'input',\n {\n type: 'checkbox',\n checked: node.attrs.checked ? 'checked' : null,\n },\n ],\n ['span'],\n ],\n ['div', 0],\n ];\n },\n addKeyboardShortcuts() {\n const shortcuts = {\n Enter: () => this.editor.commands.splitListItem(this.name),\n 'Shift-Tab': () => this.editor.commands.liftListItem(this.name),\n };\n if (!this.options.nested) {\n return shortcuts;\n }\n return {\n ...shortcuts,\n Tab: () => this.editor.commands.sinkListItem(this.name),\n };\n },\n addNodeView() {\n return ({ node, HTMLAttributes, getPos, editor, }) => {\n const listItem = document.createElement('li');\n const checkboxWrapper = document.createElement('label');\n const checkboxStyler = document.createElement('span');\n const checkbox = document.createElement('input');\n const content = document.createElement('div');\n checkboxWrapper.contentEditable = 'false';\n checkbox.type = 'checkbox';\n checkbox.addEventListener('change', event => {\n // if the editor isn’t editable and we don't have a handler for\n // readonly checks we have to undo the latest change\n if (!editor.isEditable && !this.options.onReadOnlyChecked) {\n checkbox.checked = !checkbox.checked;\n return;\n }\n const { checked } = event.target;\n if (editor.isEditable && typeof getPos === 'function') {\n editor\n .chain()\n .focus(undefined, { scrollIntoView: false })\n .command(({ tr }) => {\n const position = getPos();\n const currentNode = tr.doc.nodeAt(position);\n tr.setNodeMarkup(position, undefined, {\n ...currentNode === null || currentNode === void 0 ? void 0 : currentNode.attrs,\n checked,\n });\n return true;\n })\n .run();\n }\n if (!editor.isEditable && this.options.onReadOnlyChecked) {\n // Reset state if onReadOnlyChecked returns false\n if (!this.options.onReadOnlyChecked(node, checked)) {\n checkbox.checked = !checkbox.checked;\n }\n }\n });\n Object.entries(this.options.HTMLAttributes).forEach(([key, value]) => {\n listItem.setAttribute(key, value);\n });\n listItem.dataset.checked = node.attrs.checked;\n if (node.attrs.checked) {\n checkbox.setAttribute('checked', 'checked');\n }\n checkboxWrapper.append(checkbox, checkboxStyler);\n listItem.append(checkboxWrapper, content);\n Object.entries(HTMLAttributes).forEach(([key, value]) => {\n listItem.setAttribute(key, value);\n });\n return {\n dom: listItem,\n contentDOM: content,\n update: updatedNode => {\n if (updatedNode.type !== this.type) {\n return false;\n }\n listItem.dataset.checked = updatedNode.attrs.checked;\n if (updatedNode.attrs.checked) {\n checkbox.setAttribute('checked', 'checked');\n }\n else {\n checkbox.removeAttribute('checked');\n }\n return true;\n },\n };\n };\n },\n addInputRules() {\n return [\n wrappingInputRule({\n find: inputRegex,\n type: this.type,\n getAttributes: match => ({\n checked: match[match.length - 1] === 'x',\n }),\n }),\n ];\n },\n});\n\nexport { TaskItem, TaskItem as default, inputRegex };\n//# sourceMappingURL=index.js.map\n","import { Node, mergeAttributes } from '@tiptap/core';\n\n/**\n * This extension allows you to create task lists.\n * @see https://www.tiptap.dev/api/nodes/task-list\n */\nconst TaskList = Node.create({\n name: 'taskList',\n addOptions() {\n return {\n itemTypeName: 'taskItem',\n HTMLAttributes: {},\n };\n },\n group: 'block list',\n content() {\n return `${this.options.itemTypeName}+`;\n },\n parseHTML() {\n return [\n {\n tag: `ul[data-type=\"${this.name}\"]`,\n priority: 51,\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['ul', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, { 'data-type': this.name }), 0];\n },\n addCommands() {\n return {\n toggleTaskList: () => ({ commands }) => {\n return commands.toggleList(this.name, this.options.itemTypeName);\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-Shift-9': () => this.editor.commands.toggleTaskList(),\n };\n },\n});\n\nexport { TaskList, TaskList as default };\n//# sourceMappingURL=index.js.map\n","import { Node, mergeAttributes, wrappingInputRule } from '@tiptap/core';\n\n/**\n * Matches a blockquote to a `>` as input.\n */\nconst inputRegex = /^\\s*>\\s$/;\n/**\n * This extension allows you to create blockquotes.\n * @see https://tiptap.dev/api/nodes/blockquote\n */\nconst Blockquote = Node.create({\n name: 'blockquote',\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n content: 'block+',\n group: 'block',\n defining: true,\n parseHTML() {\n return [\n { tag: 'blockquote' },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['blockquote', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n setBlockquote: () => ({ commands }) => {\n return commands.wrapIn(this.name);\n },\n toggleBlockquote: () => ({ commands }) => {\n return commands.toggleWrap(this.name);\n },\n unsetBlockquote: () => ({ commands }) => {\n return commands.lift(this.name);\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-Shift-b': () => this.editor.commands.toggleBlockquote(),\n };\n },\n addInputRules() {\n return [\n wrappingInputRule({\n find: inputRegex,\n type: this.type,\n }),\n ];\n },\n});\n\nexport { Blockquote, Blockquote as default, inputRegex };\n//# sourceMappingURL=index.js.map\n","import { combineTransactionSteps, getChangedRanges, findChildrenInRange, getMarksBetween, getAttributes, Mark, mergeAttributes, markPasteRule } from '@tiptap/core';\nimport { tokenize, find, registerCustomProtocol, reset } from 'linkifyjs';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\n\n/**\n * Check if the provided tokens form a valid link structure, which can either be a single link token\n * or a link token surrounded by parentheses or square brackets.\n *\n * This ensures that only complete and valid text is hyperlinked, preventing cases where a valid\n * top-level domain (TLD) is immediately followed by an invalid character, like a number. For\n * example, with the `find` method from Linkify, entering `example.com1` would result in\n * `example.com` being linked and the trailing `1` left as plain text. By using the `tokenize`\n * method, we can perform more comprehensive validation on the input text.\n */\nfunction isValidLinkStructure(tokens) {\n if (tokens.length === 1) {\n return tokens[0].isLink;\n }\n if (tokens.length === 3 && tokens[1].isLink) {\n return ['()', '[]'].includes(tokens[0].value + tokens[2].value);\n }\n return false;\n}\n/**\n * This plugin allows you to automatically add links to your editor.\n * @param options The plugin options\n * @returns The plugin instance\n */\nfunction autolink(options) {\n return new Plugin({\n key: new PluginKey('autolink'),\n appendTransaction: (transactions, oldState, newState) => {\n /**\n * Does the transaction change the document?\n */\n const docChanges = transactions.some(transaction => transaction.docChanged) && !oldState.doc.eq(newState.doc);\n /**\n * Prevent autolink if the transaction is not a document change or if the transaction has the meta `preventAutolink`.\n */\n const preventAutolink = transactions.some(transaction => transaction.getMeta('preventAutolink'));\n /**\n * Prevent autolink if the transaction is not a document change\n * or if the transaction has the meta `preventAutolink`.\n */\n if (!docChanges || preventAutolink) {\n return;\n }\n const { tr } = newState;\n const transform = combineTransactionSteps(oldState.doc, [...transactions]);\n const changes = getChangedRanges(transform);\n changes.forEach(({ newRange }) => {\n // Now let’s see if we can add new links.\n const nodesInChangedRanges = findChildrenInRange(newState.doc, newRange, node => node.isTextblock);\n let textBlock;\n let textBeforeWhitespace;\n if (nodesInChangedRanges.length > 1) {\n // Grab the first node within the changed ranges (ex. the first of two paragraphs when hitting enter).\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(textBlock.pos, textBlock.pos + textBlock.node.nodeSize, undefined, ' ');\n }\n else if (nodesInChangedRanges.length\n // We want to make sure to include the block seperator argument to treat hard breaks like spaces.\n && newState.doc.textBetween(newRange.from, newRange.to, ' ', ' ').endsWith(' ')) {\n textBlock = nodesInChangedRanges[0];\n textBeforeWhitespace = newState.doc.textBetween(textBlock.pos, newRange.to, undefined, ' ');\n }\n if (textBlock && textBeforeWhitespace) {\n const wordsBeforeWhitespace = textBeforeWhitespace.split(' ').filter(s => s !== '');\n if (wordsBeforeWhitespace.length <= 0) {\n return false;\n }\n const lastWordBeforeSpace = wordsBeforeWhitespace[wordsBeforeWhitespace.length - 1];\n const lastWordAndBlockOffset = textBlock.pos + textBeforeWhitespace.lastIndexOf(lastWordBeforeSpace);\n if (!lastWordBeforeSpace) {\n return false;\n }\n const linksBeforeSpace = tokenize(lastWordBeforeSpace).map(t => t.toObject(options.defaultProtocol));\n if (!isValidLinkStructure(linksBeforeSpace)) {\n return false;\n }\n linksBeforeSpace\n .filter(link => link.isLink)\n // Calculate link position.\n .map(link => ({\n ...link,\n from: lastWordAndBlockOffset + link.start + 1,\n to: lastWordAndBlockOffset + link.end + 1,\n }))\n // ignore link inside code mark\n .filter(link => {\n if (!newState.schema.marks.code) {\n return true;\n }\n return !newState.doc.rangeHasMark(link.from, link.to, newState.schema.marks.code);\n })\n // validate link\n .filter(link => options.validate(link.value))\n // Add link mark.\n .forEach(link => {\n if (getMarksBetween(link.from, link.to, newState.doc).some(item => item.mark.type === options.type)) {\n return;\n }\n tr.addMark(link.from, link.to, options.type.create({\n href: link.href,\n }));\n });\n }\n });\n if (!tr.steps.length) {\n return;\n }\n return tr;\n },\n });\n}\n\nfunction clickHandler(options) {\n return new Plugin({\n key: new PluginKey('handleClickLink'),\n props: {\n handleClick: (view, pos, event) => {\n var _a, _b;\n if (event.button !== 0) {\n return false;\n }\n if (!view.editable) {\n return false;\n }\n let a = event.target;\n const els = [];\n while (a.nodeName !== 'DIV') {\n els.push(a);\n a = a.parentNode;\n }\n if (!els.find(value => value.nodeName === 'A')) {\n return false;\n }\n const attrs = getAttributes(view.state, options.type.name);\n const link = event.target;\n const href = (_a = link === null || link === void 0 ? void 0 : link.href) !== null && _a !== void 0 ? _a : attrs.href;\n const target = (_b = link === null || link === void 0 ? void 0 : link.target) !== null && _b !== void 0 ? _b : attrs.target;\n if (link && href) {\n window.open(href, target);\n return true;\n }\n return false;\n },\n },\n });\n}\n\nfunction pasteHandler(options) {\n return new Plugin({\n key: new PluginKey('handlePasteLink'),\n props: {\n handlePaste: (view, event, slice) => {\n const { state } = view;\n const { selection } = state;\n const { empty } = selection;\n if (empty) {\n return false;\n }\n let textContent = '';\n slice.content.forEach(node => {\n textContent += node.textContent;\n });\n const link = find(textContent, { defaultProtocol: options.defaultProtocol }).find(item => item.isLink && item.value === textContent);\n if (!textContent || !link) {\n return false;\n }\n options.editor.commands.setMark(options.type, {\n href: link.href,\n });\n return true;\n },\n },\n });\n}\n\nconst pasteRegex = /https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z]{2,}\\b(?:[-a-zA-Z0-9@:%._+~#=?!&/]*)(?:[-a-zA-Z0-9@:%._+~#=?!&/]*)/gi;\n// From DOMPurify\n// https://github.com/cure53/DOMPurify/blob/main/src/regexp.js\n// eslint-disable-next-line no-control-regex\nconst ATTR_WHITESPACE = /[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g;\nfunction isAllowedUri(uri, protocols) {\n const allowedProtocols = ['http', 'https', 'ftp', 'ftps', 'mailto', 'tel', 'callto', 'sms', 'cid', 'xmpp'];\n if (protocols) {\n protocols.forEach(protocol => {\n const nextProtocol = (typeof protocol === 'string' ? protocol : protocol.scheme);\n if (nextProtocol) {\n allowedProtocols.push(nextProtocol);\n }\n });\n }\n // eslint-disable-next-line no-useless-escape\n return !uri || uri.replace(ATTR_WHITESPACE, '').match(new RegExp(`^(?:(?:${allowedProtocols.join('|')}):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))`, 'i'));\n}\n/**\n * This extension allows you to create links.\n * @see https://www.tiptap.dev/api/marks/link\n */\nconst Link = Mark.create({\n name: 'link',\n priority: 1000,\n keepOnSplit: false,\n exitable: true,\n onCreate() {\n this.options.protocols.forEach(protocol => {\n if (typeof protocol === 'string') {\n registerCustomProtocol(protocol);\n return;\n }\n registerCustomProtocol(protocol.scheme, protocol.optionalSlashes);\n });\n },\n onDestroy() {\n reset();\n },\n inclusive() {\n return this.options.autolink;\n },\n addOptions() {\n return {\n openOnClick: true,\n linkOnPaste: true,\n autolink: true,\n protocols: [],\n defaultProtocol: 'http',\n HTMLAttributes: {\n target: '_blank',\n rel: 'noopener noreferrer nofollow',\n class: null,\n },\n validate: url => !!url,\n };\n },\n addAttributes() {\n return {\n href: {\n default: null,\n parseHTML(element) {\n return element.getAttribute('href');\n },\n },\n target: {\n default: this.options.HTMLAttributes.target,\n },\n rel: {\n default: this.options.HTMLAttributes.rel,\n },\n class: {\n default: this.options.HTMLAttributes.class,\n },\n };\n },\n parseHTML() {\n return [{\n tag: 'a[href]',\n getAttrs: dom => {\n const href = dom.getAttribute('href');\n // prevent XSS attacks\n if (!href || !isAllowedUri(href, this.options.protocols)) {\n return false;\n }\n return null;\n },\n }];\n },\n renderHTML({ HTMLAttributes }) {\n // prevent XSS attacks\n if (!isAllowedUri(HTMLAttributes.href, this.options.protocols)) {\n // strip out the href\n return ['a', mergeAttributes(this.options.HTMLAttributes, { ...HTMLAttributes, href: '' }), 0];\n }\n return ['a', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n setLink: attributes => ({ chain }) => {\n return chain().setMark(this.name, attributes).setMeta('preventAutolink', true).run();\n },\n toggleLink: attributes => ({ chain }) => {\n return chain()\n .toggleMark(this.name, attributes, { extendEmptyMarkRange: true })\n .setMeta('preventAutolink', true)\n .run();\n },\n unsetLink: () => ({ chain }) => {\n return chain()\n .unsetMark(this.name, { extendEmptyMarkRange: true })\n .setMeta('preventAutolink', true)\n .run();\n },\n };\n },\n addPasteRules() {\n return [\n markPasteRule({\n find: text => {\n const foundLinks = [];\n if (text) {\n const { validate } = this.options;\n const links = find(text).filter(item => item.isLink && validate(item.value));\n if (links.length) {\n links.forEach(link => (foundLinks.push({\n text: link.value,\n data: {\n href: link.href,\n },\n index: link.start,\n })));\n }\n }\n return foundLinks;\n },\n type: this.type,\n getAttributes: match => {\n var _a;\n return {\n href: (_a = match.data) === null || _a === void 0 ? void 0 : _a.href,\n };\n },\n }),\n ];\n },\n addProseMirrorPlugins() {\n const plugins = [];\n if (this.options.autolink) {\n plugins.push(autolink({\n type: this.type,\n defaultProtocol: this.options.defaultProtocol,\n validate: this.options.validate,\n }));\n }\n if (this.options.openOnClick === true) {\n plugins.push(clickHandler({\n type: this.type,\n }));\n }\n if (this.options.linkOnPaste) {\n plugins.push(pasteHandler({\n editor: this.editor,\n defaultProtocol: this.options.defaultProtocol,\n type: this.type,\n }));\n }\n return plugins;\n },\n});\n\nexport { Link, Link as default, pasteRegex };\n//# sourceMappingURL=index.js.map\n","import { Node, mergeAttributes, isNodeSelection, nodeInputRule } from '@tiptap/core';\nimport { TextSelection, NodeSelection } from '@tiptap/pm/state';\n\n/**\n * This extension allows you to insert horizontal rules.\n * @see https://www.tiptap.dev/api/nodes/horizontal-rule\n */\nconst HorizontalRule = Node.create({\n name: 'horizontalRule',\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n group: 'block',\n parseHTML() {\n return [{ tag: 'hr' }];\n },\n renderHTML({ HTMLAttributes }) {\n return ['hr', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)];\n },\n addCommands() {\n return {\n setHorizontalRule: () => ({ chain, state }) => {\n const { selection } = state;\n const { $from: $originFrom, $to: $originTo } = selection;\n const currentChain = chain();\n if ($originFrom.parentOffset === 0) {\n currentChain.insertContentAt({\n from: Math.max($originFrom.pos - 1, 0),\n to: $originTo.pos,\n }, {\n type: this.name,\n });\n }\n else if (isNodeSelection(selection)) {\n currentChain.insertContentAt($originTo.pos, {\n type: this.name,\n });\n }\n else {\n currentChain.insertContent({ type: this.name });\n }\n return (currentChain\n // set cursor after horizontal rule\n .command(({ tr, dispatch }) => {\n var _a;\n if (dispatch) {\n const { $to } = tr.selection;\n const posAfter = $to.end();\n if ($to.nodeAfter) {\n if ($to.nodeAfter.isTextblock) {\n tr.setSelection(TextSelection.create(tr.doc, $to.pos + 1));\n }\n else if ($to.nodeAfter.isBlock) {\n tr.setSelection(NodeSelection.create(tr.doc, $to.pos));\n }\n else {\n tr.setSelection(TextSelection.create(tr.doc, $to.pos));\n }\n }\n else {\n // add node after horizontal rule if it’s the end of the document\n const node = (_a = $to.parent.type.contentMatch.defaultType) === null || _a === void 0 ? void 0 : _a.create();\n if (node) {\n tr.insert(posAfter, node);\n tr.setSelection(TextSelection.create(tr.doc, posAfter + 1));\n }\n }\n tr.scrollIntoView();\n }\n return true;\n })\n .run());\n },\n };\n },\n addInputRules() {\n return [\n nodeInputRule({\n find: /^(?:---|—-|___\\s|\\*\\*\\*\\s)$/,\n type: this.type,\n }),\n ];\n },\n});\n\nexport { HorizontalRule, HorizontalRule as default };\n//# sourceMappingURL=index.js.map\n","import { Extension } from '@tiptap/core';\nimport { undo, redo, history } from '@tiptap/pm/history';\n\n/**\n * This extension allows you to undo and redo recent changes.\n * @see https://www.tiptap.dev/api/extensions/history\n *\n * **Important**: If the `@tiptap/extension-collaboration` package is used, make sure to remove\n * the `history` extension, as it is not compatible with the `collaboration` extension.\n *\n * `@tiptap/extension-collaboration` uses its own history implementation.\n */\nconst History = Extension.create({\n name: 'history',\n addOptions() {\n return {\n depth: 100,\n newGroupDelay: 500,\n };\n },\n addCommands() {\n return {\n undo: () => ({ state, dispatch }) => {\n return undo(state, dispatch);\n },\n redo: () => ({ state, dispatch }) => {\n return redo(state, dispatch);\n },\n };\n },\n addProseMirrorPlugins() {\n return [\n history(this.options),\n ];\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-z': () => this.editor.commands.undo(),\n 'Shift-Mod-z': () => this.editor.commands.redo(),\n 'Mod-y': () => this.editor.commands.redo(),\n // Russian keyboard layouts\n 'Mod-я': () => this.editor.commands.undo(),\n 'Shift-Mod-я': () => this.editor.commands.redo(),\n };\n },\n});\n\nexport { History, History as default };\n//# sourceMappingURL=index.js.map\n","import { Extension } from '@tiptap/core';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\n\n/**\n * This extension allows you to count the characters and words of your document.\n * @see https://tiptap.dev/api/extensions/character-count\n */\nconst CharacterCount = Extension.create({\n name: 'characterCount',\n addOptions() {\n return {\n limit: null,\n mode: 'textSize',\n };\n },\n addStorage() {\n return {\n characters: () => 0,\n words: () => 0,\n };\n },\n onBeforeCreate() {\n this.storage.characters = options => {\n const node = (options === null || options === void 0 ? void 0 : options.node) || this.editor.state.doc;\n const mode = (options === null || options === void 0 ? void 0 : options.mode) || this.options.mode;\n if (mode === 'textSize') {\n const text = node.textBetween(0, node.content.size, undefined, ' ');\n return text.length;\n }\n return node.nodeSize;\n };\n this.storage.words = options => {\n const node = (options === null || options === void 0 ? void 0 : options.node) || this.editor.state.doc;\n const text = node.textBetween(0, node.content.size, ' ', ' ');\n const words = text.split(' ').filter(word => word !== '');\n return words.length;\n };\n },\n addProseMirrorPlugins() {\n return [\n new Plugin({\n key: new PluginKey('characterCount'),\n filterTransaction: (transaction, state) => {\n const limit = this.options.limit;\n // Nothing has changed or no limit is defined. Ignore it.\n if (!transaction.docChanged || limit === 0 || limit === null || limit === undefined) {\n return true;\n }\n const oldSize = this.storage.characters({ node: state.doc });\n const newSize = this.storage.characters({ node: transaction.doc });\n // Everything is in the limit. Good.\n if (newSize <= limit) {\n return true;\n }\n // The limit has already been exceeded but will be reduced.\n if (oldSize > limit && newSize > limit && newSize <= oldSize) {\n return true;\n }\n // The limit has already been exceeded and will be increased further.\n if (oldSize > limit && newSize > limit && newSize > oldSize) {\n return false;\n }\n const isPaste = transaction.getMeta('paste');\n // Block all exceeding transactions that were not pasted.\n if (!isPaste) {\n return false;\n }\n // For pasted content, we try to remove the exceeding content.\n const pos = transaction.selection.$head.pos;\n const over = newSize - limit;\n const from = pos - over;\n const to = pos;\n // It’s probably a bad idea to mutate transactions within `filterTransaction`\n // but for now this is working fine.\n transaction.deleteRange(from, to);\n // In some situations, the limit will continue to be exceeded after trimming.\n // This happens e.g. when truncating within a complex node (e.g. table)\n // and ProseMirror has to close this node again.\n // If this is the case, we prevent the transaction completely.\n const updatedSize = this.storage.characters({ node: transaction.doc });\n if (updatedSize > limit) {\n return false;\n }\n return true;\n },\n }),\n ];\n },\n});\n\nexport { CharacterCount, CharacterCount as default };\n//# sourceMappingURL=index.js.map\n","import { Extension } from '@tiptap/core';\nimport { dropCursor } from '@tiptap/pm/dropcursor';\n\n/**\n * This extension allows you to add a drop cursor to your editor.\n * A drop cursor is a line that appears when you drag and drop content\n * inbetween nodes.\n * @see https://tiptap.dev/api/extensions/dropcursor\n */\nconst Dropcursor = Extension.create({\n name: 'dropCursor',\n addOptions() {\n return {\n color: 'currentColor',\n width: 1,\n class: undefined,\n };\n },\n addProseMirrorPlugins() {\n return [\n dropCursor(this.options),\n ];\n },\n});\n\nexport { Dropcursor, Dropcursor as default };\n//# sourceMappingURL=index.js.map\n","import { Extension } from '@tiptap/core';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\nimport { DecorationSet, Decoration } from '@tiptap/pm/view';\n\n/**\n * This extension allows you to add a class to the focused node.\n * @see https://www.tiptap.dev/api/extensions/focus\n */\nconst FocusClasses = Extension.create({\n name: 'focus',\n addOptions() {\n return {\n className: 'has-focus',\n mode: 'all',\n };\n },\n addProseMirrorPlugins() {\n return [\n new Plugin({\n key: new PluginKey('focus'),\n props: {\n decorations: ({ doc, selection }) => {\n const { isEditable, isFocused } = this.editor;\n const { anchor } = selection;\n const decorations = [];\n if (!isEditable || !isFocused) {\n return DecorationSet.create(doc, []);\n }\n // Maximum Levels\n let maxLevels = 0;\n if (this.options.mode === 'deepest') {\n doc.descendants((node, pos) => {\n if (node.isText) {\n return;\n }\n const isCurrent = anchor >= pos && anchor <= pos + node.nodeSize - 1;\n if (!isCurrent) {\n return false;\n }\n maxLevels += 1;\n });\n }\n // Loop through current\n let currentLevel = 0;\n doc.descendants((node, pos) => {\n if (node.isText) {\n return false;\n }\n const isCurrent = anchor >= pos && anchor <= pos + node.nodeSize - 1;\n if (!isCurrent) {\n return false;\n }\n currentLevel += 1;\n const outOfScope = (this.options.mode === 'deepest' && maxLevels - currentLevel > 0)\n || (this.options.mode === 'shallowest' && currentLevel > 1);\n if (outOfScope) {\n return this.options.mode === 'deepest';\n }\n decorations.push(Decoration.node(pos, pos + node.nodeSize, {\n class: this.options.className,\n }));\n });\n return DecorationSet.create(doc, decorations);\n },\n },\n }),\n ];\n },\n});\n\nexport { FocusClasses, FocusClasses as default };\n//# sourceMappingURL=index.js.map\n","import { Extension, callOrReturn, getExtensionField } from '@tiptap/core';\nimport { gapCursor } from '@tiptap/pm/gapcursor';\n\n/**\n * This extension allows you to add a gap cursor to your editor.\n * A gap cursor is a cursor that appears when you click on a place\n * where no content is present, for example inbetween nodes.\n * @see https://tiptap.dev/api/extensions/gapcursor\n */\nconst Gapcursor = Extension.create({\n name: 'gapCursor',\n addProseMirrorPlugins() {\n return [\n gapCursor(),\n ];\n },\n extendNodeSchema(extension) {\n var _a;\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n };\n return {\n allowGapCursor: (_a = callOrReturn(getExtensionField(extension, 'allowGapCursor', context))) !== null && _a !== void 0 ? _a : null,\n };\n },\n});\n\nexport { Gapcursor, Gapcursor as default };\n//# sourceMappingURL=index.js.map\n","import { Node, mergeAttributes } from '@tiptap/core';\n\n/**\n * This extension allows you to insert hard breaks.\n * @see https://www.tiptap.dev/api/nodes/hard-break\n */\nconst HardBreak = Node.create({\n name: 'hardBreak',\n addOptions() {\n return {\n keepMarks: true,\n HTMLAttributes: {},\n };\n },\n inline: true,\n group: 'inline',\n selectable: false,\n parseHTML() {\n return [\n { tag: 'br' },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['br', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)];\n },\n renderText() {\n return '\\n';\n },\n addCommands() {\n return {\n setHardBreak: () => ({ commands, chain, state, editor, }) => {\n return commands.first([\n () => commands.exitCode(),\n () => commands.command(() => {\n const { selection, storedMarks } = state;\n if (selection.$from.parent.type.spec.isolating) {\n return false;\n }\n const { keepMarks } = this.options;\n const { splittableMarks } = editor.extensionManager;\n const marks = storedMarks\n || (selection.$to.parentOffset && selection.$from.marks());\n return chain()\n .insertContent({ type: this.name })\n .command(({ tr, dispatch }) => {\n if (dispatch && marks && keepMarks) {\n const filteredMarks = marks\n .filter(mark => splittableMarks.includes(mark.type.name));\n tr.ensureMarks(filteredMarks);\n }\n return true;\n })\n .run();\n }),\n ]);\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-Enter': () => this.editor.commands.setHardBreak(),\n 'Shift-Enter': () => this.editor.commands.setHardBreak(),\n };\n },\n});\n\nexport { HardBreak, HardBreak as default };\n//# sourceMappingURL=index.js.map\n","import { Node, mergeAttributes } from '@tiptap/core';\n\n/**\n * This extension allows you to create list items.\n * @see https://www.tiptap.dev/api/nodes/list-item\n */\nconst ListItem = Node.create({\n name: 'listItem',\n addOptions() {\n return {\n HTMLAttributes: {},\n bulletListTypeName: 'bulletList',\n orderedListTypeName: 'orderedList',\n };\n },\n content: 'paragraph block*',\n defining: true,\n parseHTML() {\n return [\n {\n tag: 'li',\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['li', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addKeyboardShortcuts() {\n return {\n Enter: () => this.editor.commands.splitListItem(this.name),\n Tab: () => this.editor.commands.sinkListItem(this.name),\n 'Shift-Tab': () => this.editor.commands.liftListItem(this.name),\n };\n },\n});\n\nexport { ListItem, ListItem as default };\n//# sourceMappingURL=index.js.map\n","import { Node, mergeAttributes } from '@tiptap/core';\n\n/**\n * This extension allows you to create paragraphs.\n * @see https://www.tiptap.dev/api/nodes/paragraph\n */\nconst Paragraph = Node.create({\n name: 'paragraph',\n priority: 1000,\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n group: 'block',\n content: 'inline*',\n parseHTML() {\n return [\n { tag: 'p' },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['p', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n setParagraph: () => ({ commands }) => {\n return commands.setNode(this.name);\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-Alt-0': () => this.editor.commands.setParagraph(),\n };\n },\n});\n\nexport { Paragraph, Paragraph as default };\n//# sourceMappingURL=index.js.map\n","import { Extension, isNodeEmpty } from '@tiptap/core';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\nimport { Decoration, DecorationSet } from '@tiptap/pm/view';\n\n/**\n * This extension allows you to add a placeholder to your editor.\n * A placeholder is a text that appears when the editor or a node is empty.\n * @see https://www.tiptap.dev/api/extensions/placeholder\n */\nconst Placeholder = Extension.create({\n name: 'placeholder',\n addOptions() {\n return {\n emptyEditorClass: 'is-editor-empty',\n emptyNodeClass: 'is-empty',\n placeholder: 'Write something …',\n showOnlyWhenEditable: true,\n showOnlyCurrent: true,\n includeChildren: false,\n };\n },\n addProseMirrorPlugins() {\n return [\n new Plugin({\n key: new PluginKey('placeholder'),\n props: {\n decorations: ({ doc, selection }) => {\n const active = this.editor.isEditable || !this.options.showOnlyWhenEditable;\n const { anchor } = selection;\n const decorations = [];\n if (!active) {\n return null;\n }\n const isEmptyDoc = this.editor.isEmpty;\n doc.descendants((node, pos) => {\n const hasAnchor = anchor >= pos && anchor <= pos + node.nodeSize;\n const isEmpty = !node.isLeaf && isNodeEmpty(node);\n if ((hasAnchor || !this.options.showOnlyCurrent) && isEmpty) {\n const classes = [this.options.emptyNodeClass];\n if (isEmptyDoc) {\n classes.push(this.options.emptyEditorClass);\n }\n const decoration = Decoration.node(pos, pos + node.nodeSize, {\n class: classes.join(' '),\n 'data-placeholder': typeof this.options.placeholder === 'function'\n ? this.options.placeholder({\n editor: this.editor,\n node,\n pos,\n hasAnchor,\n })\n : this.options.placeholder,\n });\n decorations.push(decoration);\n }\n return this.options.includeChildren;\n });\n return DecorationSet.create(doc, decorations);\n },\n },\n }),\n ];\n },\n});\n\nexport { Placeholder, Placeholder as default };\n//# sourceMappingURL=index.js.map\n","import { Node } from '@tiptap/core';\n\n/**\n * This extension allows you to create text nodes.\n * @see https://www.tiptap.dev/api/nodes/text\n */\nconst Text = Node.create({\n name: 'text',\n group: 'inline',\n});\n\nexport { Text, Text as default };\n//# sourceMappingURL=index.js.map\n","import { Node } from '@tiptap/core';\n\n/**\n * The default document node which represents the top level node of the editor.\n * @see https://tiptap.dev/api/nodes/document\n */\nconst Document = Node.create({\n name: 'doc',\n topNode: true,\n content: 'block+',\n});\n\nexport { Document, Document as default };\n//# sourceMappingURL=index.js.map\n","import { Mark, mergeAttributes } from '@tiptap/core';\n\n/**\n * This extension allows you to create subscript text.\n * @see https://www.tiptap.dev/api/marks/subscript\n */\nconst Subscript = Mark.create({\n name: 'subscript',\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n parseHTML() {\n return [\n {\n tag: 'sub',\n },\n {\n style: 'vertical-align',\n getAttrs(value) {\n // Don’t match this rule if the vertical align isn’t sub.\n if (value !== 'sub') {\n return false;\n }\n // If it falls through we’ll match, and this mark will be applied.\n return null;\n },\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['sub', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n setSubscript: () => ({ commands }) => {\n return commands.setMark(this.name);\n },\n toggleSubscript: () => ({ commands }) => {\n return commands.toggleMark(this.name);\n },\n unsetSubscript: () => ({ commands }) => {\n return commands.unsetMark(this.name);\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-,': () => this.editor.commands.toggleSubscript(),\n };\n },\n});\n\nexport { Subscript, Subscript as default };\n//# sourceMappingURL=index.js.map\n","import { Mark, mergeAttributes } from '@tiptap/core';\n\n/**\n * This extension allows you to create superscript text.\n * @see https://www.tiptap.dev/api/marks/superscript\n */\nconst Superscript = Mark.create({\n name: 'superscript',\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n parseHTML() {\n return [\n {\n tag: 'sup',\n },\n {\n style: 'vertical-align',\n getAttrs(value) {\n // Don’t match this rule if the vertical align isn’t super.\n if (value !== 'super') {\n return false;\n }\n // If it falls through we’ll match, and this mark will be applied.\n return null;\n },\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['sup', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n addCommands() {\n return {\n setSuperscript: () => ({ commands }) => {\n return commands.setMark(this.name);\n },\n toggleSuperscript: () => ({ commands }) => {\n return commands.toggleMark(this.name);\n },\n unsetSuperscript: () => ({ commands }) => {\n return commands.unsetMark(this.name);\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n 'Mod-.': () => this.editor.commands.toggleSuperscript(),\n };\n },\n});\n\nexport { Superscript, Superscript as default };\n//# sourceMappingURL=index.js.map\n","import { PluginKey, Plugin } from '@tiptap/pm/state';\nimport { DecorationSet, Decoration } from '@tiptap/pm/view';\nimport { escapeForRegEx } from '@tiptap/core';\n\nfunction findSuggestionMatch(config) {\n var _a;\n const { char, allowSpaces, allowedPrefixes, startOfLine, $position, } = config;\n const escapedChar = escapeForRegEx(char);\n const suffix = new RegExp(`\\\\s${escapedChar}$`);\n const prefix = startOfLine ? '^' : '';\n const regexp = allowSpaces\n ? new RegExp(`${prefix}${escapedChar}.*?(?=\\\\s${escapedChar}|$)`, 'gm')\n : new RegExp(`${prefix}(?:^)?${escapedChar}[^\\\\s${escapedChar}]*`, 'gm');\n const text = ((_a = $position.nodeBefore) === null || _a === void 0 ? void 0 : _a.isText) && $position.nodeBefore.text;\n if (!text) {\n return null;\n }\n const textFrom = $position.pos - text.length;\n const match = Array.from(text.matchAll(regexp)).pop();\n if (!match || match.input === undefined || match.index === undefined) {\n return null;\n }\n // JavaScript doesn't have lookbehinds. This hacks a check that first character\n // is a space or the start of the line\n const matchPrefix = match.input.slice(Math.max(0, match.index - 1), match.index);\n const matchPrefixIsAllowed = new RegExp(`^[${allowedPrefixes === null || allowedPrefixes === void 0 ? void 0 : allowedPrefixes.join('')}\\0]?$`).test(matchPrefix);\n if (allowedPrefixes !== null && !matchPrefixIsAllowed) {\n return null;\n }\n // The absolute position of the match in the document\n const from = textFrom + match.index;\n let to = from + match[0].length;\n // Edge case handling; if spaces are allowed and we're directly in between\n // two triggers\n if (allowSpaces && suffix.test(text.slice(to - 1, to + 1))) {\n match[0] += ' ';\n to += 1;\n }\n // If the $position is located within the matched substring, return that range\n if (from < $position.pos && to >= $position.pos) {\n return {\n range: {\n from,\n to,\n },\n query: match[0].slice(char.length),\n text: match[0],\n };\n }\n return null;\n}\n\nconst SuggestionPluginKey = new PluginKey('suggestion');\n/**\n * This utility allows you to create suggestions.\n * @see https://tiptap.dev/api/utilities/suggestion\n */\nfunction Suggestion({ pluginKey = SuggestionPluginKey, editor, char = '@', allowSpaces = false, allowedPrefixes = [' '], startOfLine = false, decorationTag = 'span', decorationClass = 'suggestion', command = () => null, items = () => [], render = () => ({}), allow = () => true, findSuggestionMatch: findSuggestionMatch$1 = findSuggestionMatch, }) {\n let props;\n const renderer = render === null || render === void 0 ? void 0 : render();\n const plugin = new Plugin({\n key: pluginKey,\n view() {\n return {\n update: async (view, prevState) => {\n var _a, _b, _c, _d, _e, _f, _g;\n const prev = (_a = this.key) === null || _a === void 0 ? void 0 : _a.getState(prevState);\n const next = (_b = this.key) === null || _b === void 0 ? void 0 : _b.getState(view.state);\n // See how the state changed\n const moved = prev.active && next.active && prev.range.from !== next.range.from;\n const started = !prev.active && next.active;\n const stopped = prev.active && !next.active;\n const changed = !started && !stopped && prev.query !== next.query;\n const handleStart = started || (moved && changed);\n const handleChange = changed || moved;\n const handleExit = stopped || (moved && changed);\n // Cancel when suggestion isn't active\n if (!handleStart && !handleChange && !handleExit) {\n return;\n }\n const state = handleExit && !handleStart ? prev : next;\n const decorationNode = view.dom.querySelector(`[data-decoration-id=\"${state.decorationId}\"]`);\n props = {\n editor,\n range: state.range,\n query: state.query,\n text: state.text,\n items: [],\n command: commandProps => {\n return command({\n editor,\n range: state.range,\n props: commandProps,\n });\n },\n decorationNode,\n // virtual node for popper.js or tippy.js\n // this can be used for building popups without a DOM node\n clientRect: decorationNode\n ? () => {\n var _a;\n // because of `items` can be asynchrounous we’ll search for the current decoration node\n const { decorationId } = (_a = this.key) === null || _a === void 0 ? void 0 : _a.getState(editor.state); // eslint-disable-line\n const currentDecorationNode = view.dom.querySelector(`[data-decoration-id=\"${decorationId}\"]`);\n return (currentDecorationNode === null || currentDecorationNode === void 0 ? void 0 : currentDecorationNode.getBoundingClientRect()) || null;\n }\n : null,\n };\n if (handleStart) {\n (_c = renderer === null || renderer === void 0 ? void 0 : renderer.onBeforeStart) === null || _c === void 0 ? void 0 : _c.call(renderer, props);\n }\n if (handleChange) {\n (_d = renderer === null || renderer === void 0 ? void 0 : renderer.onBeforeUpdate) === null || _d === void 0 ? void 0 : _d.call(renderer, props);\n }\n if (handleChange || handleStart) {\n props.items = await items({\n editor,\n query: state.query,\n });\n }\n if (handleExit) {\n (_e = renderer === null || renderer === void 0 ? void 0 : renderer.onExit) === null || _e === void 0 ? void 0 : _e.call(renderer, props);\n }\n if (handleChange) {\n (_f = renderer === null || renderer === void 0 ? void 0 : renderer.onUpdate) === null || _f === void 0 ? void 0 : _f.call(renderer, props);\n }\n if (handleStart) {\n (_g = renderer === null || renderer === void 0 ? void 0 : renderer.onStart) === null || _g === void 0 ? void 0 : _g.call(renderer, props);\n }\n },\n destroy: () => {\n var _a;\n if (!props) {\n return;\n }\n (_a = renderer === null || renderer === void 0 ? void 0 : renderer.onExit) === null || _a === void 0 ? void 0 : _a.call(renderer, props);\n },\n };\n },\n state: {\n // Initialize the plugin's internal state.\n init() {\n const state = {\n active: false,\n range: {\n from: 0,\n to: 0,\n },\n query: null,\n text: null,\n composing: false,\n };\n return state;\n },\n // Apply changes to the plugin state from a view transaction.\n apply(transaction, prev, _oldState, state) {\n const { isEditable } = editor;\n const { composing } = editor.view;\n const { selection } = transaction;\n const { empty, from } = selection;\n const next = { ...prev };\n next.composing = composing;\n // We can only be suggesting if the view is editable, and:\n // * there is no selection, or\n // * a composition is active (see: https://github.com/ueberdosis/tiptap/issues/1449)\n if (isEditable && (empty || editor.view.composing)) {\n // Reset active state if we just left the previous suggestion range\n if ((from < prev.range.from || from > prev.range.to) && !composing && !prev.composing) {\n next.active = false;\n }\n // Try to match against where our cursor currently is\n const match = findSuggestionMatch$1({\n char,\n allowSpaces,\n allowedPrefixes,\n startOfLine,\n $position: selection.$from,\n });\n const decorationId = `id_${Math.floor(Math.random() * 0xffffffff)}`;\n // If we found a match, update the current state to show it\n if (match && allow({\n editor, state, range: match.range, isActive: prev.active,\n })) {\n next.active = true;\n next.decorationId = prev.decorationId ? prev.decorationId : decorationId;\n next.range = match.range;\n next.query = match.query;\n next.text = match.text;\n }\n else {\n next.active = false;\n }\n }\n else {\n next.active = false;\n }\n // Make sure to empty the range if suggestion is inactive\n if (!next.active) {\n next.decorationId = null;\n next.range = { from: 0, to: 0 };\n next.query = null;\n next.text = null;\n }\n return next;\n },\n },\n props: {\n // Call the keydown hook if suggestion is active.\n handleKeyDown(view, event) {\n var _a;\n const { active, range } = plugin.getState(view.state);\n if (!active) {\n return false;\n }\n return ((_a = renderer === null || renderer === void 0 ? void 0 : renderer.onKeyDown) === null || _a === void 0 ? void 0 : _a.call(renderer, { view, event, range })) || false;\n },\n // Setup decorator on the currently active suggestion.\n decorations(state) {\n const { active, range, decorationId } = plugin.getState(state);\n if (!active) {\n return null;\n }\n return DecorationSet.create(state.doc, [\n Decoration.inline(range.from, range.to, {\n nodeName: decorationTag,\n class: decorationClass,\n 'data-decoration-id': decorationId,\n }),\n ]);\n },\n },\n });\n return plugin;\n}\n\nexport { Suggestion, SuggestionPluginKey, Suggestion as default, findSuggestionMatch };\n//# sourceMappingURL=index.js.map\n","import { Node, mergeAttributes, nodeInputRule } from '@tiptap/core';\n\n/**\n * Matches an image to a  on input.\n */\nconst inputRegex = /(?:^|\\s)(!\\[(.+|:?)]\\((\\S+)(?:(?:\\s+)[\"'](\\S+)[\"'])?\\))$/;\n/**\n * This extension allows you to insert images.\n * @see https://www.tiptap.dev/api/nodes/image\n */\nconst Image = Node.create({\n name: 'image',\n addOptions() {\n return {\n inline: false,\n allowBase64: false,\n HTMLAttributes: {},\n };\n },\n inline() {\n return this.options.inline;\n },\n group() {\n return this.options.inline ? 'inline' : 'block';\n },\n draggable: true,\n addAttributes() {\n return {\n src: {\n default: null,\n },\n alt: {\n default: null,\n },\n title: {\n default: null,\n },\n };\n },\n parseHTML() {\n return [\n {\n tag: this.options.allowBase64\n ? 'img[src]'\n : 'img[src]:not([src^=\"data:\"])',\n },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['img', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes)];\n },\n addCommands() {\n return {\n setImage: options => ({ commands }) => {\n return commands.insertContent({\n type: this.name,\n attrs: options,\n });\n },\n };\n },\n addInputRules() {\n return [\n nodeInputRule({\n find: inputRegex,\n type: this.type,\n getAttributes: match => {\n const [, , alt, src, title] = match;\n return { src, alt, title };\n },\n }),\n ];\n },\n});\n\nexport { Image, Image as default, inputRegex };\n//# sourceMappingURL=index.js.map\n","import { Node, mergeAttributes } from '@tiptap/core';\n\n/**\n * This extension allows you to create table rows.\n * @see https://www.tiptap.dev/api/nodes/table-row\n */\nconst TableRow = Node.create({\n name: 'tableRow',\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n content: '(tableCell | tableHeader)*',\n tableRole: 'row',\n parseHTML() {\n return [\n { tag: 'tr' },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['tr', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n});\n\nexport { TableRow, TableRow as default };\n//# sourceMappingURL=index.js.map\n","import { findParentNodeClosestToPos, Node, mergeAttributes, callOrReturn, getExtensionField } from '@tiptap/core';\nimport { TextSelection } from '@tiptap/pm/state';\nimport { CellSelection, addColumnBefore, addColumnAfter, deleteColumn, addRowBefore, addRowAfter, deleteRow, deleteTable, mergeCells, splitCell, toggleHeader, toggleHeaderCell, setCellAttr, goToNextCell, fixTables, columnResizing, tableEditing } from '@tiptap/pm/tables';\n\nfunction updateColumns(node, colgroup, table, cellMinWidth, overrideCol, overrideValue) {\n let totalWidth = 0;\n let fixedWidth = true;\n let nextDOM = colgroup.firstChild;\n const row = node.firstChild;\n for (let i = 0, col = 0; i < row.childCount; i += 1) {\n const { colspan, colwidth } = row.child(i).attrs;\n for (let j = 0; j < colspan; j += 1, col += 1) {\n const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j];\n const cssWidth = hasWidth ? `${hasWidth}px` : '';\n totalWidth += hasWidth || cellMinWidth;\n if (!hasWidth) {\n fixedWidth = false;\n }\n if (!nextDOM) {\n colgroup.appendChild(document.createElement('col')).style.width = cssWidth;\n }\n else {\n if (nextDOM.style.width !== cssWidth) {\n nextDOM.style.width = cssWidth;\n }\n nextDOM = nextDOM.nextSibling;\n }\n }\n }\n while (nextDOM) {\n const after = nextDOM.nextSibling;\n nextDOM.parentNode.removeChild(nextDOM);\n nextDOM = after;\n }\n if (fixedWidth) {\n table.style.width = `${totalWidth}px`;\n table.style.minWidth = '';\n }\n else {\n table.style.width = '';\n table.style.minWidth = `${totalWidth}px`;\n }\n}\nclass TableView {\n constructor(node, cellMinWidth) {\n this.node = node;\n this.cellMinWidth = cellMinWidth;\n this.dom = document.createElement('div');\n this.dom.className = 'tableWrapper';\n this.table = this.dom.appendChild(document.createElement('table'));\n this.colgroup = this.table.appendChild(document.createElement('colgroup'));\n updateColumns(node, this.colgroup, this.table, cellMinWidth);\n this.contentDOM = this.table.appendChild(document.createElement('tbody'));\n }\n update(node) {\n if (node.type !== this.node.type) {\n return false;\n }\n this.node = node;\n updateColumns(node, this.colgroup, this.table, this.cellMinWidth);\n return true;\n }\n ignoreMutation(mutation) {\n return (mutation.type === 'attributes'\n && (mutation.target === this.table || this.colgroup.contains(mutation.target)));\n }\n}\n\n/**\n * Creates a colgroup element for a table node in ProseMirror.\n *\n * @param node - The ProseMirror node representing the table.\n * @param cellMinWidth - The minimum width of a cell in the table.\n * @param overrideCol - (Optional) The index of the column to override the width of.\n * @param overrideValue - (Optional) The width value to use for the overridden column.\n * @returns An object containing the colgroup element, the total width of the table, and the minimum width of the table.\n */\nfunction createColGroup(node, cellMinWidth, overrideCol, overrideValue) {\n let totalWidth = 0;\n let fixedWidth = true;\n const cols = [];\n const row = node.firstChild;\n if (!row) {\n return {};\n }\n for (let i = 0, col = 0; i < row.childCount; i += 1) {\n const { colspan, colwidth } = row.child(i).attrs;\n for (let j = 0; j < colspan; j += 1, col += 1) {\n const hasWidth = overrideCol === col ? overrideValue : colwidth && colwidth[j];\n const cssWidth = hasWidth ? `${hasWidth}px` : '';\n totalWidth += hasWidth || cellMinWidth;\n if (!hasWidth) {\n fixedWidth = false;\n }\n cols.push(['col', cssWidth ? { style: `width: ${cssWidth}` } : {}]);\n }\n }\n const tableWidth = fixedWidth ? `${totalWidth}px` : '';\n const tableMinWidth = fixedWidth ? '' : `${totalWidth}px`;\n const colgroup = ['colgroup', {}, ...cols];\n return { colgroup, tableWidth, tableMinWidth };\n}\n\nfunction createCell(cellType, cellContent) {\n if (cellContent) {\n return cellType.createChecked(null, cellContent);\n }\n return cellType.createAndFill();\n}\n\nfunction getTableNodeTypes(schema) {\n if (schema.cached.tableNodeTypes) {\n return schema.cached.tableNodeTypes;\n }\n const roles = {};\n Object.keys(schema.nodes).forEach(type => {\n const nodeType = schema.nodes[type];\n if (nodeType.spec.tableRole) {\n roles[nodeType.spec.tableRole] = nodeType;\n }\n });\n schema.cached.tableNodeTypes = roles;\n return roles;\n}\n\nfunction createTable(schema, rowsCount, colsCount, withHeaderRow, cellContent) {\n const types = getTableNodeTypes(schema);\n const headerCells = [];\n const cells = [];\n for (let index = 0; index < colsCount; index += 1) {\n const cell = createCell(types.cell, cellContent);\n if (cell) {\n cells.push(cell);\n }\n if (withHeaderRow) {\n const headerCell = createCell(types.header_cell, cellContent);\n if (headerCell) {\n headerCells.push(headerCell);\n }\n }\n }\n const rows = [];\n for (let index = 0; index < rowsCount; index += 1) {\n rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells));\n }\n return types.table.createChecked(null, rows);\n}\n\nfunction isCellSelection(value) {\n return value instanceof CellSelection;\n}\n\nconst deleteTableWhenAllCellsSelected = ({ editor }) => {\n const { selection } = editor.state;\n if (!isCellSelection(selection)) {\n return false;\n }\n let cellCount = 0;\n const table = findParentNodeClosestToPos(selection.ranges[0].$from, node => {\n return node.type.name === 'table';\n });\n table === null || table === void 0 ? void 0 : table.node.descendants(node => {\n if (node.type.name === 'table') {\n return false;\n }\n if (['tableCell', 'tableHeader'].includes(node.type.name)) {\n cellCount += 1;\n }\n });\n const allCellsSelected = cellCount === selection.ranges.length;\n if (!allCellsSelected) {\n return false;\n }\n editor.commands.deleteTable();\n return true;\n};\n\n/**\n * This extension allows you to create tables.\n * @see https://www.tiptap.dev/api/nodes/table\n */\nconst Table = Node.create({\n name: 'table',\n // @ts-ignore\n addOptions() {\n return {\n HTMLAttributes: {},\n resizable: false,\n handleWidth: 5,\n cellMinWidth: 25,\n // TODO: fix\n View: TableView,\n lastColumnResizable: true,\n allowTableNodeSelection: false,\n };\n },\n content: 'tableRow+',\n tableRole: 'table',\n isolating: true,\n group: 'block',\n parseHTML() {\n return [{ tag: 'table' }];\n },\n renderHTML({ node, HTMLAttributes }) {\n const { colgroup, tableWidth, tableMinWidth } = createColGroup(node, this.options.cellMinWidth);\n const table = [\n 'table',\n mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {\n style: tableWidth\n ? `width: ${tableWidth}`\n : `min-width: ${tableMinWidth}`,\n }),\n colgroup,\n ['tbody', 0],\n ];\n return table;\n },\n addCommands() {\n return {\n insertTable: ({ rows = 3, cols = 3, withHeaderRow = true } = {}) => ({ tr, dispatch, editor }) => {\n const node = createTable(editor.schema, rows, cols, withHeaderRow);\n if (dispatch) {\n const offset = tr.selection.from + 1;\n tr.replaceSelectionWith(node)\n .scrollIntoView()\n .setSelection(TextSelection.near(tr.doc.resolve(offset)));\n }\n return true;\n },\n addColumnBefore: () => ({ state, dispatch }) => {\n return addColumnBefore(state, dispatch);\n },\n addColumnAfter: () => ({ state, dispatch }) => {\n return addColumnAfter(state, dispatch);\n },\n deleteColumn: () => ({ state, dispatch }) => {\n return deleteColumn(state, dispatch);\n },\n addRowBefore: () => ({ state, dispatch }) => {\n return addRowBefore(state, dispatch);\n },\n addRowAfter: () => ({ state, dispatch }) => {\n return addRowAfter(state, dispatch);\n },\n deleteRow: () => ({ state, dispatch }) => {\n return deleteRow(state, dispatch);\n },\n deleteTable: () => ({ state, dispatch }) => {\n return deleteTable(state, dispatch);\n },\n mergeCells: () => ({ state, dispatch }) => {\n return mergeCells(state, dispatch);\n },\n splitCell: () => ({ state, dispatch }) => {\n return splitCell(state, dispatch);\n },\n toggleHeaderColumn: () => ({ state, dispatch }) => {\n return toggleHeader('column')(state, dispatch);\n },\n toggleHeaderRow: () => ({ state, dispatch }) => {\n return toggleHeader('row')(state, dispatch);\n },\n toggleHeaderCell: () => ({ state, dispatch }) => {\n return toggleHeaderCell(state, dispatch);\n },\n mergeOrSplit: () => ({ state, dispatch }) => {\n if (mergeCells(state, dispatch)) {\n return true;\n }\n return splitCell(state, dispatch);\n },\n setCellAttribute: (name, value) => ({ state, dispatch }) => {\n return setCellAttr(name, value)(state, dispatch);\n },\n goToNextCell: () => ({ state, dispatch }) => {\n return goToNextCell(1)(state, dispatch);\n },\n goToPreviousCell: () => ({ state, dispatch }) => {\n return goToNextCell(-1)(state, dispatch);\n },\n fixTables: () => ({ state, dispatch }) => {\n if (dispatch) {\n fixTables(state);\n }\n return true;\n },\n setCellSelection: position => ({ tr, dispatch }) => {\n if (dispatch) {\n const selection = CellSelection.create(tr.doc, position.anchorCell, position.headCell);\n // @ts-ignore\n tr.setSelection(selection);\n }\n return true;\n },\n };\n },\n addKeyboardShortcuts() {\n return {\n Tab: () => {\n if (this.editor.commands.goToNextCell()) {\n return true;\n }\n if (!this.editor.can().addRowAfter()) {\n return false;\n }\n return this.editor.chain().addRowAfter().goToNextCell().run();\n },\n 'Shift-Tab': () => this.editor.commands.goToPreviousCell(),\n Backspace: deleteTableWhenAllCellsSelected,\n 'Mod-Backspace': deleteTableWhenAllCellsSelected,\n Delete: deleteTableWhenAllCellsSelected,\n 'Mod-Delete': deleteTableWhenAllCellsSelected,\n };\n },\n addProseMirrorPlugins() {\n const isResizable = this.options.resizable && this.editor.isEditable;\n return [\n ...(isResizable\n ? [\n columnResizing({\n handleWidth: this.options.handleWidth,\n cellMinWidth: this.options.cellMinWidth,\n View: this.options.View,\n lastColumnResizable: this.options.lastColumnResizable,\n }),\n ]\n : []),\n tableEditing({\n allowTableNodeSelection: this.options.allowTableNodeSelection,\n }),\n ];\n },\n extendNodeSchema(extension) {\n const context = {\n name: extension.name,\n options: extension.options,\n storage: extension.storage,\n };\n return {\n tableRole: callOrReturn(getExtensionField(extension, 'tableRole', context)),\n };\n },\n});\n\nexport { Table, createColGroup, createTable, Table as default };\n//# sourceMappingURL=index.js.map\n","import { Node, mergeAttributes } from '@tiptap/core';\n\n/**\n * This extension allows you to create table cells.\n * @see https://www.tiptap.dev/api/nodes/table-cell\n */\nconst TableCell = Node.create({\n name: 'tableCell',\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n content: 'block+',\n addAttributes() {\n return {\n colspan: {\n default: 1,\n },\n rowspan: {\n default: 1,\n },\n colwidth: {\n default: null,\n parseHTML: element => {\n const colwidth = element.getAttribute('colwidth');\n const value = colwidth\n ? [parseInt(colwidth, 10)]\n : null;\n return value;\n },\n },\n };\n },\n tableRole: 'cell',\n isolating: true,\n parseHTML() {\n return [\n { tag: 'td' },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['td', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n});\n\nexport { TableCell, TableCell as default };\n//# sourceMappingURL=index.js.map\n","import { Node, mergeAttributes } from '@tiptap/core';\n\n/**\n * This extension allows you to create table headers.\n * @see https://www.tiptap.dev/api/nodes/table-header\n */\nconst TableHeader = Node.create({\n name: 'tableHeader',\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n content: 'block+',\n addAttributes() {\n return {\n colspan: {\n default: 1,\n },\n rowspan: {\n default: 1,\n },\n colwidth: {\n default: null,\n parseHTML: element => {\n const colwidth = element.getAttribute('colwidth');\n const value = colwidth\n ? [parseInt(colwidth, 10)]\n : null;\n return value;\n },\n },\n };\n },\n tableRole: 'header_cell',\n isolating: true,\n parseHTML() {\n return [\n { tag: 'th' },\n ];\n },\n renderHTML({ HTMLAttributes }) {\n return ['th', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];\n },\n});\n\nexport { TableHeader, TableHeader as default };\n//# sourceMappingURL=index.js.map\n"],"names":["createChainableState","config","state","transaction","selection","doc","storedMarks","CommandManager","props","rawCommands","editor","view","tr","name","command","args","callback","startTr","shouldDispatch","callbacks","hasStartTransaction","run","chain","dispatch","EventEmitter","event","fn","getExtensionField","extension","field","context","splitExtensions","extensions","baseExtensions","nodeExtensions","markExtensions","getAttributesFromExtensions","extensionAttributes","nodeAndMarkExtensions","defaultAttribute","addGlobalAttributes","globalAttribute","type","attribute","addAttributes","attributes","mergedAttr","getNodeType","nameOrType","schema","mergeAttributes","objects","item","items","mergedAttributes","key","value","valueClasses","existingClasses","insertClasses","valueClass","getRenderedAttributes","nodeOrMark","isFunction","callOrReturn","isEmptyObject","fromString","injectExtensionAttributesToParseRule","parseRule","node","oldAttributes","newAttributes","cleanUpSchemaItem","data","getSchemaByResolvedExtensions","_a","allAttributes","topNode","nodes","extraNodeFields","fields","e","extendNodeSchema","extensionAttribute","parseHTML","renderHTML","renderText","marks","extraMarkFields","extendMarkSchema","mark","Schema","getSchemaTypeByName","isExtensionRulesEnabled","enabled","enabledExtension","getTextContentFromNodes","$from","maxMatch","textBefore","sliceEndPos","pos","parent","index","_b","chunk","isRegExp","InputRule","inputRuleMatcherHandler","text","find","inputRuleMatch","result","run$1","from","to","rules","plugin","matched","rule","match","range","commands","can","inputRulesPlugin","Plugin","prev","stored","simulatedInputMeta","$cursor","isNumber","PasteRule","pasteRuleMatcherHandler","matches","pasteRuleMatch","pasteEvent","dropEvent","handlers","resolvedFrom","resolvedTo","textToMatch","start","end","handler","createClipboardPasteEvent","pasteRulesPlugin","dragSourceElement","isPastedFromProseMirror","isDroppedFromProseMirror","processEvent","pasteEvt","chainableState","handleDragstart","_view","html","transactions","oldState","isPaste","isDrop","simulatedPasteMeta","isSimulatedPaste","findDuplicates","filtered","el","ExtensionManager","resolvedExtensions","duplicatedNames","addExtensions","a","b","priorityA","priorityB","addCommands","inputRules","pasteRules","allPlugins","plugins","addKeyboardShortcuts","defaultBindings","Mark","bindings","shortcut","method","keyMapPlugin","keymap","addInputRules","addPasteRules","addProseMirrorPlugins","proseMirrorPlugins","addNodeView","nodeview","getPos","decorations","HTMLAttributes","onBeforeCreate","onCreate","onUpdate","onSelectionUpdate","onTransaction","onFocus","onBlur","onDestroy","getType","isPlainObject","mergeDeep","target","source","output","Extension","options","extendedConfig","getTextBetween","startNode","blockSeparator","textSerializers","textSerializer","getTextSerializersFromSchema","ClipboardTextSerializer","PluginKey","ranges","blur","clearContent","emitUpdate","clearNodes","$to","mapping","$mappedFrom","$mappedTo","nodeRange","targetLiftDepth","liftTarget","defaultType","createParagraphNear","createParagraphNear$1","cut","originRange","targetPos","contentSlice","newPos","TextSelection","deleteCurrentNode","currentNode","$pos","depth","deleteNode","typeOrName","deleteRange","deleteSelection","deleteSelection$1","enter","exitCode","exitCode$1","objectIncludes","object1","object2","keys","findMarkInSet","isMarkInSet","getMarkRange","startIndex","startPos","endIndex","endPos","getMarkType","extendMarkRange","newSelection","first","i","isTextSelection","minMax","min","max","resolveFocusPosition","position","selectionAtStart","Selection","selectionAtEnd","minPos","maxPos","isiOS","focus","delayedFocus","isSameSelection","forEach","insertContent","removeWhitespaces","children","child","elementFromString","wrappedValue","createNodeFromContent","content","isJSONContent","isTextContent","Fragment","error","hasInvalidContent","invalidContent","contentCheckSchema","DOMParser","parser","selectionToInsertionEnd","startLen","bias","last","step","ReplaceStep","ReplaceAroundStep","map","_from","_to","_newFrom","newTo","isFragment","nodeOrFragment","insertContentAt","isOnlyTextContent","isOnlyBlockContent","newContent","v","joinUp","joinUp$1","joinDown","joinDown$1","joinBackward","joinBackward$1","joinForward","joinForward$1","joinItemBackward","point","joinPoint","joinItemForward","joinTextblockBackward","joinTextblockBackward$1","joinTextblockForward","joinTextblockForward$1","isMacOS","normalizeKeyName","parts","alt","ctrl","shift","meta","mod","keyboardShortcut","capturedTransaction","f","newStep","isNodeActive","empty","nodeRanges","relativeFrom","relativeTo","selectionRange","matchedNodeRanges","sum","lift","lift$1","liftEmptyBlock","liftEmptyBlock$1","liftListItem","liftListItem$1","newlineInCode","newlineInCode$1","getSchemaTypeNameByName","deleteProps","obj","propOrProps","newObj","prop","resetAttributes","nodeType","markType","schemaType","scrollIntoView","selectAll","selectNodeBackward","selectNodeBackward$1","selectNodeForward","selectNodeForward$1","selectParentNode","selectParentNode$1","selectTextblockEnd","selectTextblockEnd$1","selectTextblockStart","selectTextblockStart$1","createDocument","parseOptions","setContent","document","getMarkAttributes","markItem","combineTransactionSteps","oldDoc","transform","Transform","defaultBlockAt","findChildren","predicate","nodesWithPos","findChildrenInRange","findParentNodeClosestToPos","findParentNode","getHTMLFromFragment","fragment","documentFragment","DOMSerializer","container","getText","getNodeAttributes","nodeItem","getAttributes","removeDuplicates","array","by","seen","simplifyChangedRanges","changes","uniqueChanges","change","_","otherChange","getChangedRanges","steps","stepMap","newStart","newEnd","oldStart","oldEnd","getMarksBetween","getSplittedAttributes","typeName","isMarkActive","markRanges","matchedRange","markRange","excludedRange","isActive","isList","group","isNodeEmpty","checkChildren","ignoreWhitespace","isContentEmpty","childNode","isNodeSelection","NodeSelection","posToDOMRect","resolvedEnd","top","bottom","left","right","width","height","canSetMark","newMarkType","cursor","currentMarks","someNodeSupportsMark","_pos","parentAllowsMarkType","currentMarksAllowMarkType","otherMark","setMark","trimmedFrom","trimmedTo","setMeta","setNode","setBlockType","updatedState","setNodeSelection","setTextSelection","sinkListItem","sinkListItem$1","ensureMarks","splittableMarks","filteredMarks","splitBlock","keepMarks","canSplit","atEnd","deflt","types","$first","splitListItem","overrideAttrs","grandParent","wrap","depthBefore","d","depthAfter","newNextTypeAttributes","nextType","Slice","sel","n","newTypeAttributes","joinListBackwards","listType","list","before","nodeBefore","canJoin","joinListForwards","after","nodeAfter","toggleList","listTypeOrName","itemTypeOrName","itemType","parentList","canWrapInList","toggleMark","extendEmptyMarkRange","toggleNode","toggleTypeOrName","toggleType","toggleWrap","undoInputRule","undoable","toUndo","j","unsetAllMarks","unsetMark","attrs","updateAttributes","wrapIn","wrapIn$1","wrapInList","wrapInList$1","Commands","Editable","FocusEvents","Keymap","handleBackspace","$anchor","$parentPos","parentIsIsolating","parentPos","isAtStart","handleDelete","baseKeymap","pcKeymap","macKeymap","newState","allFrom","allEnd","Tabindex","NodePos","isBlock","offset","childNodePos","selector","nodeAttributes","attrKeys","firstItemOnly","childPos","oldSelection","style","createStyleTag","nonce","suffix","tiptapStyleTag","styleNode","Editor","editable","handlePlugins","nameOrPluginKey","allExtensions","EditorView","EditorState","dom","selectionHasChanged","nameOrAttributes","attributesOrUndefined","markInputRule","captureGroup","fullMatch","startSpaces","textStart","textEnd","markEnd","nodeInputRule","newNode","matchStart","lastChar","insertionStart","textblockTypeInputRule","$start","wrappingInputRule","blockRange","wrapping","findWrapping","currentPos","m","removeMark","Node","isAndroid","NodeView","component","_c","_d","_e","_f","_g","dragHandle","x","y","domBox","handleBox","offsetX","offsetY","isDragEvent","isDropEvent","isEditable","isDragging","isDraggable","isSelectable","isCopyEvent","isPasteEvent","isCutEvent","isClickEvent","mutation","markPasteRule","escapeForRegEx","string","starInputRegex","starPasteRegex","underscoreInputRegex","underscorePasteRegex","Bold","BubbleMenuView","element","tippyOptions","updateDelay","shouldShow","isEmptyTextBlock","isChildOfMenu","selectionChanged","docChanged","composing","nodeViewWrapper","editorElement","editorIsAttached","tippy","hasValidSelection","BubbleMenuPlugin","shim","useSyncExternalStoreShim_production_min","hasRequiredUseSyncExternalStoreShim_production_min","requireUseSyncExternalStoreShim_production_min","React","h","k","l","p","q","c","r","t","useSyncExternalStoreShim_development","hasRequiredUseSyncExternalStoreShim_development","requireUseSyncExternalStoreShim_development","React$1","ReactSharedInternals","format","_len2","_key2","printWarning","level","ReactDebugCurrentFrame","stack","argsWithFormat","is","objectIs","useState","useEffect","useLayoutEffect","useDebugValue","didWarnOld18Alpha","didWarnUncachedGetSnapshot","useSyncExternalStore","subscribe","getSnapshot","getServerSnapshot","cachedValue","_useState","inst","forceUpdate","checkIfSnapshotChanged","handleStoreChange","latestGetSnapshot","prevValue","nextValue","useSyncExternalStore$1","canUseDOM","isServerEnvironment","useSyncExternalStore$2","shimExports","mergeRefs","refs","ref","Portals","contentComponent","renderers","getInstance","subscribers","id","renderer","ReactDOM","subscriber","nextRenderers","PureEditorContent","prevState","newElement","innerRef","rest","EditorContentWithKey","forwardRef","EditorContent","withSelector","withSelector_production_min","hasRequiredWithSelector_production_min","requireWithSelector_production_min","u","w","g","withSelector_development","hasRequiredWithSelector_development","requireWithSelector_development","useRef","useMemo","useSyncExternalStoreWithSelector","isEqual","instRef","_useMemo","hasMemo","memoizedSnapshot","memoizedSelection","memoizedSelector","nextSnapshot","_nextSelection","currentSelection","prevSnapshot","prevSelection","nextSelection","maybeGetServerSnapshot","getSnapshotWithSelector","getServerSnapshotWithSelector","getSelection","getServerSelection","withSelectorExports","EditorStateManager","initialEditor","nextEditor","currentEditor","useEditorState","editorInstance","selectedState","isDev","isSSR","isNext","EditorInstanceManager","cb","optionsToApply","onStoreChange","deps","dep","currentInstanceId","useEditor","mostRecentOptions","instanceManager","transactionNumber","EditorContext","createContext","useCurrentEditor","useContext","BubbleMenu","setElement","pluginKey","menuEditor","ReactNodeViewContext","useReactNodeView","NodeViewWrapper","onDragStart","Tag","isClassComponent","Component","isForwardRefComponent","ReactRenderer","as","className","flushSync","ReactNodeView","capitalizeFirstChar","ReactNodeViewProvider","componentProps","updateProps","oldNode","oldDecorations","ReactNodeViewRenderer","getSelectionRanges","root","NodeRange","size","SelectionRange","NodeRangeBookmark","anchor","head","__publicField","o","NodeRangeSelection","s","other","json","cloneElement","clonedNode","originalElements","clonedElements","styles","computedStyles","getComputedStyles","property","removeNode","findElementNextToCoords","direction","resultElement","resultNode","elements","filteredElements","getSelectionRangesNearCursor","getPreviousNodeStartPosition","getAncestorNodeAtDepth","getOuterNode","ySyncPluginKey","absolutePositionToRelativePosition","getOuterNodePos","dragHandlePluginDefaultKey","DragHandlePlugin","onNodeChange","tippyInstance","lastNodePos","E","Italic","Underline","inputRegex","pasteRegex","Strike","Code","backtickInputRegex","tildeInputRegex","CodeBlock","languageClassPrefix","language","isAtEnd","endsWithDoubleNewline","vscode","vscodeData","textNode","TextStyle","FontFamily","fontFamily","Heading","TextAlign","alignment","response","Color","color","Highlight","ListItem","BulletList","inputRule","OrderedList","attributesWithoutStart","TaskItem","dataChecked","shortcuts","listItem","checkboxWrapper","checkboxStyler","checkbox","checked","updatedNode","TaskList","Blockquote","isValidLinkStructure","tokens","autolink","docChanges","preventAutolink","newRange","nodesInChangedRanges","textBlock","textBeforeWhitespace","wordsBeforeWhitespace","lastWordBeforeSpace","lastWordAndBlockOffset","linksBeforeSpace","tokenize","link","clickHandler","els","href","pasteHandler","slice","textContent","ATTR_WHITESPACE","isAllowedUri","uri","protocols","allowedProtocols","protocol","nextProtocol","Link","registerCustomProtocol","reset","url","foundLinks","validate","links","HorizontalRule","$originFrom","$originTo","currentChain","posAfter","History","undo","redo","history","CharacterCount","word","limit","oldSize","newSize","over","Dropcursor","dropCursor","FocusClasses","isFocused","DecorationSet","maxLevels","currentLevel","Decoration","Gapcursor","gapCursor","HardBreak","Paragraph","Placeholder","active","isEmptyDoc","hasAnchor","isEmpty","classes","decoration","Text","Document","Subscript","Superscript","findSuggestionMatch","char","allowSpaces","allowedPrefixes","startOfLine","$position","escapedChar","prefix","regexp","textFrom","matchPrefix","matchPrefixIsAllowed","SuggestionPluginKey","Suggestion","decorationTag","decorationClass","render","allow","findSuggestionMatch$1","next","moved","started","stopped","changed","handleStart","handleChange","handleExit","decorationNode","commandProps","decorationId","currentDecorationNode","_oldState","Image","src","title","TableRow","updateColumns","colgroup","table","cellMinWidth","overrideCol","overrideValue","totalWidth","fixedWidth","nextDOM","row","col","colspan","colwidth","hasWidth","cssWidth","TableView","createColGroup","cols","tableWidth","tableMinWidth","createCell","cellType","cellContent","getTableNodeTypes","roles","createTable","rowsCount","colsCount","withHeaderRow","headerCells","cells","cell","headerCell","rows","isCellSelection","CellSelection","deleteTableWhenAllCellsSelected","cellCount","Table","addColumnBefore","addColumnAfter","deleteColumn","addRowBefore","addRowAfter","deleteRow","deleteTable","mergeCells","splitCell","toggleHeader","toggleHeaderCell","setCellAttr","goToNextCell","fixTables","columnResizing","tableEditing","TableCell","TableHeader"],"mappings":"0QAaA,SAASA,GAAqBC,EAAQ,CAClC,KAAM,CAAE,MAAAC,EAAO,YAAAC,CAAa,EAAGF,EAC/B,GAAI,CAAE,UAAAG,CAAW,EAAGD,EAChB,CAAE,IAAAE,CAAK,EAAGF,EACV,CAAE,YAAAG,CAAa,EAAGH,EACtB,MAAO,CACH,GAAGD,EACH,MAAOA,EAAM,MAAM,KAAKA,CAAK,EAC7B,iBAAkBA,EAAM,iBAAiB,KAAKA,CAAK,EACnD,QAASA,EAAM,QACf,OAAQA,EAAM,OACd,YAAaA,EAAM,YAAY,KAAKA,CAAK,EACzC,OAAQA,EAAM,OAAO,KAAKA,CAAK,EAC/B,IAAI,aAAc,CACd,OAAOI,CACV,EACD,IAAI,WAAY,CACZ,OAAOF,CACV,EACD,IAAI,KAAM,CACN,OAAOC,CACV,EACD,IAAI,IAAK,CACL,OAAAD,EAAYD,EAAY,UACxBE,EAAMF,EAAY,IAClBG,EAAcH,EAAY,YACnBA,CACV,CACT,CACA,CAEA,MAAMI,EAAe,CACjB,YAAYC,EAAO,CACf,KAAK,OAASA,EAAM,OACpB,KAAK,YAAc,KAAK,OAAO,iBAAiB,SAChD,KAAK,YAAcA,EAAM,KAC5B,CACD,IAAI,gBAAiB,CACjB,MAAO,CAAC,CAAC,KAAK,WACjB,CACD,IAAI,OAAQ,CACR,OAAO,KAAK,aAAe,KAAK,OAAO,KAC1C,CACD,IAAI,UAAW,CACX,KAAM,CAAE,YAAAC,EAAa,OAAAC,EAAQ,MAAAR,CAAK,EAAK,KACjC,CAAE,KAAAS,CAAM,EAAGD,EACX,CAAE,GAAAE,CAAI,EAAGV,EACTM,EAAQ,KAAK,WAAWI,CAAE,EAChC,OAAO,OAAO,YAAY,OAAO,QAAQH,CAAW,EAAE,IAAI,CAAC,CAACI,EAAMC,CAAO,IAQ9D,CAACD,EAPO,IAAIE,IAAS,CACxB,MAAMC,EAAWF,EAAQ,GAAGC,CAAI,EAAEP,CAAK,EACvC,MAAI,CAACI,EAAG,QAAQ,iBAAiB,GAAK,CAAC,KAAK,gBACxCD,EAAK,SAASC,CAAE,EAEbI,CACvB,CACgC,CACvB,CAAC,CACL,CACD,IAAI,OAAQ,CACR,MAAO,IAAM,KAAK,aACrB,CACD,IAAI,KAAM,CACN,MAAO,IAAM,KAAK,WACrB,CACD,YAAYC,EAASC,EAAiB,GAAM,CACxC,KAAM,CAAE,YAAAT,EAAa,OAAAC,EAAQ,MAAAR,CAAK,EAAK,KACjC,CAAE,KAAAS,CAAM,EAAGD,EACXS,EAAY,CAAA,EACZC,EAAsB,CAAC,CAACH,EACxBL,EAAKK,GAAWf,EAAM,GACtBmB,EAAM,KACJ,CAACD,GACEF,GACA,CAACN,EAAG,QAAQ,iBAAiB,GAC7B,CAAC,KAAK,gBACTD,EAAK,SAASC,CAAE,EAEbO,EAAU,MAAMH,GAAYA,IAAa,EAAI,GAElDM,EAAQ,CACV,GAAG,OAAO,YAAY,OAAO,QAAQb,CAAW,EAAE,IAAI,CAAC,CAACI,EAAMC,CAAO,IAO1D,CAACD,EANe,IAAIE,IAAS,CAChC,MAAMP,EAAQ,KAAK,WAAWI,EAAIM,CAAc,EAC1CF,EAAWF,EAAQ,GAAGC,CAAI,EAAEP,CAAK,EACvC,OAAAW,EAAU,KAAKH,CAAQ,EAChBM,CAC3B,CAC4C,CAC/B,CAAC,EACF,IAAAD,CACZ,EACQ,OAAOC,CACV,CACD,UAAUL,EAAS,CACf,KAAM,CAAE,YAAAR,EAAa,MAAAP,CAAO,EAAG,KACzBqB,EAAW,GACXX,EAAKK,GAAWf,EAAM,GACtBM,EAAQ,KAAK,WAAWI,EAAIW,CAAQ,EAI1C,MAAO,CACH,GAJsB,OAAO,YAAY,OAAO,QAAQd,CAAW,EAAE,IAAI,CAAC,CAACI,EAAMC,CAAO,IACjF,CAACD,EAAM,IAAIE,IAASD,EAAQ,GAAGC,CAAI,EAAE,CAAE,GAAGP,EAAO,SAAU,MAAS,CAAE,CAAC,CACjF,CAAC,EAGE,MAAO,IAAM,KAAK,YAAYI,EAAIW,CAAQ,CACtD,CACK,CACD,WAAWX,EAAIM,EAAiB,GAAM,CAClC,KAAM,CAAE,YAAAT,EAAa,OAAAC,EAAQ,MAAAR,CAAK,EAAK,KACjC,CAAE,KAAAS,CAAM,EAAGD,EACXF,EAAQ,CACV,GAAAI,EACA,OAAAF,EACA,KAAAC,EACA,MAAOX,GAAqB,CACxB,MAAAE,EACA,YAAaU,CAC7B,CAAa,EACD,SAAUM,EAAiB,IAAM,GAAY,OAC7C,MAAO,IAAM,KAAK,YAAYN,EAAIM,CAAc,EAChD,IAAK,IAAM,KAAK,UAAUN,CAAE,EAC5B,IAAI,UAAW,CACX,OAAO,OAAO,YAAY,OAAO,QAAQH,CAAW,EAAE,IAAI,CAAC,CAACI,EAAMC,CAAO,IAC9D,CAACD,EAAM,IAAIE,IAASD,EAAQ,GAAGC,CAAI,EAAEP,CAAK,CAAC,CACrD,CAAC,CACL,CACb,EACQ,OAAOA,CACV,CACL,CAEA,MAAMgB,EAAa,CACf,aAAc,CACV,KAAK,UAAY,EACpB,CACD,GAAGC,EAAOC,EAAI,CACV,OAAK,KAAK,UAAUD,CAAK,IACrB,KAAK,UAAUA,CAAK,EAAI,IAE5B,KAAK,UAAUA,CAAK,EAAE,KAAKC,CAAE,EACtB,IACV,CACD,KAAKD,KAAUV,EAAM,CACjB,MAAMI,EAAY,KAAK,UAAUM,CAAK,EACtC,OAAIN,GACAA,EAAU,QAAQH,GAAYA,EAAS,MAAM,KAAMD,CAAI,CAAC,EAErD,IACV,CACD,IAAIU,EAAOC,EAAI,CACX,MAAMP,EAAY,KAAK,UAAUM,CAAK,EACtC,OAAIN,IACIO,EACA,KAAK,UAAUD,CAAK,EAAIN,EAAU,OAAOH,GAAYA,IAAaU,CAAE,EAGpE,OAAO,KAAK,UAAUD,CAAK,GAG5B,IACV,CACD,oBAAqB,CACjB,KAAK,UAAY,EACpB,CACL,CASA,SAASE,EAAkBC,EAAWC,EAAOC,EAAS,CAClD,OAAIF,EAAU,OAAOC,CAAK,IAAM,QAAaD,EAAU,OAC5CD,EAAkBC,EAAU,OAAQC,EAAOC,CAAO,EAEzD,OAAOF,EAAU,OAAOC,CAAK,GAAM,WACrBD,EAAU,OAAOC,CAAK,EAAE,KAAK,CACvC,GAAGC,EACH,OAAQF,EAAU,OACZD,EAAkBC,EAAU,OAAQC,EAAOC,CAAO,EAClD,IAClB,CAAS,EAGEF,EAAU,OAAOC,CAAK,CACjC,CAEA,SAASE,GAAgBC,EAAY,CACjC,MAAMC,EAAiBD,EAAW,OAAOJ,GAAaA,EAAU,OAAS,WAAW,EAC9EM,EAAiBF,EAAW,OAAOJ,GAAaA,EAAU,OAAS,MAAM,EACzEO,EAAiBH,EAAW,OAAOJ,GAAaA,EAAU,OAAS,MAAM,EAC/E,MAAO,CACH,eAAAK,EACA,eAAAC,EACA,eAAAC,CACR,CACA,CAMA,SAASC,GAA4BJ,EAAY,CAC7C,MAAMK,EAAsB,CAAA,EACtB,CAAE,eAAAH,EAAgB,eAAAC,CAAgB,EAAGJ,GAAgBC,CAAU,EAC/DM,EAAwB,CAAC,GAAGJ,EAAgB,GAAGC,CAAc,EAC7DI,EAAmB,CACrB,QAAS,KACT,SAAU,GACV,WAAY,KACZ,UAAW,KACX,YAAa,GACb,WAAY,EACpB,EACI,OAAAP,EAAW,QAAQJ,GAAa,CAC5B,MAAME,EAAU,CACZ,KAAMF,EAAU,KAChB,QAASA,EAAU,QACnB,QAASA,EAAU,QACnB,WAAYU,CACxB,EACcE,EAAsBb,EAAkBC,EAAW,sBAAuBE,CAAO,EACvF,GAAI,CAACU,EACD,OAEqBA,IACR,QAAQC,GAAmB,CACxCA,EAAgB,MAAM,QAAQC,GAAQ,CAClC,OACK,QAAQD,EAAgB,UAAU,EAClC,QAAQ,CAAC,CAAC5B,EAAM8B,CAAS,IAAM,CAChCN,EAAoB,KAAK,CACrB,KAAAK,EACA,KAAA7B,EACA,UAAW,CACP,GAAG0B,EACH,GAAGI,CACN,CACzB,CAAqB,CACrB,CAAiB,CACjB,CAAa,CACb,CAAS,CACT,CAAK,EACDL,EAAsB,QAAQV,GAAa,CACvC,MAAME,EAAU,CACZ,KAAMF,EAAU,KAChB,QAASA,EAAU,QACnB,QAASA,EAAU,OAC/B,EACcgB,EAAgBjB,EAAkBC,EAAW,gBAAiBE,CAAO,EAC3E,GAAI,CAACc,EACD,OAGJ,MAAMC,EAAaD,IACnB,OACK,QAAQC,CAAU,EAClB,QAAQ,CAAC,CAAChC,EAAM8B,CAAS,IAAM,CAChC,MAAMG,EAAa,CACf,GAAGP,EACH,GAAGI,CACnB,EACgB,OAAQG,GAAe,KAAgC,OAASA,EAAW,UAAa,aACxFA,EAAW,QAAUA,EAAW,WAE/BA,GAAe,MAAyCA,EAAW,aAAgBA,GAAe,KAAgC,OAASA,EAAW,WAAa,QACpK,OAAOA,EAAW,QAEtBT,EAAoB,KAAK,CACrB,KAAMT,EAAU,KAChB,KAAAf,EACA,UAAWiC,CAC3B,CAAa,CACb,CAAS,CACT,CAAK,EACMT,CACX,CAEA,SAASU,EAAYC,EAAYC,EAAQ,CACrC,GAAI,OAAOD,GAAe,SAAU,CAChC,GAAI,CAACC,EAAO,MAAMD,CAAU,EACxB,MAAM,MAAM,gCAAgCA,CAAU,2CAA2C,EAErG,OAAOC,EAAO,MAAMD,CAAU,CACjC,CACD,OAAOA,CACX,CAEA,SAASE,KAAmBC,EAAS,CACjC,OAAOA,EACF,OAAOC,GAAQ,CAAC,CAACA,CAAI,EACrB,OAAO,CAACC,EAAOD,IAAS,CACzB,MAAME,EAAmB,CAAE,GAAGD,GAC9B,cAAO,QAAQD,CAAI,EAAE,QAAQ,CAAC,CAACG,EAAKC,CAAK,IAAM,CAE3C,GAAI,CADWF,EAAiBC,CAAG,EACtB,CACTD,EAAiBC,CAAG,EAAIC,EACxB,MACH,CACD,GAAID,IAAQ,QAAS,CACjB,MAAME,EAAeD,EAAQA,EAAM,MAAM,GAAG,EAAI,GAC1CE,EAAkBJ,EAAiBC,CAAG,EAAID,EAAiBC,CAAG,EAAE,MAAM,GAAG,EAAI,GAC7EI,EAAgBF,EAAa,OAAOG,GAAc,CAACF,EAAgB,SAASE,CAAU,CAAC,EAC7FN,EAAiBC,CAAG,EAAI,CAAC,GAAGG,EAAiB,GAAGC,CAAa,EAAE,KAAK,GAAG,CAC1E,MACQJ,IAAQ,QACbD,EAAiBC,CAAG,EAAI,CAACD,EAAiBC,CAAG,EAAGC,CAAK,EAAE,KAAK,IAAI,EAGhEF,EAAiBC,CAAG,EAAIC,CAExC,CAAS,EACMF,CACV,EAAE,CAAE,CAAA,CACT,CAEA,SAASO,GAAsBC,EAAYzB,EAAqB,CAC5D,OAAOA,EACF,OAAOe,GAAQA,EAAK,UAAU,QAAQ,EACtC,IAAIA,GACAA,EAAK,UAAU,WAKbA,EAAK,UAAU,WAAWU,EAAW,KAAK,GAAK,GAJ3C,CACH,CAACV,EAAK,IAAI,EAAGU,EAAW,MAAMV,EAAK,IAAI,CACvD,CAGK,EACI,OAAO,CAACP,EAAYF,IAAcO,EAAgBL,EAAYF,CAAS,EAAG,CAAA,CAAE,CACrF,CAEA,SAASoB,GAAWP,EAAO,CACvB,OAAO,OAAOA,GAAU,UAC5B,CASA,SAASQ,EAAaR,EAAO1B,EAAU,UAActB,EAAO,CACxD,OAAIuD,GAAWP,CAAK,EACZ1B,EACO0B,EAAM,KAAK1B,CAAO,EAAE,GAAGtB,CAAK,EAEhCgD,EAAM,GAAGhD,CAAK,EAElBgD,CACX,CAEA,SAASS,GAAcT,EAAQ,GAAI,CAC/B,OAAO,OAAO,KAAKA,CAAK,EAAE,SAAW,GAAKA,EAAM,cAAgB,MACpE,CAEA,SAASU,GAAWV,EAAO,CACvB,OAAI,OAAOA,GAAU,SACVA,EAEPA,EAAM,MAAM,sBAAsB,EAC3B,OAAOA,CAAK,EAEnBA,IAAU,OACH,GAEPA,IAAU,QACH,GAEJA,CACX,CAQA,SAASW,GAAqCC,EAAW/B,EAAqB,CAC1E,MAAI,UAAW+B,EACJA,EAEJ,CACH,GAAGA,EACH,SAAWC,GAAS,CAChB,MAAMC,EAAgBF,EAAU,SAAWA,EAAU,SAASC,CAAI,EAAID,EAAU,MAChF,GAAIE,IAAkB,GAClB,MAAO,GAEX,MAAMC,EAAgBlC,EAAoB,OAAO,CAACgB,EAAOD,IAAS,CAC9D,MAAMI,EAAQJ,EAAK,UAAU,UACvBA,EAAK,UAAU,UAAUiB,CAAI,EAC7BH,GAAYG,EAAM,aAAajB,EAAK,IAAI,CAAC,EAC/C,OAAII,GAAU,KACHH,EAEJ,CACH,GAAGA,EACH,CAACD,EAAK,IAAI,EAAGI,CACjC,CACa,EAAE,CAAE,CAAA,EACL,MAAO,CAAE,GAAGc,EAAe,GAAGC,EACjC,CACT,CACA,CAEA,SAASC,GAAkBC,EAAM,CAC7B,OAAO,OAAO,YAEd,OAAO,QAAQA,CAAI,EAAE,OAAO,CAAC,CAAClB,EAAKC,CAAK,IAChCD,IAAQ,SAAWU,GAAcT,CAAK,EAC/B,GAEJA,GAAU,IACpB,CAAC,CACN,CAOA,SAASkB,GAA8B1C,EAAYtB,EAAQ,CACvD,IAAIiE,EACJ,MAAMC,EAAgBxC,GAA4BJ,CAAU,EACtD,CAAE,eAAAE,EAAgB,eAAAC,CAAgB,EAAGJ,GAAgBC,CAAU,EAC/D6C,GAAWF,EAAKzC,EAAe,KAAKN,GAAaD,EAAkBC,EAAW,SAAS,CAAC,KAAO,MAAQ+C,IAAO,OAAS,OAASA,EAAG,KACnIG,EAAQ,OAAO,YAAY5C,EAAe,IAAIN,GAAa,CAC7D,MAAMS,EAAsBuC,EAAc,OAAOjC,GAAaA,EAAU,OAASf,EAAU,IAAI,EACzFE,EAAU,CACZ,KAAMF,EAAU,KAChB,QAASA,EAAU,QACnB,QAASA,EAAU,QACnB,OAAAlB,CACZ,EACcqE,EAAkB/C,EAAW,OAAO,CAACgD,EAAQC,IAAM,CACrD,MAAMC,EAAmBvD,EAAkBsD,EAAG,mBAAoBnD,CAAO,EACzE,MAAO,CACH,GAAGkD,EACH,GAAIE,EAAmBA,EAAiBtD,CAAS,EAAI,CAAA,CACrE,CACS,EAAE,CAAE,CAAA,EACCqB,EAASuB,GAAkB,CAC7B,GAAGO,EACH,QAASf,EAAarC,EAAkBC,EAAW,UAAWE,CAAO,CAAC,EACtE,MAAOkC,EAAarC,EAAkBC,EAAW,QAASE,CAAO,CAAC,EAClE,MAAOkC,EAAarC,EAAkBC,EAAW,QAASE,CAAO,CAAC,EAClE,OAAQkC,EAAarC,EAAkBC,EAAW,SAAUE,CAAO,CAAC,EACpE,KAAMkC,EAAarC,EAAkBC,EAAW,OAAQE,CAAO,CAAC,EAChE,WAAYkC,EAAarC,EAAkBC,EAAW,aAAcE,CAAO,CAAC,EAC5E,UAAWkC,EAAarC,EAAkBC,EAAW,YAAaE,CAAO,CAAC,EAC1E,KAAMkC,EAAarC,EAAkBC,EAAW,OAAQE,CAAO,CAAC,EAChE,WAAYkC,EAAarC,EAAkBC,EAAW,aAAcE,CAAO,CAAC,EAC5E,SAAUkC,EAAarC,EAAkBC,EAAW,WAAYE,CAAO,CAAC,EACxE,UAAWkC,EAAarC,EAAkBC,EAAW,YAAaE,CAAO,CAAC,EAC1E,MAAO,OAAO,YAAYO,EAAoB,IAAI8C,GAAsB,CACpE,IAAIR,EACJ,MAAO,CAACQ,EAAmB,KAAM,CAAE,SAAUR,EAAKQ,GAAuB,KAAwC,OAASA,EAAmB,aAAe,MAAQR,IAAO,OAAS,OAASA,EAAG,OAAO,CAAE,CACzN,CAAa,CAAC,CACd,CAAS,EACKS,EAAYpB,EAAarC,EAAkBC,EAAW,YAAaE,CAAO,CAAC,EAC7EsD,IACAnC,EAAO,SAAWmC,EAAU,IAAIhB,GAAaD,GAAqCC,EAAW/B,CAAmB,CAAC,GAErH,MAAMgD,EAAa1D,EAAkBC,EAAW,aAAcE,CAAO,EACjEuD,IACApC,EAAO,MAAQoB,GAAQgB,EAAW,CAC9B,KAAAhB,EACA,eAAgBR,GAAsBQ,EAAMhC,CAAmB,CAC/E,CAAa,GAEL,MAAMiD,EAAa3D,EAAkBC,EAAW,aAAcE,CAAO,EACrE,OAAIwD,IACArC,EAAO,OAASqC,GAEb,CAAC1D,EAAU,KAAMqB,CAAM,CACjC,CAAA,CAAC,EACIsC,EAAQ,OAAO,YAAYpD,EAAe,IAAIP,GAAa,CAC7D,MAAMS,EAAsBuC,EAAc,OAAOjC,GAAaA,EAAU,OAASf,EAAU,IAAI,EACzFE,EAAU,CACZ,KAAMF,EAAU,KAChB,QAASA,EAAU,QACnB,QAASA,EAAU,QACnB,OAAAlB,CACZ,EACc8E,EAAkBxD,EAAW,OAAO,CAACgD,EAAQC,IAAM,CACrD,MAAMQ,EAAmB9D,EAAkBsD,EAAG,mBAAoBnD,CAAO,EACzE,MAAO,CACH,GAAGkD,EACH,GAAIS,EAAmBA,EAAiB7D,CAAS,EAAI,CAAA,CACrE,CACS,EAAE,CAAE,CAAA,EACCqB,EAASuB,GAAkB,CAC7B,GAAGgB,EACH,UAAWxB,EAAarC,EAAkBC,EAAW,YAAaE,CAAO,CAAC,EAC1E,SAAUkC,EAAarC,EAAkBC,EAAW,WAAYE,CAAO,CAAC,EACxE,MAAOkC,EAAarC,EAAkBC,EAAW,QAASE,CAAO,CAAC,EAClE,SAAUkC,EAAarC,EAAkBC,EAAW,WAAYE,CAAO,CAAC,EACxE,KAAMkC,EAAarC,EAAkBC,EAAW,OAAQE,CAAO,CAAC,EAChE,MAAO,OAAO,YAAYO,EAAoB,IAAI8C,GAAsB,CACpE,IAAIR,EACJ,MAAO,CAACQ,EAAmB,KAAM,CAAE,SAAUR,EAAKQ,GAAuB,KAAwC,OAASA,EAAmB,aAAe,MAAQR,IAAO,OAAS,OAASA,EAAG,OAAO,CAAE,CACzN,CAAa,CAAC,CACd,CAAS,EACKS,EAAYpB,EAAarC,EAAkBC,EAAW,YAAaE,CAAO,CAAC,EAC7EsD,IACAnC,EAAO,SAAWmC,EAAU,IAAIhB,GAAaD,GAAqCC,EAAW/B,CAAmB,CAAC,GAErH,MAAMgD,EAAa1D,EAAkBC,EAAW,aAAcE,CAAO,EACrE,OAAIuD,IACApC,EAAO,MAAQyC,GAAQL,EAAW,CAC9B,KAAAK,EACA,eAAgB7B,GAAsB6B,EAAMrD,CAAmB,CAC/E,CAAa,GAEE,CAACT,EAAU,KAAMqB,CAAM,CACjC,CAAA,CAAC,EACF,OAAO,IAAI0C,EAAAA,OAAO,CACd,QAAAd,EACA,MAAAC,EACA,MAAAS,CACR,CAAK,CACL,CAQA,SAASK,GAAoB/E,EAAMoC,EAAQ,CACvC,OAAOA,EAAO,MAAMpC,CAAI,GAAKoC,EAAO,MAAMpC,CAAI,GAAK,IACvD,CAEA,SAASgF,GAAwBjE,EAAWkE,EAAS,CACjD,OAAI,MAAM,QAAQA,CAAO,EACdA,EAAQ,KAAKC,IACH,OAAOA,GAAqB,SACnCA,EACAA,EAAiB,QACPnE,EAAU,IAC7B,EAEEkE,CACX,CAQA,MAAME,GAA0B,CAACC,EAAOC,EAAW,MAAQ,CACvD,IAAIC,EAAa,GACjB,MAAMC,EAAcH,EAAM,aAC1B,OAAAA,EAAM,OAAO,aAAa,KAAK,IAAI,EAAGG,EAAcF,CAAQ,EAAGE,EAAa,CAAC/B,EAAMgC,EAAKC,EAAQC,IAAU,CACtG,IAAI5B,EAAI6B,EACR,MAAMC,IAAUD,GAAM7B,EAAKN,EAAK,KAAK,MAAM,UAAY,MAAQmC,IAAO,OAAS,OAASA,EAAG,KAAK7B,EAAI,CAChG,KAAAN,EACA,IAAAgC,EACA,OAAAC,EACA,MAAAC,CACZ,CAAS,IACMlC,EAAK,aACL,SACP8B,GAAc9B,EAAK,QAAU,CAACA,EAAK,OAASoC,EAAQA,EAAM,MAAM,EAAG,KAAK,IAAI,EAAGL,EAAcC,CAAG,CAAC,CACzG,CAAK,EACMF,CACX,EAEA,SAASO,GAASlD,EAAO,CACrB,OAAO,OAAO,UAAU,SAAS,KAAKA,CAAK,IAAM,iBACrD,CAEA,MAAMmD,EAAU,CACZ,YAAY1G,EAAQ,CAChB,KAAK,KAAOA,EAAO,KACnB,KAAK,QAAUA,EAAO,OACzB,CACL,CACA,MAAM2G,GAA0B,CAACC,EAAMC,IAAS,CAC5C,GAAIJ,GAASI,CAAI,EACb,OAAOA,EAAK,KAAKD,CAAI,EAEzB,MAAME,EAAiBD,EAAKD,CAAI,EAChC,GAAI,CAACE,EACD,OAAO,KAEX,MAAMC,EAAS,CAACD,EAAe,IAAI,EACnC,OAAAC,EAAO,MAAQD,EAAe,MAC9BC,EAAO,MAAQH,EACfG,EAAO,KAAOD,EAAe,KACzBA,EAAe,cACVA,EAAe,KAAK,SAASA,EAAe,WAAW,GACxD,QAAQ,KAAK,oFAAoF,EAErGC,EAAO,KAAKD,EAAe,WAAW,GAEnCC,CACX,EACA,SAASC,GAAMhH,EAAQ,CACnB,IAAI0E,EACJ,KAAM,CAAE,OAAAjE,EAAQ,KAAAwG,EAAM,GAAAC,EAAI,KAAAN,EAAM,MAAAO,EAAO,OAAAC,CAAS,EAAGpH,EAC7C,CAAE,KAAAU,CAAM,EAAGD,EACjB,GAAIC,EAAK,UACL,MAAO,GAEX,MAAMsF,EAAQtF,EAAK,MAAM,IAAI,QAAQuG,CAAI,EACzC,GAEAjB,EAAM,OAAO,KAAK,KAAK,MAEZ,GAAAtB,EAAMsB,EAAM,YAAcA,EAAM,aAAgB,MAAQtB,IAAO,SAAkBA,EAAG,MAAM,KAAKe,GAAQA,EAAK,KAAK,KAAK,IAAI,EACjI,MAAO,GAEX,IAAI4B,EAAU,GACd,MAAMnB,EAAaH,GAAwBC,CAAK,EAAIY,EACpD,OAAAO,EAAM,QAAQG,GAAQ,CAClB,GAAID,EACA,OAEJ,MAAME,EAAQZ,GAAwBT,EAAYoB,EAAK,IAAI,EAC3D,GAAI,CAACC,EACD,OAEJ,MAAM5G,EAAKD,EAAK,MAAM,GAChBT,EAAQF,GAAqB,CAC/B,MAAOW,EAAK,MACZ,YAAaC,CACzB,CAAS,EACK6G,EAAQ,CACV,KAAMP,GAAQM,EAAM,CAAC,EAAE,OAASX,EAAK,QACrC,GAAAM,CACZ,EACc,CAAE,SAAAO,EAAU,MAAApG,EAAO,IAAAqG,CAAK,EAAG,IAAIpH,GAAe,CAChD,OAAAG,EACA,MAAAR,CACZ,CAAS,EACeqH,EAAK,QAAQ,CACzB,MAAArH,EACA,MAAAuH,EACA,MAAAD,EACA,SAAAE,EACA,MAAApG,EACA,IAAAqG,CACZ,CAAS,IAEe,MAAQ,CAAC/G,EAAG,MAAM,SAKlCA,EAAG,QAAQyG,EAAQ,CACf,UAAWzG,EACX,KAAAsG,EACA,GAAAC,EACA,KAAAN,CACZ,CAAS,EACDlG,EAAK,SAASC,CAAE,EAChB0G,EAAU,GAClB,CAAK,EACMA,CACX,CAMA,SAASM,GAAiBpH,EAAO,CAC7B,KAAM,CAAE,OAAAE,EAAQ,MAAA0G,CAAO,EAAG5G,EACpB6G,EAAS,IAAIQ,SAAO,CACtB,MAAO,CACH,MAAO,CACH,OAAO,IACV,EACD,MAAMjH,EAAIkH,EAAM,CACZ,MAAMC,EAASnH,EAAG,QAAQyG,CAAM,EAChC,GAAIU,EACA,OAAOA,EAGX,MAAMC,EAAqBpH,EAAG,QAAQ,iBAAiB,EAEvD,MADyB,CAAC,CAACoH,GAEvB,WAAW,IAAM,CACb,KAAM,CAAE,KAAAd,EAAM,KAAAL,CAAM,EAAGmB,EACjBb,EAAKD,EAAOL,EAAK,OACvBI,GAAM,CACF,OAAAvG,EACA,KAAAwG,EACA,GAAAC,EACA,KAAAN,EACA,MAAAO,EACA,OAAAC,CAC5B,CAAyB,CACzB,CAAqB,EAEEzG,EAAG,cAAgBA,EAAG,WAAa,KAAOkH,CACpD,CACJ,EACD,MAAO,CACH,gBAAgBnH,EAAMuG,EAAMC,EAAIN,EAAM,CAClC,OAAOI,GAAM,CACT,OAAAvG,EACA,KAAAwG,EACA,GAAAC,EACA,KAAAN,EACA,MAAAO,EACA,OAAAC,CACpB,CAAiB,CACJ,EACD,gBAAiB,CACb,eAAgB1G,IACZ,WAAW,IAAM,CACb,KAAM,CAAE,QAAAsH,CAAS,EAAGtH,EAAK,MAAM,UAC3BsH,GACAhB,GAAM,CACF,OAAAvG,EACA,KAAMuH,EAAQ,IACd,GAAIA,EAAQ,IACZ,KAAM,GACN,MAAAb,EACA,OAAAC,CAChC,CAA6B,CAE7B,CAAqB,EACM,GAEd,EAGD,cAAc1G,EAAMc,EAAO,CACvB,GAAIA,EAAM,MAAQ,QACd,MAAO,GAEX,KAAM,CAAE,QAAAwG,CAAS,EAAGtH,EAAK,MAAM,UAC/B,OAAIsH,EACOhB,GAAM,CACT,OAAAvG,EACA,KAAMuH,EAAQ,IACd,GAAIA,EAAQ,IACZ,KAAM;AAAA,EACN,MAAAb,EACA,OAAAC,CACxB,CAAqB,EAEE,EACV,CACJ,EAED,aAAc,EACtB,CAAK,EACD,OAAOA,CACX,CAEA,SAASa,GAAS1E,EAAO,CACrB,OAAO,OAAOA,GAAU,QAC5B,CAMA,MAAM2E,EAAU,CACZ,YAAYlI,EAAQ,CAChB,KAAK,KAAOA,EAAO,KACnB,KAAK,QAAUA,EAAO,OACzB,CACL,CACA,MAAMmI,GAA0B,CAACvB,EAAMC,EAAMrF,IAAU,CACnD,GAAIiF,GAASI,CAAI,EACb,MAAO,CAAC,GAAGD,EAAK,SAASC,CAAI,CAAC,EAElC,MAAMuB,EAAUvB,EAAKD,EAAMpF,CAAK,EAChC,OAAK4G,EAGEA,EAAQ,IAAIC,GAAkB,CACjC,MAAMtB,EAAS,CAACsB,EAAe,IAAI,EACnC,OAAAtB,EAAO,MAAQsB,EAAe,MAC9BtB,EAAO,MAAQH,EACfG,EAAO,KAAOsB,EAAe,KACzBA,EAAe,cACVA,EAAe,KAAK,SAASA,EAAe,WAAW,GACxD,QAAQ,KAAK,oFAAoF,EAErGtB,EAAO,KAAKsB,EAAe,WAAW,GAEnCtB,CACf,CAAK,EAdU,EAef,EACA,SAAS3F,GAAIpB,EAAQ,CACjB,KAAM,CAAE,OAAAS,EAAQ,MAAAR,EAAO,KAAAgH,EAAM,GAAAC,EAAI,KAAAI,EAAM,WAAAgB,EAAY,UAAAC,CAAY,EAAGvI,EAC5D,CAAE,SAAAyH,EAAU,MAAApG,EAAO,IAAAqG,CAAK,EAAG,IAAIpH,GAAe,CAChD,OAAAG,EACA,MAAAR,CACR,CAAK,EACKuI,EAAW,CAAA,EACjB,OAAAvI,EAAM,IAAI,aAAagH,EAAMC,EAAI,CAAC9C,EAAMgC,IAAQ,CAC5C,GAAI,CAAChC,EAAK,aAAeA,EAAK,KAAK,KAAK,KACpC,OAEJ,MAAMqE,EAAe,KAAK,IAAIxB,EAAMb,CAAG,EACjCsC,EAAa,KAAK,IAAIxB,EAAId,EAAMhC,EAAK,QAAQ,IAAI,EACjDuE,EAAcvE,EAAK,YAAYqE,EAAerC,EAAKsC,EAAatC,EAAK,OAAW,GAAQ,EAC9E+B,GAAwBQ,EAAarB,EAAK,KAAMgB,CAAU,EAClE,QAAQf,GAAS,CACrB,GAAIA,EAAM,QAAU,OAChB,OAEJ,MAAMqB,EAAQH,EAAelB,EAAM,MAAQ,EACrCsB,EAAMD,EAAQrB,EAAM,CAAC,EAAE,OACvBC,EAAQ,CACV,KAAMvH,EAAM,GAAG,QAAQ,IAAI2I,CAAK,EAChC,GAAI3I,EAAM,GAAG,QAAQ,IAAI4I,CAAG,CAC5C,EACkBC,EAAUxB,EAAK,QAAQ,CACzB,MAAArH,EACA,MAAAuH,EACA,MAAAD,EACA,SAAAE,EACA,MAAApG,EACA,IAAAqG,EACA,WAAAY,EACA,UAAAC,CAChB,CAAa,EACDC,EAAS,KAAKM,CAAO,CACjC,CAAS,CACT,CAAK,EACeN,EAAS,MAAMM,GAAWA,IAAY,IAAI,CAE9D,CACA,MAAMC,GAA6BnC,GAAS,CACxC,IAAIlC,EACJ,MAAMlD,EAAQ,IAAI,eAAe,QAAS,CACtC,cAAe,IAAI,YAC3B,CAAK,EACD,OAACkD,EAAKlD,EAAM,iBAAmB,MAAQkD,IAAO,QAAkBA,EAAG,QAAQ,YAAakC,CAAI,EACrFpF,CACX,EAMA,SAASwH,GAAiBzI,EAAO,CAC7B,KAAM,CAAE,OAAAE,EAAQ,MAAA0G,CAAO,EAAG5G,EAC1B,IAAI0I,EAAoB,KACpBC,EAA0B,GAC1BC,EAA2B,GAC3Bb,EAAa,OAAO,eAAmB,IAAc,IAAI,eAAe,OAAO,EAAI,KACnFC,EAAY,OAAO,UAAc,IAAc,IAAI,UAAU,MAAM,EAAI,KAC3E,MAAMa,EAAe,CAAC,CAAE,MAAAnJ,EAAO,KAAAgH,EAAM,GAAAC,EAAI,KAAAI,EAAM,SAAA+B,KAAgB,CAC3D,MAAM1I,EAAKV,EAAM,GACXqJ,EAAiBvJ,GAAqB,CACxC,MAAAE,EACA,YAAaU,CACzB,CAAS,EAUD,GAAI,GATYS,GAAI,CAChB,OAAAX,EACA,MAAO6I,EACP,KAAM,KAAK,IAAIrC,EAAO,EAAG,CAAC,EAC1B,GAAIC,EAAG,EAAI,EACX,KAAAI,EACA,WAAY+B,EACZ,UAAAd,CACZ,CAAS,GACe,CAAC5H,EAAG,MAAM,QAG1B,OAAA4H,EAAY,OAAO,UAAc,IAAc,IAAI,UAAU,MAAM,EAAI,KACvED,EAAa,OAAO,eAAmB,IAAc,IAAI,eAAe,OAAO,EAAI,KAC5E3H,CACf,EA0EI,OAzEgBwG,EAAM,IAAIG,GACf,IAAIM,EAAAA,OAAO,CAEd,KAAKlH,EAAM,CACP,MAAM6I,EAAmB/H,GAAU,CAC/B,IAAIkD,EACJuE,EAAsB,GAAAvE,EAAKhE,EAAK,IAAI,iBAAmB,MAAQgE,IAAO,SAAkBA,EAAG,SAASlD,EAAM,MAAM,EAC1Gd,EAAK,IAAI,cACT,IAC1B,EACgB,cAAO,iBAAiB,YAAa6I,CAAe,EAC7C,CACH,SAAU,CACN,OAAO,oBAAoB,YAAaA,CAAe,CAC1D,CACrB,CACa,EACD,MAAO,CACH,gBAAiB,CACb,KAAM,CAAC7I,EAAMc,KACT2H,EAA2BF,IAAsBvI,EAAK,IAAI,cAC1D6H,EAAY/G,EACL,IAEX,MAAO,CAACgI,EAAOhI,IAAU,CACrB,IAAIkD,EACJ,MAAM+E,GAAQ/E,EAAKlD,EAAM,iBAAmB,MAAQkD,IAAO,OAAS,OAASA,EAAG,QAAQ,WAAW,EACnG,OAAA4D,EAAa9G,EACb0H,EAA0B,CAAC,EAAEO,GAAS,MAAmCA,EAAK,SAAS,eAAe,GAC/F,EACV,CACJ,CACJ,EACD,kBAAmB,CAACC,EAAcC,EAAU1J,IAAU,CAClD,MAAMC,EAAcwJ,EAAa,CAAC,EAC5BE,EAAU1J,EAAY,QAAQ,SAAS,IAAM,SAAW,CAACgJ,EACzDW,EAAS3J,EAAY,QAAQ,SAAS,IAAM,QAAU,CAACiJ,EAEvDW,EAAqB5J,EAAY,QAAQ,iBAAiB,EAC1D6J,EAAmB,CAAC,CAACD,EAC3B,GAAI,CAACF,GAAW,CAACC,GAAU,CAACE,EACxB,OAGJ,GAAIA,EAAkB,CAClB,KAAM,CAAE,KAAA9C,EAAM,KAAAL,CAAM,EAAGkD,EACjB5C,EAAKD,EAAOL,EAAK,OACjByC,EAAWN,GAA0BnC,CAAI,EAC/C,OAAOwC,EAAa,CAChB,KAAA9B,EACA,MAAArH,EACA,KAAAgH,EACA,GAAI,CAAE,EAAGC,CAAI,EACb,SAAAmC,CACxB,CAAqB,CACJ,CAED,MAAMpC,EAAO0C,EAAS,IAAI,QAAQ,cAAc1J,EAAM,IAAI,OAAO,EAC3DiH,EAAKyC,EAAS,IAAI,QAAQ,YAAY1J,EAAM,IAAI,OAAO,EAE7D,GAAI,GAACgI,GAAShB,CAAI,GAAK,CAACC,GAAMD,IAASC,EAAG,GAG1C,OAAOkC,EAAa,CAChB,KAAA9B,EACA,MAAArH,EACA,KAAAgH,EACA,GAAAC,EACA,SAAUoB,CAC9B,CAAiB,CACJ,CACb,CAAS,CACJ,CAEL,CAEA,SAAS0B,GAAe5G,EAAO,CAC3B,MAAM6G,EAAW7G,EAAM,OAAO,CAAC8G,EAAI5D,IAAUlD,EAAM,QAAQ8G,CAAE,IAAM5D,CAAK,EACxE,OAAO,MAAM,KAAK,IAAI,IAAI2D,CAAQ,CAAC,CACvC,CAEA,MAAME,CAAiB,CACnB,YAAYpI,EAAYtB,EAAQ,CAC5B,KAAK,gBAAkB,GACvB,KAAK,OAASA,EACd,KAAK,WAAa0J,EAAiB,QAAQpI,CAAU,EACrD,KAAK,OAAS0C,GAA8B,KAAK,WAAYhE,CAAM,EACnE,KAAK,gBAAe,CACvB,CAOD,OAAO,QAAQsB,EAAY,CACvB,MAAMqI,EAAqBD,EAAiB,KAAKA,EAAiB,QAAQpI,CAAU,CAAC,EAC/EsI,EAAkBL,GAAeI,EAAmB,IAAIzI,GAAaA,EAAU,IAAI,CAAC,EAC1F,OAAI0I,EAAgB,QAChB,QAAQ,KAAK,oDAAoDA,EAC5D,IAAIlH,GAAQ,IAAIA,CAAI,GAAG,EACvB,KAAK,IAAI,CAAC,6BAA6B,EAEzCiH,CACV,CAMD,OAAO,QAAQrI,EAAY,CACvB,OAAQA,EACH,IAAIJ,GAAa,CAClB,MAAME,EAAU,CACZ,KAAMF,EAAU,KAChB,QAASA,EAAU,QACnB,QAASA,EAAU,OACnC,EACkB2I,EAAgB5I,EAAkBC,EAAW,gBAAiBE,CAAO,EAC3E,OAAIyI,EACO,CAAC3I,EAAW,GAAG,KAAK,QAAQ2I,EAAe,CAAA,CAAC,EAEhD3I,CACnB,CAAS,EAEI,KAAK,EAAE,CACf,CAMD,OAAO,KAAKI,EAAY,CAEpB,OAAOA,EAAW,KAAK,CAACwI,EAAGC,IAAM,CAC7B,MAAMC,EAAY/I,EAAkB6I,EAAG,UAAU,GAAK,IAChDG,EAAYhJ,EAAkB8I,EAAG,UAAU,GAAK,IACtD,OAAIC,EAAYC,EACL,GAEPD,EAAYC,EACL,EAEJ,CACnB,CAAS,CACJ,CAKD,IAAI,UAAW,CACX,OAAO,KAAK,WAAW,OAAO,CAACjD,EAAU9F,IAAc,CACnD,MAAME,EAAU,CACZ,KAAMF,EAAU,KAChB,QAASA,EAAU,QACnB,QAASA,EAAU,QACnB,OAAQ,KAAK,OACb,KAAMgE,GAAoBhE,EAAU,KAAM,KAAK,MAAM,CACrE,EACkBgJ,EAAcjJ,EAAkBC,EAAW,cAAeE,CAAO,EACvE,OAAK8I,EAGE,CACH,GAAGlD,EACH,GAAGkD,EAAa,CAChC,EALuBlD,CAMd,EAAE,CAAE,CAAA,CACR,CAKD,IAAI,SAAU,CACV,KAAM,CAAE,OAAAhH,CAAQ,EAAG,KAMbsB,EAAaoI,EAAiB,KAAK,CAAC,GAAG,KAAK,UAAU,EAAE,QAAO,CAAE,EACjES,EAAa,CAAA,EACbC,EAAa,CAAA,EACbC,EAAa/I,EACd,IAAIJ,GAAa,CAClB,MAAME,EAAU,CACZ,KAAMF,EAAU,KAChB,QAASA,EAAU,QACnB,QAASA,EAAU,QACnB,OAAAlB,EACA,KAAMkF,GAAoBhE,EAAU,KAAM,KAAK,MAAM,CACrE,EACkBoJ,EAAU,CAAA,EACVC,EAAuBtJ,EAAkBC,EAAW,uBAAwBE,CAAO,EACzF,IAAIoJ,EAAkB,CAAA,EAKtB,GAHItJ,EAAU,OAAS,QAAUD,EAAkBC,EAAW,WAAYE,CAAO,IAC7EoJ,EAAgB,WAAa,IAAMC,EAAK,WAAW,CAAE,OAAAzK,EAAQ,KAAMkB,CAAS,CAAE,GAE9EqJ,EAAsB,CACtB,MAAMG,EAAW,OAAO,YAAY,OAAO,QAAQH,EAAsB,CAAA,EAAE,IAAI,CAAC,CAACI,EAAUC,CAAM,IACtF,CAACD,EAAU,IAAMC,EAAO,CAAE,OAAA5K,CAAM,CAAE,CAAC,CAC7C,CAAC,EACFwK,EAAkB,CAAE,GAAGA,EAAiB,GAAGE,CAAQ,CACtD,CACD,MAAMG,EAAeC,SAAON,CAAe,EAC3CF,EAAQ,KAAKO,CAAY,EACzB,MAAME,EAAgB9J,EAAkBC,EAAW,gBAAiBE,CAAO,EACvE+D,GAAwBjE,EAAWlB,EAAO,QAAQ,gBAAgB,GAAK+K,GACvEZ,EAAW,KAAK,GAAGY,EAAa,CAAE,EAEtC,MAAMC,EAAgB/J,EAAkBC,EAAW,gBAAiBE,CAAO,EACvE+D,GAAwBjE,EAAWlB,EAAO,QAAQ,gBAAgB,GAAKgL,GACvEZ,EAAW,KAAK,GAAGY,EAAa,CAAE,EAEtC,MAAMC,EAAwBhK,EAAkBC,EAAW,wBAAyBE,CAAO,EAC3F,GAAI6J,EAAuB,CACvB,MAAMC,EAAqBD,IAC3BX,EAAQ,KAAK,GAAGY,CAAkB,CACrC,CACD,OAAOZ,CACnB,CAAS,EACI,OACL,MAAO,CACHpD,GAAiB,CACb,OAAAlH,EACA,MAAOmK,CACvB,CAAa,EACD,GAAG5B,GAAiB,CAChB,OAAAvI,EACA,MAAOoK,CACvB,CAAa,EACD,GAAGC,CACf,CACK,CAKD,IAAI,YAAa,CACb,OAAO3I,GAA4B,KAAK,UAAU,CACrD,CAKD,IAAI,WAAY,CACZ,KAAM,CAAE,OAAA1B,CAAQ,EAAG,KACb,CAAE,eAAAwB,CAAgB,EAAGH,GAAgB,KAAK,UAAU,EAC1D,OAAO,OAAO,YAAYG,EACrB,OAAON,GAAa,CAAC,CAACD,EAAkBC,EAAW,aAAa,CAAC,EACjE,IAAIA,GAAa,CAClB,MAAMS,EAAsB,KAAK,WAAW,OAAOM,GAAaA,EAAU,OAASf,EAAU,IAAI,EAC3FE,EAAU,CACZ,KAAMF,EAAU,KAChB,QAASA,EAAU,QACnB,QAASA,EAAU,QACnB,OAAAlB,EACA,KAAMqC,EAAYnB,EAAU,KAAM,KAAK,MAAM,CAC7D,EACkBiK,EAAclK,EAAkBC,EAAW,cAAeE,CAAO,EACvE,GAAI,CAAC+J,EACD,MAAO,GAEX,MAAMC,EAAW,CAACzH,EAAM1D,EAAMoL,EAAQC,IAAgB,CAClD,MAAMC,EAAiBpI,GAAsBQ,EAAMhC,CAAmB,EACtE,OAAOwJ,EAAW,EAAG,CACjB,OAAAnL,EACA,KAAA2D,EACA,OAAA0H,EACA,YAAAC,EACA,eAAAC,EACA,UAAArK,CACpB,CAAiB,CACjB,EACY,MAAO,CAACA,EAAU,KAAMkK,CAAQ,CACnC,CAAA,CAAC,CACL,CAKD,iBAAkB,CACd,KAAK,WAAW,QAAQlK,GAAa,CACjC,IAAI+C,EAEJ,KAAK,OAAO,iBAAiB/C,EAAU,IAAI,EAAIA,EAAU,QACzD,MAAME,EAAU,CACZ,KAAMF,EAAU,KAChB,QAASA,EAAU,QACnB,QAASA,EAAU,QACnB,OAAQ,KAAK,OACb,KAAMgE,GAAoBhE,EAAU,KAAM,KAAK,MAAM,CACrE,EACgBA,EAAU,OAAS,SACE,GAAA+C,EAAKX,EAAarC,EAAkBC,EAAW,cAAeE,CAAO,CAAC,KAAO,MAAQ6C,IAAO,SAASA,IAEtH,KAAK,gBAAgB,KAAK/C,EAAU,IAAI,EAGhD,MAAMsK,EAAiBvK,EAAkBC,EAAW,iBAAkBE,CAAO,EACvEqK,EAAWxK,EAAkBC,EAAW,WAAYE,CAAO,EAC3DsK,EAAWzK,EAAkBC,EAAW,WAAYE,CAAO,EAC3DuK,EAAoB1K,EAAkBC,EAAW,oBAAqBE,CAAO,EAC7EwK,EAAgB3K,EAAkBC,EAAW,gBAAiBE,CAAO,EACrEyK,EAAU5K,EAAkBC,EAAW,UAAWE,CAAO,EACzD0K,EAAS7K,EAAkBC,EAAW,SAAUE,CAAO,EACvD2K,EAAY9K,EAAkBC,EAAW,YAAaE,CAAO,EAC/DoK,GACA,KAAK,OAAO,GAAG,eAAgBA,CAAc,EAE7CC,GACA,KAAK,OAAO,GAAG,SAAUA,CAAQ,EAEjCC,GACA,KAAK,OAAO,GAAG,SAAUA,CAAQ,EAEjCC,GACA,KAAK,OAAO,GAAG,kBAAmBA,CAAiB,EAEnDC,GACA,KAAK,OAAO,GAAG,cAAeA,CAAa,EAE3CC,GACA,KAAK,OAAO,GAAG,QAASA,CAAO,EAE/BC,GACA,KAAK,OAAO,GAAG,OAAQA,CAAM,EAE7BC,GACA,KAAK,OAAO,GAAG,UAAWA,CAAS,CAEnD,CAAS,CACJ,CACL,CAGA,SAASC,GAAQlJ,EAAO,CACpB,OAAO,OAAO,UAAU,SAAS,KAAKA,CAAK,EAAE,MAAM,EAAG,EAAE,CAC5D,CACA,SAASmJ,GAAcnJ,EAAO,CAC1B,OAAIkJ,GAAQlJ,CAAK,IAAM,SACZ,GAEJA,EAAM,cAAgB,QAAU,OAAO,eAAeA,CAAK,IAAM,OAAO,SACnF,CAEA,SAASoJ,GAAUC,EAAQC,EAAQ,CAC/B,MAAMC,EAAS,CAAE,GAAGF,GACpB,OAAIF,GAAcE,CAAM,GAAKF,GAAcG,CAAM,GAC7C,OAAO,KAAKA,CAAM,EAAE,QAAQvJ,GAAO,CAC3BoJ,GAAcG,EAAOvJ,CAAG,CAAC,GAAKoJ,GAAcE,EAAOtJ,CAAG,CAAC,EACvDwJ,EAAOxJ,CAAG,EAAIqJ,GAAUC,EAAOtJ,CAAG,EAAGuJ,EAAOvJ,CAAG,CAAC,EAGhDwJ,EAAOxJ,CAAG,EAAIuJ,EAAOvJ,CAAG,CAExC,CAAS,EAEEwJ,CACX,CAMA,MAAMC,CAAU,CACZ,YAAY/M,EAAS,GAAI,CACrB,KAAK,KAAO,YACZ,KAAK,KAAO,YACZ,KAAK,OAAS,KACd,KAAK,MAAQ,KACb,KAAK,OAAS,CACV,KAAM,KAAK,KACX,eAAgB,CAAE,CAC9B,EACQ,KAAK,OAAS,CACV,GAAG,KAAK,OACR,GAAGA,CACf,EACQ,KAAK,KAAO,KAAK,OAAO,KACpBA,EAAO,gBAAkB,OAAO,KAAKA,EAAO,cAAc,EAAE,OAAS,GACrE,QAAQ,KAAK,yHAAyH,KAAK,IAAI,IAAI,EAGvJ,KAAK,QAAU,KAAK,OAAO,eACvB,KAAK,OAAO,aACZ,KAAK,QAAU+D,EAAarC,EAAkB,KAAM,aAAc,CAC9D,KAAM,KAAK,IACd,CAAA,CAAC,GAEN,KAAK,QAAUqC,EAAarC,EAAkB,KAAM,aAAc,CAC9D,KAAM,KAAK,KACX,QAAS,KAAK,OAC1B,CAAS,CAAC,GAAK,CAAA,CACV,CACD,OAAO,OAAO1B,EAAS,GAAI,CACvB,OAAO,IAAI+M,EAAU/M,CAAM,CAC9B,CACD,UAAUgN,EAAU,GAAI,CAGpB,MAAMrL,EAAY,KAAK,OAAO,CAC1B,GAAG,KAAK,OACR,WAAY,IACDgL,GAAU,KAAK,QAASK,CAAO,CAEtD,CAAS,EAED,OAAArL,EAAU,KAAO,KAAK,KAEtBA,EAAU,OAAS,KAAK,OACjBA,CACV,CACD,OAAOsL,EAAiB,GAAI,CACxB,MAAMtL,EAAY,IAAIoL,EAAU,CAAE,GAAG,KAAK,OAAQ,GAAGE,CAAc,CAAE,EACrE,OAAAtL,EAAU,OAAS,KACnB,KAAK,MAAQA,EACbA,EAAU,KAAOsL,EAAe,KAAOA,EAAe,KAAOtL,EAAU,OAAO,KAC1EsL,EAAe,gBAAkB,OAAO,KAAKA,EAAe,cAAc,EAAE,OAAS,GACrF,QAAQ,KAAK,yHAAyHtL,EAAU,IAAI,IAAI,EAE5JA,EAAU,QAAUoC,EAAarC,EAAkBC,EAAW,aAAc,CACxE,KAAMA,EAAU,IACnB,CAAA,CAAC,EACFA,EAAU,QAAUoC,EAAarC,EAAkBC,EAAW,aAAc,CACxE,KAAMA,EAAU,KAChB,QAASA,EAAU,OACtB,CAAA,CAAC,EACKA,CACV,CACL,CAUA,SAASuL,GAAeC,EAAW3F,EAAOwF,EAAS,CAC/C,KAAM,CAAE,KAAA/F,EAAM,GAAAC,CAAI,EAAGM,EACf,CAAE,eAAA4F,EAAiB;AAAA;AAAA,EAAQ,gBAAAC,EAAkB,CAAA,CAAI,EAAGL,GAAW,GACrE,IAAIpG,EAAO,GACX,OAAAuG,EAAU,aAAalG,EAAMC,EAAI,CAAC9C,EAAMgC,EAAKC,EAAQC,IAAU,CAC3D,IAAI5B,EACAN,EAAK,SAAWgC,EAAMa,IACtBL,GAAQwG,GAEZ,MAAME,EAAiBD,GAAoB,KAAqC,OAASA,EAAgBjJ,EAAK,KAAK,IAAI,EACvH,GAAIkJ,EACA,OAAIjH,IACAO,GAAQ0G,EAAe,CACnB,KAAAlJ,EACA,IAAAgC,EACA,OAAAC,EACA,MAAAC,EACA,MAAAkB,CACpB,CAAiB,GAGE,GAEPpD,EAAK,SACLwC,IAASlC,EAAKN,GAAS,KAA0B,OAASA,EAAK,QAAU,MAAQM,IAAO,OAAS,OAASA,EAAG,MAAM,KAAK,IAAIuC,EAAMb,CAAG,EAAIA,EAAKc,EAAKd,CAAG,EAElK,CAAK,EACMQ,CACX,CAOA,SAAS2G,GAA6BvK,EAAQ,CAC1C,OAAO,OAAO,YAAY,OAAO,QAAQA,EAAO,KAAK,EAChD,OAAO,CAAC,CAAA,CAAGoB,CAAI,IAAMA,EAAK,KAAK,MAAM,EACrC,IAAI,CAAC,CAACxD,EAAMwD,CAAI,IAAM,CAACxD,EAAMwD,EAAK,KAAK,MAAM,CAAC,CAAC,CACxD,CAEA,MAAMoJ,GAA0BT,EAAU,OAAO,CAC7C,KAAM,0BACN,YAAa,CACT,MAAO,CACH,eAAgB,MAC5B,CACK,EACD,uBAAwB,CACpB,MAAO,CACH,IAAInF,SAAO,CACP,IAAK,IAAI6F,EAAS,UAAC,yBAAyB,EAC5C,MAAO,CACH,wBAAyB,IAAM,CAC3B,KAAM,CAAE,OAAAhN,CAAQ,EAAG,KACb,CAAE,MAAAR,EAAO,OAAA+C,CAAQ,EAAGvC,EACpB,CAAE,IAAAL,EAAK,UAAAD,CAAW,EAAGF,EACrB,CAAE,OAAAyN,CAAQ,EAAGvN,EACb8G,EAAO,KAAK,IAAI,GAAGyG,EAAO,IAAIlG,GAASA,EAAM,MAAM,GAAG,CAAC,EACvDN,EAAK,KAAK,IAAI,GAAGwG,EAAO,IAAIlG,GAASA,EAAM,IAAI,GAAG,CAAC,EACnD6F,EAAkBE,GAA6BvK,CAAM,EAE3D,OAAOkK,GAAe9M,EADR,CAAE,KAAA6G,EAAM,GAAAC,GACY,CAC9B,GAAI,KAAK,QAAQ,iBAAmB,OAC9B,CAAE,eAAgB,KAAK,QAAQ,cAAgB,EAC/C,GACN,gBAAAmG,CAC5B,CAAyB,CACJ,CACJ,CACjB,CAAa,CACb,CACK,CACL,CAAC,EAEKM,GAAO,IAAM,CAAC,CAAE,OAAAlN,EAAQ,KAAAC,CAAI,KAC9B,sBAAsB,IAAM,CACxB,IAAIgE,EACCjE,EAAO,cACRC,EAAK,IAAI,QAGRgE,EAAK,QAAW,KAA4B,OAAS,OAAO,aAAY,KAAQ,MAAQA,IAAO,QAAkBA,EAAG,kBAEjI,CAAK,EACM,IAGLkJ,GAAe,CAACC,EAAa,KAAU,CAAC,CAAE,SAAApG,CAAQ,IAC7CA,EAAS,WAAW,GAAIoG,CAAU,EAGvCC,GAAa,IAAM,CAAC,CAAE,MAAA7N,EAAO,GAAAU,EAAI,SAAAW,CAAQ,IAAO,CAClD,KAAM,CAAE,UAAAnB,CAAW,EAAGQ,EAChB,CAAE,OAAA+M,CAAQ,EAAGvN,EACnB,OAAKmB,GAGLoM,EAAO,QAAQ,CAAC,CAAE,MAAA1H,EAAO,IAAA+H,CAAG,IAAO,CAC/B9N,EAAM,IAAI,aAAa+F,EAAM,IAAK+H,EAAI,IAAK,CAAC3J,EAAMgC,IAAQ,CACtD,GAAIhC,EAAK,KAAK,OACV,OAEJ,KAAM,CAAE,IAAAhE,EAAK,QAAA4N,CAAS,EAAGrN,EACnBsN,EAAc7N,EAAI,QAAQ4N,EAAQ,IAAI5H,CAAG,CAAC,EAC1C8H,EAAY9N,EAAI,QAAQ4N,EAAQ,IAAI5H,EAAMhC,EAAK,QAAQ,CAAC,EACxD+J,EAAYF,EAAY,WAAWC,CAAS,EAClD,GAAI,CAACC,EACD,OAEJ,MAAMC,EAAkBC,aAAWF,CAAS,EAC5C,GAAI/J,EAAK,KAAK,YAAa,CACvB,KAAM,CAAE,YAAAkK,CAAa,EAAGL,EAAY,OAAO,eAAeA,EAAY,MAAK,CAAE,EAC7EtN,EAAG,cAAcwN,EAAU,MAAOG,CAAW,CAChD,EACGF,GAAmBA,IAAoB,IACvCzN,EAAG,KAAKwN,EAAWC,CAAe,CAElD,CAAS,CACT,CAAK,EACM,EACX,EAEMvN,GAAUY,GAAMlB,GACXkB,EAAGlB,CAAK,EAGbgO,GAAsB,IAAM,CAAC,CAAE,MAAAtO,EAAO,SAAAqB,CAAQ,IACzCkN,EAAqB,oBAACvO,EAAOqB,CAAQ,EAG1CmN,GAAM,CAACC,EAAaC,IAAc,CAAC,CAAE,OAAAlO,EAAQ,GAAAE,KAAS,CACxD,KAAM,CAAE,MAAAV,CAAO,EAAGQ,EACZmO,EAAe3O,EAAM,IAAI,MAAMyO,EAAY,KAAMA,EAAY,EAAE,EACrE/N,EAAG,YAAY+N,EAAY,KAAMA,EAAY,EAAE,EAC/C,MAAMG,EAASlO,EAAG,QAAQ,IAAIgO,CAAS,EACvC,OAAAhO,EAAG,OAAOkO,EAAQD,EAAa,OAAO,EACtCjO,EAAG,aAAa,IAAImO,EAAAA,cAAcnO,EAAG,IAAI,QAAQkO,EAAS,CAAC,CAAC,CAAC,EACtD,EACX,EAEME,GAAoB,IAAM,CAAC,CAAE,GAAApO,EAAI,SAAAW,CAAQ,IAAO,CAClD,KAAM,CAAE,UAAAnB,CAAW,EAAGQ,EAChBqO,EAAc7O,EAAU,QAAQ,KAAI,EAE1C,GAAI6O,EAAY,QAAQ,KAAO,EAC3B,MAAO,GAEX,MAAMC,EAAOtO,EAAG,UAAU,QAC1B,QAASuO,EAAQD,EAAK,MAAOC,EAAQ,EAAGA,GAAS,EAE7C,GADaD,EAAK,KAAKC,CAAK,EACnB,OAASF,EAAY,KAAM,CAChC,GAAI1N,EAAU,CACV,MAAM2F,EAAOgI,EAAK,OAAOC,CAAK,EACxBhI,EAAK+H,EAAK,MAAMC,CAAK,EAC3BvO,EAAG,OAAOsG,EAAMC,CAAE,EAAE,eAAc,CACrC,CACD,MAAO,EACV,CAEL,MAAO,EACX,EAEMiI,GAAaC,GAAc,CAAC,CAAE,GAAAzO,EAAI,MAAAV,EAAO,SAAAqB,CAAQ,IAAO,CAC1D,MAAMmB,EAAOK,EAAYsM,EAAYnP,EAAM,MAAM,EAC3CgP,EAAOtO,EAAG,UAAU,QAC1B,QAASuO,EAAQD,EAAK,MAAOC,EAAQ,EAAGA,GAAS,EAE7C,GADaD,EAAK,KAAKC,CAAK,EACnB,OAASzM,EAAM,CACpB,GAAInB,EAAU,CACV,MAAM2F,EAAOgI,EAAK,OAAOC,CAAK,EACxBhI,EAAK+H,EAAK,MAAMC,CAAK,EAC3BvO,EAAG,OAAOsG,EAAMC,CAAE,EAAE,eAAc,CACrC,CACD,MAAO,EACV,CAEL,MAAO,EACX,EAEMmI,GAAc7H,GAAS,CAAC,CAAE,GAAA7G,EAAI,SAAAW,CAAQ,IAAO,CAC/C,KAAM,CAAE,KAAA2F,EAAM,GAAAC,CAAI,EAAGM,EACrB,OAAIlG,GACAX,EAAG,OAAOsG,EAAMC,CAAE,EAEf,EACX,EAEMoI,GAAkB,IAAM,CAAC,CAAE,MAAArP,EAAO,SAAAqB,CAAQ,IACrCiO,EAAiB,gBAACtP,EAAOqB,CAAQ,EAGtCkO,GAAQ,IAAM,CAAC,CAAE,SAAA/H,KACZA,EAAS,iBAAiB,OAAO,EAGtCgI,GAAW,IAAM,CAAC,CAAE,MAAAxP,EAAO,SAAAqB,CAAQ,IAC9BoO,EAAU,SAACzP,EAAOqB,CAAQ,EAQrC,SAASqO,GAAeC,EAASC,EAAS7C,EAAU,CAAE,OAAQ,IAAQ,CAClE,MAAM8C,EAAO,OAAO,KAAKD,CAAO,EAChC,OAAKC,EAAK,OAGHA,EAAK,MAAMxM,GACV0J,EAAQ,OACD6C,EAAQvM,CAAG,IAAMsM,EAAQtM,CAAG,EAEnCmD,GAASoJ,EAAQvM,CAAG,CAAC,EACduM,EAAQvM,CAAG,EAAE,KAAKsM,EAAQtM,CAAG,CAAC,EAElCuM,EAAQvM,CAAG,IAAMsM,EAAQtM,CAAG,CACtC,EAVU,EAWf,CAEA,SAASyM,GAAczK,EAAO7C,EAAMG,EAAa,CAAA,EAAI,CACjD,OAAO0C,EAAM,KAAKnC,GACPA,EAAK,OAASV,GAAQkN,GAAexM,EAAK,MAAOP,CAAU,CACrE,CACL,CACA,SAASoN,GAAY1K,EAAO7C,EAAMG,EAAa,CAAA,EAAI,CAC/C,MAAO,CAAC,CAACmN,GAAczK,EAAO7C,EAAMG,CAAU,CAClD,CACA,SAASqN,GAAahB,EAAMxM,EAAMG,EAAa,CAAA,EAAI,CAC/C,GAAI,CAACqM,GAAQ,CAACxM,EACV,OAEJ,IAAImG,EAAQqG,EAAK,OAAO,WAAWA,EAAK,YAAY,EAIpD,GAHIA,EAAK,eAAiBrG,EAAM,QAAUA,EAAM,SAAW,IACvDA,EAAQqG,EAAK,OAAO,YAAYA,EAAK,YAAY,GAEjD,CAACrG,EAAM,KACP,OAEJ,MAAMnD,EAAOsK,GAAc,CAAC,GAAGnH,EAAM,KAAK,KAAK,EAAGnG,EAAMG,CAAU,EAClE,GAAI,CAAC6C,EACD,OAEJ,IAAIyK,EAAatH,EAAM,MACnBuH,EAAWlB,EAAK,MAAK,EAAKrG,EAAM,OAChCwH,EAAWF,EAAa,EACxBG,EAASF,EAAWvH,EAAM,KAAK,SAEnC,IADAmH,GAAc,CAAC,GAAGnH,EAAM,KAAK,KAAK,EAAGnG,EAAMG,CAAU,EAC9CsN,EAAa,GAAKzK,EAAK,QAAQwJ,EAAK,OAAO,MAAMiB,EAAa,CAAC,EAAE,KAAK,GACzEA,GAAc,EACdC,GAAYlB,EAAK,OAAO,MAAMiB,CAAU,EAAE,SAE9C,KAAOE,EAAWnB,EAAK,OAAO,YACvBe,GAAY,CAAC,GAAGf,EAAK,OAAO,MAAMmB,CAAQ,EAAE,KAAK,EAAG3N,EAAMG,CAAU,GACvEyN,GAAUpB,EAAK,OAAO,MAAMmB,CAAQ,EAAE,SACtCA,GAAY,EAEhB,MAAO,CACH,KAAMD,EACN,GAAIE,CACZ,CACA,CAEA,SAASC,EAAYvN,EAAYC,EAAQ,CACrC,GAAI,OAAOD,GAAe,SAAU,CAChC,GAAI,CAACC,EAAO,MAAMD,CAAU,EACxB,MAAM,MAAM,gCAAgCA,CAAU,2CAA2C,EAErG,OAAOC,EAAO,MAAMD,CAAU,CACjC,CACD,OAAOA,CACX,CAEA,MAAMwN,GAAkB,CAACnB,EAAYxM,EAAa,CAAA,IAAO,CAAC,CAAE,GAAAjC,EAAI,MAAAV,EAAO,SAAAqB,KAAe,CAClF,MAAMmB,EAAO6N,EAAYlB,EAAYnP,EAAM,MAAM,EAC3C,CAAE,IAAAG,EAAK,UAAAD,CAAW,EAAGQ,EACrB,CAAE,MAAAqF,EAAO,KAAAiB,EAAM,GAAAC,CAAE,EAAK/G,EAC5B,GAAImB,EAAU,CACV,MAAMkG,EAAQyI,GAAajK,EAAOvD,EAAMG,CAAU,EAClD,GAAI4E,GAASA,EAAM,MAAQP,GAAQO,EAAM,IAAMN,EAAI,CAC/C,MAAMsJ,EAAe1B,EAAa,cAAC,OAAO1O,EAAKoH,EAAM,KAAMA,EAAM,EAAE,EACnE7G,EAAG,aAAa6P,CAAY,CAC/B,CACJ,CACD,MAAO,EACX,EAEMC,GAAQhJ,GAAYlH,GAAS,CAC/B,MAAM6C,EAAQ,OAAOqE,GAAa,WAC5BA,EAASlH,CAAK,EACdkH,EACN,QAASiJ,EAAI,EAAGA,EAAItN,EAAM,OAAQsN,GAAK,EACnC,GAAItN,EAAMsN,CAAC,EAAEnQ,CAAK,EACd,MAAO,GAGf,MAAO,EACX,EAEA,SAASoQ,GAAgBpN,EAAO,CAC5B,OAAOA,aAAiBuL,EAAAA,aAC5B,CAEA,SAAS8B,EAAOrN,EAAQ,EAAGsN,EAAM,EAAGC,EAAM,EAAG,CACzC,OAAO,KAAK,IAAI,KAAK,IAAIvN,EAAOsN,CAAG,EAAGC,CAAG,CAC7C,CAEA,SAASC,GAAqB3Q,EAAK4Q,EAAW,KAAM,CAChD,GAAI,CAACA,EACD,OAAO,KAEX,MAAMC,EAAmBC,EAAAA,UAAU,QAAQ9Q,CAAG,EACxC+Q,EAAiBD,EAAAA,UAAU,MAAM9Q,CAAG,EAC1C,GAAI4Q,IAAa,SAAWA,IAAa,GACrC,OAAOC,EAEX,GAAID,IAAa,MACb,OAAOG,EAEX,MAAMC,EAASH,EAAiB,KAC1BI,EAASF,EAAe,GAC9B,OAAIH,IAAa,MACNlC,EAAAA,cAAc,OAAO1O,EAAKwQ,EAAO,EAAGQ,EAAQC,CAAM,EAAGT,EAAOxQ,EAAI,QAAQ,KAAMgR,EAAQC,CAAM,CAAC,EAEjGvC,EAAa,cAAC,OAAO1O,EAAKwQ,EAAOI,EAAUI,EAAQC,CAAM,EAAGT,EAAOI,EAAUI,EAAQC,CAAM,CAAC,CACvG,CAEA,SAASC,IAAQ,CACb,MAAO,CACH,iBACA,mBACA,iBACA,OACA,SACA,MACR,EAAM,SAAS,UAAU,QAAQ,GAErB,UAAU,UAAU,SAAS,KAAK,GAAK,eAAgB,QACnE,CAEA,MAAMC,GAAQ,CAACP,EAAW,KAAMhE,EAAU,CAAA,IAAO,CAAC,CAAE,OAAAvM,EAAQ,KAAAC,EAAM,GAAAC,EAAI,SAAAW,CAAQ,IAAQ,CAClF0L,EAAU,CACN,eAAgB,GAChB,GAAGA,CACX,EACI,MAAMwE,EAAe,IAAM,CAGnBF,GAAK,GACL5Q,EAAK,IAAI,QAIb,sBAAsB,IAAM,CACnBD,EAAO,cACRC,EAAK,MAAK,EACNsM,GAAY,MAAsCA,EAAQ,gBAC1DvM,EAAO,SAAS,iBAGpC,CAAS,CACT,EACI,GAAKC,EAAK,SAAU,GAAIsQ,IAAa,MAASA,IAAa,GACvD,MAAO,GAGX,GAAI1P,GAAY0P,IAAa,MAAQ,CAACL,GAAgBlQ,EAAO,MAAM,SAAS,EACxE,OAAA+Q,IACO,GAIX,MAAMrR,EAAY4Q,GAAqBpQ,EAAG,IAAKqQ,CAAQ,GAAKvQ,EAAO,MAAM,UACnEgR,EAAkBhR,EAAO,MAAM,UAAU,GAAGN,CAAS,EAC3D,OAAImB,IACKmQ,GACD9Q,EAAG,aAAaR,CAAS,EAIzBsR,GAAmB9Q,EAAG,aACtBA,EAAG,eAAeA,EAAG,WAAW,EAEpC6Q,KAEG,EACX,EAEME,GAAU,CAACtO,EAAO3B,IAAOlB,GACpB6C,EAAM,MAAM,CAACD,EAAMmD,IAAU7E,EAAG0B,EAAM,CAAE,GAAG5C,EAAO,MAAA+F,CAAK,CAAE,CAAC,EAG/DqL,GAAgB,CAACpO,EAAOyJ,IAAY,CAAC,CAAE,GAAArM,EAAI,SAAA8G,KACtCA,EAAS,gBAAgB,CAAE,KAAM9G,EAAG,UAAU,KAAM,GAAIA,EAAG,UAAU,EAAI,EAAE4C,EAAOyJ,CAAO,EAG9F4E,GAAqBxN,GAAS,CAChC,MAAMyN,EAAWzN,EAAK,WACtB,QAASsM,EAAImB,EAAS,OAAS,EAAGnB,GAAK,EAAGA,GAAK,EAAG,CAC9C,MAAMoB,EAAQD,EAASnB,CAAC,EACpBoB,EAAM,WAAa,GAAKA,EAAM,WAAa,gBAAgB,KAAKA,EAAM,SAAS,EAC/E1N,EAAK,YAAY0N,CAAK,EAEjBA,EAAM,WAAa,GACxBF,GAAkBE,CAAK,CAE9B,CACD,OAAO1N,CACX,EACA,SAAS2N,GAAkBxO,EAAO,CAE9B,MAAMyO,EAAe,SAASzO,CAAK,UAC7BkG,EAAO,IAAI,OAAO,UAAS,EAAG,gBAAgBuI,EAAc,WAAW,EAAE,KAC/E,OAAOJ,GAAkBnI,CAAI,CACjC,CASA,SAASwI,GAAsBC,EAASlP,EAAQgK,EAAS,CACrDA,EAAU,CACN,MAAO,GACP,aAAc,CAAE,EAChB,GAAGA,CACX,EACI,MAAMmF,EAAgB,OAAOD,GAAY,UAAYA,IAAY,KAC3DE,EAAgB,OAAOF,GAAY,SACzC,GAAIC,EACA,GAAI,CAGA,GAFuB,MAAM,QAAQD,CAAO,GAAKA,EAAQ,OAAS,EAG9D,OAAOG,EAAQ,SAAC,UAAUH,EAAQ,IAAI/O,GAAQH,EAAO,aAAaG,CAAI,CAAC,CAAC,EAE5E,MAAMiB,EAAOpB,EAAO,aAAakP,CAAO,EACxC,OAAIlF,EAAQ,uBACR5I,EAAK,MAAK,EAEPA,CACV,OACMkO,EAAO,CACV,GAAItF,EAAQ,sBACR,MAAM,IAAI,MAAM,uCAAwC,CAAE,MAAOsF,CAAO,CAAA,EAE5E,eAAQ,KAAK,kCAAmC,gBAAiBJ,EAAS,SAAUI,CAAK,EAClFL,GAAsB,GAAIjP,EAAQgK,CAAO,CACnD,CAEL,GAAIoF,EAAe,CAEf,GAAIpF,EAAQ,sBAAuB,CAC/B,IAAIuF,EAAoB,GACpBC,EAAiB,GAErB,MAAMC,EAAqB,IAAI/M,SAAO,CAClC,QAAS1C,EAAO,KAAK,QACrB,MAAOA,EAAO,KAAK,MAGnB,MAAOA,EAAO,KAAK,MAAM,OAAO,CAC5B,6CAA8C,CAC1C,QAAS,UACT,MAAO,QACP,SAAU,CACN,CACI,IAAK,IACL,SAAUgC,IAENuN,EAAoB,GAEpBC,EAAiB,OAAOxN,GAAM,SAAWA,EAAIA,EAAE,UACxC,KAEd,CACJ,CACJ,CACrB,CAAiB,CACjB,CAAa,EAOD,GANIgI,EAAQ,MACR0F,YAAU,WAAWD,CAAkB,EAAE,WAAWV,GAAkBG,CAAO,EAAGlF,EAAQ,YAAY,EAGpG0F,YAAU,WAAWD,CAAkB,EAAE,MAAMV,GAAkBG,CAAO,EAAGlF,EAAQ,YAAY,EAE/FA,EAAQ,uBAAyBuF,EACjC,MAAM,IAAI,MAAM,uCAAwC,CAAE,MAAO,IAAI,MAAM,0BAA0BC,CAAc,EAAE,CAAG,CAAA,CAE/H,CACD,MAAMG,EAASD,EAAAA,UAAU,WAAW1P,CAAM,EAC1C,OAAIgK,EAAQ,MACD2F,EAAO,WAAWZ,GAAkBG,CAAO,EAAGlF,EAAQ,YAAY,EAAE,QAExE2F,EAAO,MAAMZ,GAAkBG,CAAO,EAAGlF,EAAQ,YAAY,CACvE,CACD,OAAOiF,GAAsB,GAAIjP,EAAQgK,CAAO,CACpD,CAGA,SAAS4F,GAAwBjS,EAAIkS,EAAUC,EAAM,CACjD,MAAMC,EAAOpS,EAAG,MAAM,OAAS,EAC/B,GAAIoS,EAAOF,EACP,OAEJ,MAAMG,EAAOrS,EAAG,MAAMoS,CAAI,EAC1B,GAAI,EAAEC,aAAgBC,EAAAA,aAAeD,aAAgBE,EAAiB,mBAClE,OAEJ,MAAMC,EAAMxS,EAAG,QAAQ,KAAKoS,CAAI,EAChC,IAAIlK,EAAM,EACVsK,EAAI,QAAQ,CAACC,EAAOC,EAAKC,EAAUC,IAAU,CACrC1K,IAAQ,IACRA,EAAM0K,EAElB,CAAK,EACD5S,EAAG,aAAauQ,YAAU,KAAKvQ,EAAG,IAAI,QAAQkI,CAAG,EAAGiK,CAAI,CAAC,CAC7D,CAEA,MAAMU,GAAcC,GACT,EAAE,SAAUA,GAEjBC,GAAkB,CAAC1C,EAAUzN,EAAOyJ,IAAY,CAAC,CAAE,GAAArM,EAAI,SAAAW,EAAU,OAAAb,KAAa,CAChF,IAAIiE,EACJ,GAAIpD,EAAU,CACV0L,EAAU,CACN,aAAc,CAAE,EAChB,gBAAiB,GACjB,gBAAiB,GACjB,gBAAiB,GACjB,GAAGA,CACf,EACQ,IAAIkF,EACJ,GAAI,CACAA,EAAUD,GAAsB1O,EAAO9C,EAAO,OAAQ,CAClD,aAAc,CACV,mBAAoB,OACpB,GAAGuM,EAAQ,YACd,EACD,uBAAwBtI,EAAKsI,EAAQ,yBAA2B,MAAQtI,IAAO,OAASA,EAAKjE,EAAO,QAAQ,kBAC5H,CAAa,CACJ,OACMuE,EAAG,CACN,OAAAvE,EAAO,KAAK,eAAgB,CACxB,OAAAA,EACA,MAAOuE,EACP,qBAAsB,IAAM,CACxB,QAAQ,MAAM,uEAAuE,CACxF,CACjB,CAAa,EACM,EACV,CACD,GAAI,CAAE,KAAAiC,EAAM,GAAAC,CAAI,EAAG,OAAO8J,GAAa,SAAW,CAAE,KAAMA,EAAU,GAAIA,CAAU,EAAG,CAAE,KAAMA,EAAS,KAAM,GAAIA,EAAS,IACrH2C,EAAoB,GACpBC,EAAqB,GAazB,IAZcJ,GAAWtB,CAAO,EAAIA,EAAU,CAACA,CAAO,GAChD,QAAQ9N,GAAQ,CAElBA,EAAK,MAAK,EACVuP,EAAoBA,EAAoBvP,EAAK,QAAUA,EAAK,MAAM,SAAW,EAAI,GACjFwP,EAAqBA,EAAqBxP,EAAK,QAAU,EACrE,CAAS,EAMG6C,IAASC,GAAM0M,EAAoB,CACnC,KAAM,CAAE,OAAAvN,CAAM,EAAK1F,EAAG,IAAI,QAAQsG,CAAI,EACbZ,EAAO,aAAe,CAACA,EAAO,KAAK,KAAK,MAAQ,CAACA,EAAO,aAE7EY,GAAQ,EACRC,GAAM,EAEb,CACD,IAAI2M,EAGAF,GAGI,MAAM,QAAQpQ,CAAK,EACnBsQ,EAAatQ,EAAM,IAAIuQ,GAAKA,EAAE,MAAQ,EAAE,EAAE,KAAK,EAAE,EAE5C,OAAOvQ,GAAU,UAAcA,GAAWA,EAAM,KACrDsQ,EAAatQ,EAAM,KAGnBsQ,EAAatQ,EAEjB5C,EAAG,WAAWkT,EAAY5M,EAAMC,CAAE,IAGlC2M,EAAa3B,EACbvR,EAAG,YAAYsG,EAAMC,EAAI2M,CAAU,GAGnC7G,EAAQ,iBACR4F,GAAwBjS,EAAIA,EAAG,MAAM,OAAS,EAAG,EAAE,EAEnDqM,EAAQ,iBACRrM,EAAG,QAAQ,kBAAmB,CAAE,KAAAsG,EAAM,KAAM4M,CAAU,CAAE,EAExD7G,EAAQ,iBACRrM,EAAG,QAAQ,kBAAmB,CAAE,KAAAsG,EAAM,KAAM4M,CAAU,CAAE,CAE/D,CACD,MAAO,EACX,EAEME,GAAS,IAAM,CAAC,CAAE,MAAA9T,EAAO,SAAAqB,CAAQ,IAC5B0S,EAAQ,OAAC/T,EAAOqB,CAAQ,EAE7B2S,GAAW,IAAM,CAAC,CAAE,MAAAhU,EAAO,SAAAqB,CAAQ,IAC9B4S,EAAU,SAACjU,EAAOqB,CAAQ,EAE/B6S,GAAe,IAAM,CAAC,CAAE,MAAAlU,EAAO,SAAAqB,CAAQ,IAClC8S,EAAc,aAACnU,EAAOqB,CAAQ,EAEnC+S,GAAc,IAAM,CAAC,CAAE,MAAApU,EAAO,SAAAqB,CAAQ,IACjCgT,EAAa,YAACrU,EAAOqB,CAAQ,EAGlCiT,GAAmB,IAAM,CAAC,CAAE,MAAAtU,EAAO,SAAAqB,EAAU,GAAAX,CAAE,IAAQ,CACzD,GAAI,CACA,MAAM6T,EAAQC,EAAAA,UAAUxU,EAAM,IAAKA,EAAM,UAAU,MAAM,IAAK,EAAE,EAChE,OAAIuU,GAAU,KACH,IAEX7T,EAAG,KAAK6T,EAAO,CAAC,EACZlT,GACAA,EAASX,CAAE,EAER,GACV,MACS,CACN,MAAO,EACV,CACL,EAEM+T,GAAkB,IAAM,CAAC,CAAE,MAAAzU,EAAO,SAAAqB,EAAU,GAAAX,CAAE,IAAQ,CACxD,GAAI,CACA,MAAM6T,EAAQC,EAAAA,UAAUxU,EAAM,IAAKA,EAAM,UAAU,MAAM,IAAK,CAAE,EAChE,OAAIuU,GAAU,KACH,IAEX7T,EAAG,KAAK6T,EAAO,CAAC,EACZlT,GACAA,EAASX,CAAE,EAER,GACV,MACS,CACN,MAAO,EACV,CACL,EAEMgU,GAAwB,IAAM,CAAC,CAAE,MAAA1U,EAAO,SAAAqB,CAAQ,IAC3CsT,EAAuB,sBAAC3U,EAAOqB,CAAQ,EAG5CuT,GAAuB,IAAM,CAAC,CAAE,MAAA5U,EAAO,SAAAqB,CAAQ,IAC1CwT,EAAsB,qBAAC7U,EAAOqB,CAAQ,EAGjD,SAASyT,IAAU,CACf,OAAO,OAAO,UAAc,IACtB,MAAM,KAAK,UAAU,QAAQ,EAC7B,EACV,CAEA,SAASC,GAAiBpU,EAAM,CAC5B,MAAMqU,EAAQrU,EAAK,MAAM,QAAQ,EACjC,IAAImG,EAASkO,EAAMA,EAAM,OAAS,CAAC,EAC/BlO,IAAW,UACXA,EAAS,KAEb,IAAImO,EACAC,EACAC,EACAC,EACJ,QAAS3E,EAAI,EAAGA,EAAIuE,EAAM,OAAS,EAAGvE,GAAK,EAAG,CAC1C,MAAM4E,EAAML,EAAMvE,CAAC,EACnB,GAAI,kBAAkB,KAAK4E,CAAG,EAC1BD,EAAO,WAEF,YAAY,KAAKC,CAAG,EACzBJ,EAAM,WAED,sBAAsB,KAAKI,CAAG,EACnCH,EAAO,WAEF,cAAc,KAAKG,CAAG,EAC3BF,EAAQ,WAEH,SAAS,KAAKE,CAAG,EAClBhE,GAAK,GAAMyD,KACXM,EAAO,GAGPF,EAAO,OAIX,OAAM,IAAI,MAAM,+BAA+BG,CAAG,EAAE,CAE3D,CACD,OAAIJ,IACAnO,EAAS,OAAOA,CAAM,IAEtBoO,IACApO,EAAS,QAAQA,CAAM,IAEvBsO,IACAtO,EAAS,QAAQA,CAAM,IAEvBqO,IACArO,EAAS,SAASA,CAAM,IAErBA,CACX,CACA,MAAMwO,GAAmB3U,GAAQ,CAAC,CAAE,OAAAH,EAAQ,KAAAC,EAAM,GAAAC,EAAI,SAAAW,KAAgB,CAClE,MAAMwO,EAAOkF,GAAiBpU,CAAI,EAAE,MAAM,QAAQ,EAC5C0C,EAAMwM,EAAK,KAAK3M,GAAQ,CAAC,CAAC,MAAO,OAAQ,OAAQ,OAAO,EAAE,SAASA,CAAI,CAAC,EACxE3B,EAAQ,IAAI,cAAc,UAAW,CACvC,IAAK8B,IAAQ,QACP,IACAA,EACN,OAAQwM,EAAK,SAAS,KAAK,EAC3B,QAASA,EAAK,SAAS,MAAM,EAC7B,QAASA,EAAK,SAAS,MAAM,EAC7B,SAAUA,EAAK,SAAS,OAAO,EAC/B,QAAS,GACT,WAAY,EACpB,CAAK,EACK0F,EAAsB/U,EAAO,mBAAmB,IAAM,CACxDC,EAAK,SAAS,gBAAiB+U,GAAKA,EAAE/U,EAAMc,CAAK,CAAC,CAC1D,CAAK,EACD,OAAAgU,GAAwB,MAAkDA,EAAoB,MAAM,QAAQxC,GAAQ,CAChH,MAAM0C,EAAU1C,EAAK,IAAIrS,EAAG,OAAO,EAC/B+U,GAAWpU,GACXX,EAAG,UAAU+U,CAAO,CAEhC,CAAK,EACM,EACX,EAEA,SAASC,EAAa1V,EAAOmP,EAAYxM,EAAa,CAAA,EAAI,CACtD,KAAM,CAAE,KAAAqE,EAAM,GAAAC,EAAI,MAAA0O,CAAK,EAAK3V,EAAM,UAC5BwC,EAAO2M,EAAatM,EAAYsM,EAAYnP,EAAM,MAAM,EAAI,KAC5D4V,EAAa,CAAA,EACnB5V,EAAM,IAAI,aAAagH,EAAMC,EAAI,CAAC9C,EAAMgC,IAAQ,CAC5C,GAAIhC,EAAK,OACL,OAEJ,MAAM0R,EAAe,KAAK,IAAI7O,EAAMb,CAAG,EACjC2P,EAAa,KAAK,IAAI7O,EAAId,EAAMhC,EAAK,QAAQ,EACnDyR,EAAW,KAAK,CACZ,KAAAzR,EACA,KAAM0R,EACN,GAAIC,CAChB,CAAS,CACT,CAAK,EACD,MAAMC,EAAiB9O,EAAKD,EACtBgP,EAAoBJ,EACrB,OAAO1H,GACH1L,EAGEA,EAAK,OAAS0L,EAAU,KAAK,KAAK,KAF9B,EAGd,EACI,OAAOA,GAAawB,GAAexB,EAAU,KAAK,MAAOvL,EAAY,CAAE,OAAQ,EAAK,CAAE,CAAC,EAC5F,OAAIgT,EACO,CAAC,CAACK,EAAkB,OAEjBA,EAAkB,OAAO,CAACC,EAAK/H,IAAc+H,EAAM/H,EAAU,GAAKA,EAAU,KAAM,CAAC,GACjF6H,CACpB,CAEA,MAAMG,GAAO,CAAC/G,EAAYxM,EAAa,CAAE,IAAK,CAAC,CAAE,MAAA3C,EAAO,SAAAqB,KAAe,CACnE,MAAMmB,EAAOK,EAAYsM,EAAYnP,EAAM,MAAM,EAEjD,OADiB0V,EAAa1V,EAAOwC,EAAMG,CAAU,EAI9CwT,EAAM,KAACnW,EAAOqB,CAAQ,EAFlB,EAGf,EAEM+U,GAAiB,IAAM,CAAC,CAAE,MAAApW,EAAO,SAAAqB,CAAQ,IACpCgV,EAAgB,eAACrW,EAAOqB,CAAQ,EAGrCiV,GAAenH,GAAc,CAAC,CAAE,MAAAnP,EAAO,SAAAqB,CAAQ,IAAO,CACxD,MAAMmB,EAAOK,EAAYsM,EAAYnP,EAAM,MAAM,EACjD,OAAOuW,EAAc,aAAC/T,CAAI,EAAExC,EAAOqB,CAAQ,CAC/C,EAEMmV,GAAgB,IAAM,CAAC,CAAE,MAAAxW,EAAO,SAAAqB,CAAQ,IACnCoV,EAAe,cAACzW,EAAOqB,CAAQ,EAS1C,SAASqV,GAAwB/V,EAAMoC,EAAQ,CAC3C,OAAIA,EAAO,MAAMpC,CAAI,EACV,OAEPoC,EAAO,MAAMpC,CAAI,EACV,OAEJ,IACX,CAOA,SAASgW,GAAYC,EAAKC,EAAa,CACnC,MAAMvW,EAAQ,OAAOuW,GAAgB,SAC/B,CAACA,CAAW,EACZA,EACN,OAAO,OACF,KAAKD,CAAG,EACR,OAAO,CAACE,EAAQC,KACZzW,EAAM,SAASyW,CAAI,IACpBD,EAAOC,CAAI,EAAIH,EAAIG,CAAI,GAEpBD,GACR,CAAE,CAAA,CACT,CAEA,MAAME,GAAkB,CAAC7H,EAAYxM,IAAe,CAAC,CAAE,GAAAjC,EAAI,MAAAV,EAAO,SAAAqB,KAAe,CAC7E,IAAI4V,EAAW,KACXC,EAAW,KACf,MAAMC,EAAaT,GAAwB,OAAOvH,GAAe,SAAWA,EAAaA,EAAW,KAAMnP,EAAM,MAAM,EACtH,OAAKmX,GAGDA,IAAe,SACfF,EAAWpU,EAAYsM,EAAYnP,EAAM,MAAM,GAE/CmX,IAAe,SACfD,EAAW7G,EAAYlB,EAAYnP,EAAM,MAAM,GAE/CqB,GACAX,EAAG,UAAU,OAAO,QAAQ6G,GAAS,CACjCvH,EAAM,IAAI,aAAauH,EAAM,MAAM,IAAKA,EAAM,IAAI,IAAK,CAACpD,EAAMgC,IAAQ,CAC9D8Q,GAAYA,IAAa9S,EAAK,MAC9BzD,EAAG,cAAcyF,EAAK,OAAWwQ,GAAYxS,EAAK,MAAOxB,CAAU,CAAC,EAEpEuU,GAAY/S,EAAK,MAAM,QACvBA,EAAK,MAAM,QAAQqB,GAAQ,CACnB0R,IAAa1R,EAAK,MAClB9E,EAAG,QAAQyF,EAAKA,EAAMhC,EAAK,SAAU+S,EAAS,OAAOP,GAAYnR,EAAK,MAAO7C,CAAU,CAAC,CAAC,CAErH,CAAqB,CAErB,CAAa,CACb,CAAS,EAEE,IAxBI,EAyBf,EAEMyU,GAAiB,IAAM,CAAC,CAAE,GAAA1W,EAAI,SAAAW,CAAQ,KACpCA,GACAX,EAAG,eAAc,EAEd,IAGL2W,GAAY,IAAM,CAAC,CAAE,GAAA3W,EAAI,SAAA8G,CAAQ,IAC5BA,EAAS,iBAAiB,CAC7B,KAAM,EACN,GAAI9G,EAAG,IAAI,QAAQ,IAC3B,CAAK,EAGC4W,GAAqB,IAAM,CAAC,CAAE,MAAAtX,EAAO,SAAAqB,CAAQ,IACxCkW,EAAoB,mBAACvX,EAAOqB,CAAQ,EAGzCmW,GAAoB,IAAM,CAAC,CAAE,MAAAxX,EAAO,SAAAqB,CAAQ,IACvCoW,EAAmB,kBAACzX,EAAOqB,CAAQ,EAGxCqW,GAAmB,IAAM,CAAC,CAAE,MAAA1X,EAAO,SAAAqB,CAAQ,IACtCsW,EAAkB,iBAAC3X,EAAOqB,CAAQ,EAKvCuW,GAAqB,IAAM,CAAC,CAAE,MAAA5X,EAAO,SAAAqB,CAAQ,IACxCwW,EAAoB,mBAAC7X,EAAOqB,CAAQ,EAKzCyW,GAAuB,IAAM,CAAC,CAAE,MAAA9X,EAAO,SAAAqB,CAAQ,IAC1C0W,EAAsB,qBAAC/X,EAAOqB,CAAQ,EAUjD,SAAS2W,GAAe/F,EAASlP,EAAQkV,EAAe,CAAE,EAAElL,EAAU,GAAI,CACtE,OAAOiF,GAAsBC,EAASlP,EAAQ,CAC1C,MAAO,GACP,aAAAkV,EACA,sBAAuBlL,EAAQ,qBACvC,CAAK,CACL,CAEA,MAAMmL,GAAa,CAACjG,EAASrE,EAAa,GAAOqK,EAAe,CAAE,EAAElL,EAAU,CAAE,IAAK,CAAC,CAAE,OAAAvM,EAAQ,GAAAE,EAAI,SAAAW,EAAU,SAAAmG,CAAQ,IAAQ,CAC1H,IAAI/C,EAAI6B,EACR,KAAM,CAAE,IAAAnG,CAAK,EAAGO,EAGhB,GAAIuX,EAAa,qBAAuB,OAAQ,CAC5C,MAAME,EAAWH,GAAe/F,EAASzR,EAAO,OAAQyX,EAAc,CAClE,uBAAwBxT,EAAKsI,EAAQ,yBAA2B,MAAQtI,IAAO,OAASA,EAAKjE,EAAO,QAAQ,kBACxH,CAAS,EACD,OAAIa,GACAX,EAAG,YAAY,EAAGP,EAAI,QAAQ,KAAMgY,CAAQ,EAAE,QAAQ,gBAAiB,CAACvK,CAAU,EAE/E,EACV,CACD,OAAIvM,GACAX,EAAG,QAAQ,gBAAiB,CAACkN,CAAU,EAEpCpG,EAAS,gBAAgB,CAAE,KAAM,EAAG,GAAIrH,EAAI,QAAQ,IAAM,EAAE8R,EAAS,CACxE,aAAAgG,EACA,uBAAwB3R,EAAKyG,EAAQ,yBAA2B,MAAQzG,IAAO,OAASA,EAAK9F,EAAO,QAAQ,kBACpH,CAAK,CACL,EAEA,SAAS4X,GAAkBpY,EAAOmP,EAAY,CAC1C,MAAM3M,EAAO6N,EAAYlB,EAAYnP,EAAM,MAAM,EAC3C,CAAE,KAAAgH,EAAM,GAAAC,EAAI,MAAA0O,CAAK,EAAK3V,EAAM,UAC5BqF,EAAQ,CAAA,EACVsQ,GACI3V,EAAM,aACNqF,EAAM,KAAK,GAAGrF,EAAM,WAAW,EAEnCqF,EAAM,KAAK,GAAGrF,EAAM,UAAU,MAAM,MAAK,CAAE,GAG3CA,EAAM,IAAI,aAAagH,EAAMC,EAAI9C,GAAQ,CACrCkB,EAAM,KAAK,GAAGlB,EAAK,KAAK,CACpC,CAAS,EAEL,MAAMqB,EAAOH,EAAM,KAAKgT,GAAYA,EAAS,KAAK,OAAS7V,EAAK,IAAI,EACpE,OAAKgD,EAGE,CAAE,GAAGA,EAAK,OAFN,EAGf,CAQA,SAAS8S,GAAwBC,EAAQ9O,EAAc,CACnD,MAAM+O,EAAY,IAAIC,YAAUF,CAAM,EACtC,OAAA9O,EAAa,QAAQxJ,GAAe,CAChCA,EAAY,MAAM,QAAQ8S,GAAQ,CAC9ByF,EAAU,KAAKzF,CAAI,CAC/B,CAAS,CACT,CAAK,EACMyF,CACX,CAOA,SAASE,GAAepR,EAAO,CAC3B,QAASmJ,EAAI,EAAGA,EAAInJ,EAAM,UAAWmJ,GAAK,EAAG,CACzC,KAAM,CAAE,KAAAjO,CAAM,EAAG8E,EAAM,KAAKmJ,CAAC,EAC7B,GAAIjO,EAAK,aAAe,CAACA,EAAK,iBAAgB,EAC1C,OAAOA,CAEd,CACD,OAAO,IACX,CAQA,SAASmW,GAAaxU,EAAMyU,EAAW,CACnC,MAAMC,EAAe,CAAA,EACrB,OAAA1U,EAAK,YAAY,CAAC0N,EAAO1L,IAAQ,CACzByS,EAAU/G,CAAK,GACfgH,EAAa,KAAK,CACd,KAAMhH,EACN,IAAA1L,CAChB,CAAa,CAEb,CAAK,EACM0S,CACX,CASA,SAASC,GAAoB3U,EAAMoD,EAAOqR,EAAW,CACjD,MAAMC,EAAe,CAAA,EAUrB,OAAA1U,EAAK,aAAaoD,EAAM,KAAMA,EAAM,GAAI,CAACsK,EAAO1L,IAAQ,CAChDyS,EAAU/G,CAAK,GACfgH,EAAa,KAAK,CACd,KAAMhH,EACN,IAAA1L,CAChB,CAAa,CAEb,CAAK,EACM0S,CACX,CAWA,SAASE,GAA2B/J,EAAM4J,EAAW,CACjD,QAASnI,EAAIzB,EAAK,MAAOyB,EAAI,EAAGA,GAAK,EAAG,CACpC,MAAMtM,EAAO6K,EAAK,KAAKyB,CAAC,EACxB,GAAImI,EAAUzU,CAAI,EACd,MAAO,CACH,IAAKsM,EAAI,EAAIzB,EAAK,OAAOyB,CAAC,EAAI,EAC9B,MAAOzB,EAAK,MAAMyB,CAAC,EACnB,MAAOA,EACP,KAAAtM,CAChB,CAEK,CACL,CAUA,SAAS6U,GAAeJ,EAAW,CAC/B,OAAQ1Y,GAAc6Y,GAA2B7Y,EAAU,MAAO0Y,CAAS,CAC/E,CAEA,SAASK,GAAoBC,EAAUnW,EAAQ,CAC3C,MAAMoW,EAAmBC,EAAAA,cAAc,WAAWrW,CAAM,EAAE,kBAAkBmW,CAAQ,EAE9EG,EADoB,SAAS,eAAe,mBAAkB,EAChC,cAAc,KAAK,EACvD,OAAAA,EAAU,YAAYF,CAAgB,EAC/BE,EAAU,SACrB,CAwCA,SAASC,GAAQnV,EAAM4I,EAAS,CAC5B,MAAMxF,EAAQ,CACV,KAAM,EACN,GAAIpD,EAAK,QAAQ,IACzB,EACI,OAAO8I,GAAe9I,EAAMoD,EAAOwF,CAAO,CAC9C,CAsBA,SAASwM,GAAkBvZ,EAAOmP,EAAY,CAC1C,MAAM3M,EAAOK,EAAYsM,EAAYnP,EAAM,MAAM,EAC3C,CAAE,KAAAgH,EAAM,GAAAC,GAAOjH,EAAM,UACrB4E,EAAQ,CAAA,EACd5E,EAAM,IAAI,aAAagH,EAAMC,EAAI9C,GAAQ,CACrCS,EAAM,KAAKT,CAAI,CACvB,CAAK,EACD,MAAMA,EAAOS,EAAM,QAAO,EAAG,KAAK4U,GAAYA,EAAS,KAAK,OAAShX,EAAK,IAAI,EAC9E,OAAK2B,EAGE,CAAE,GAAGA,EAAK,OAFN,EAGf,CAQA,SAASsV,GAAczZ,EAAOmP,EAAY,CACtC,MAAMgI,EAAaT,GAAwB,OAAOvH,GAAe,SAAWA,EAAaA,EAAW,KAAMnP,EAAM,MAAM,EACtH,OAAImX,IAAe,OACRoC,GAAkBvZ,EAAOmP,CAAU,EAE1CgI,IAAe,OACRiB,GAAkBpY,EAAOmP,CAAU,EAEvC,EACX,CAMA,SAASuK,GAAiBC,EAAOC,EAAK,KAAK,UAAW,CAClD,MAAMC,EAAO,CAAA,EACb,OAAOF,EAAM,OAAOzW,GAAQ,CACxB,MAAMG,EAAMuW,EAAG1W,CAAI,EACnB,OAAO,OAAO,UAAU,eAAe,KAAK2W,EAAMxW,CAAG,EAC/C,GACCwW,EAAKxW,CAAG,EAAI,EAC3B,CAAK,CACL,CAMA,SAASyW,GAAsBC,EAAS,CACpC,MAAMC,EAAgBN,GAAiBK,CAAO,EAC9C,OAAOC,EAAc,SAAW,EAC1BA,EACAA,EAAc,OAAO,CAACC,EAAQ5T,IAErB,CADM2T,EAAc,OAAO,CAACE,EAAG,IAAM,IAAM7T,CAAK,EAC1C,KAAK8T,GACPF,EAAO,SAAS,MAAQE,EAAY,SAAS,MAC7CF,EAAO,SAAS,IAAME,EAAY,SAAS,IAC3CF,EAAO,SAAS,MAAQE,EAAY,SAAS,MAC7CF,EAAO,SAAS,IAAME,EAAY,SAAS,EACrD,CACJ,CACT,CAKA,SAASC,GAAiB5B,EAAW,CACjC,KAAM,CAAE,QAAAzK,EAAS,MAAAsM,CAAO,EAAG7B,EACrBuB,EAAU,CAAA,EAChB,OAAAhM,EAAQ,KAAK,QAAQ,CAACuM,EAASjU,IAAU,CACrC,MAAMoH,EAAS,CAAA,EAIf,GAAK6M,EAAQ,OAAO,OAQhBA,EAAQ,QAAQ,CAACtT,EAAMC,IAAO,CAC1BwG,EAAO,KAAK,CAAE,KAAAzG,EAAM,GAAAC,CAAI,CAAA,CACxC,CAAa,MAVuB,CACxB,KAAM,CAAE,KAAAD,EAAM,GAAAC,CAAI,EAAGoT,EAAMhU,CAAK,EAChC,GAAIW,IAAS,QAAaC,IAAO,OAC7B,OAEJwG,EAAO,KAAK,CAAE,KAAAzG,EAAM,GAAAC,CAAI,CAAA,CAC3B,CAMDwG,EAAO,QAAQ,CAAC,CAAE,KAAAzG,EAAM,GAAAC,CAAE,IAAO,CAC7B,MAAMsT,EAAWxM,EAAQ,MAAM1H,CAAK,EAAE,IAAIW,EAAM,EAAE,EAC5CwT,EAASzM,EAAQ,MAAM1H,CAAK,EAAE,IAAIY,CAAE,EACpCwT,EAAW1M,EAAQ,OAAM,EAAG,IAAIwM,EAAU,EAAE,EAC5CG,EAAS3M,EAAQ,OAAQ,EAAC,IAAIyM,CAAM,EAC1CT,EAAQ,KAAK,CACT,SAAU,CACN,KAAMU,EACN,GAAIC,CACP,EACD,SAAU,CACN,KAAMH,EACN,GAAIC,CACP,CACjB,CAAa,CACb,CAAS,CACT,CAAK,EACMV,GAAsBC,CAAO,CACxC,CAyCA,SAASY,GAAgB3T,EAAMC,EAAI9G,EAAK,CACpC,MAAMkF,EAAQ,CAAA,EAEd,OAAI2B,IAASC,EACT9G,EACK,QAAQ6G,CAAI,EACZ,MAAO,EACP,QAAQxB,GAAQ,CACjB,MAAMwJ,EAAO7O,EAAI,QAAQ6G,CAAI,EACvBO,EAAQyI,GAAahB,EAAMxJ,EAAK,IAAI,EACrC+B,GAGLlC,EAAM,KAAK,CACP,KAAAG,EACA,GAAG+B,CACnB,CAAa,CACb,CAAS,EAGDpH,EAAI,aAAa6G,EAAMC,EAAI,CAAC9C,EAAMgC,IAAQ,CAClC,CAAChC,IAASA,GAAS,KAA0B,OAASA,EAAK,YAAc,QAG7EkB,EAAM,KAAK,GAAGlB,EAAK,MAAM,IAAIqB,IAAS,CAClC,KAAMW,EACN,GAAIA,EAAMhC,EAAK,SACf,KAAAqB,CACH,EAAC,CAAC,CACf,CAAS,EAEEH,CACX,CAiCA,SAASuV,GAAsBzY,EAAqB0Y,EAAUlY,EAAY,CACtE,OAAO,OAAO,YAAY,OACrB,QAAQA,CAAU,EAClB,OAAO,CAAC,CAAChC,CAAI,IAAM,CACpB,MAAMsE,EAAqB9C,EAAoB,KAAKe,GACzCA,EAAK,OAAS2X,GAAY3X,EAAK,OAASvC,CAClD,EACD,OAAKsE,EAGEA,EAAmB,UAAU,YAFzB,EAGd,CAAA,CAAC,CACN,CAEA,SAAS6V,GAAa9a,EAAOmP,EAAYxM,EAAa,CAAA,EAAI,CACtD,KAAM,CAAE,MAAAgT,EAAO,OAAAlI,GAAWzN,EAAM,UAC1BwC,EAAO2M,EAAakB,EAAYlB,EAAYnP,EAAM,MAAM,EAAI,KAClE,GAAI2V,EACA,MAAO,CAAC,EAAE3V,EAAM,aAAeA,EAAM,UAAU,MAAM,MAAO,GACvD,OAAOwF,GACHhD,EAGEA,EAAK,OAASgD,EAAK,KAAK,KAFpB,EAGd,EACI,KAAKA,GAAQkK,GAAelK,EAAK,MAAO7C,EAAY,CAAE,OAAQ,EAAO,CAAA,CAAC,EAE/E,IAAIoT,EAAiB,EACrB,MAAMgF,EAAa,CAAA,EAmBnB,GAlBAtN,EAAO,QAAQ,CAAC,CAAE,MAAA1H,EAAO,IAAA+H,CAAG,IAAO,CAC/B,MAAM9G,EAAOjB,EAAM,IACbkB,EAAK6G,EAAI,IACf9N,EAAM,IAAI,aAAagH,EAAMC,EAAI,CAAC9C,EAAMgC,IAAQ,CAC5C,GAAI,CAAChC,EAAK,QAAU,CAACA,EAAK,MAAM,OAC5B,OAEJ,MAAM0R,EAAe,KAAK,IAAI7O,EAAMb,CAAG,EACjC2P,EAAa,KAAK,IAAI7O,EAAId,EAAMhC,EAAK,QAAQ,EAC7CoD,EAAQuO,EAAaD,EAC3BE,GAAkBxO,EAClBwT,EAAW,KAAK,GAAG5W,EAAK,MAAM,IAAIqB,IAAS,CACvC,KAAAA,EACA,KAAMqQ,EACN,GAAIC,CACP,EAAC,CAAC,CACf,CAAS,CACT,CAAK,EACGC,IAAmB,EACnB,MAAO,GAGX,MAAMiF,EAAeD,EAChB,OAAOE,GACHzY,EAGEA,EAAK,OAASyY,EAAU,KAAK,KAAK,KAF9B,EAGd,EACI,OAAOA,GAAavL,GAAeuL,EAAU,KAAK,MAAOtY,EAAY,CAAE,OAAQ,EAAK,CAAE,CAAC,EACvF,OAAO,CAACsT,EAAKgF,IAAchF,EAAMgF,EAAU,GAAKA,EAAU,KAAM,CAAC,EAGhEC,EAAgBH,EACjB,OAAOE,GACHzY,EAGEyY,EAAU,KAAK,OAASzY,GAAQyY,EAAU,KAAK,KAAK,SAASzY,CAAI,EAF7D,EAGd,EACI,OAAO,CAACyT,EAAKgF,IAAchF,EAAMgF,EAAU,GAAKA,EAAU,KAAM,CAAC,EAItE,OADcD,EAAe,EAAIA,EAAeE,EAAgBF,IAChDjF,CACpB,CAEA,SAASoF,GAASnb,EAAOW,EAAMgC,EAAa,CAAA,EAAI,CAC5C,GAAI,CAAChC,EACD,OAAO+U,EAAa1V,EAAO,KAAM2C,CAAU,GAAKmY,GAAa9a,EAAO,KAAM2C,CAAU,EAExF,MAAMwU,EAAaT,GAAwB/V,EAAMX,EAAM,MAAM,EAC7D,OAAImX,IAAe,OACRzB,EAAa1V,EAAOW,EAAMgC,CAAU,EAE3CwU,IAAe,OACR2D,GAAa9a,EAAOW,EAAMgC,CAAU,EAExC,EACX,CA6BA,SAASyY,GAAOza,EAAMmB,EAAY,CAC9B,KAAM,CAAE,eAAAE,CAAc,EAAKH,GAAgBC,CAAU,EAC/CJ,EAAYM,EAAe,KAAKkB,GAAQA,EAAK,OAASvC,CAAI,EAChE,GAAI,CAACe,EACD,MAAO,GAEX,MAAME,EAAU,CACZ,KAAMF,EAAU,KAChB,QAASA,EAAU,QACnB,QAASA,EAAU,OAC3B,EACU2Z,EAAQvX,EAAarC,EAAkBC,EAAW,QAASE,CAAO,CAAC,EACzE,OAAI,OAAOyZ,GAAU,SACV,GAEJA,EAAM,MAAM,GAAG,EAAE,SAAS,MAAM,CAC3C,CAKA,SAASC,GAAYnX,EAAM,CAAE,cAAAoX,EAAgB,GAAM,iBAAAC,EAAmB,EAAQ,EAAG,GAAI,CACjF,IAAI/W,EACJ,GAAI+W,EAAkB,CAClB,GAAIrX,EAAK,KAAK,OAAS,YAEnB,MAAO,GAEX,GAAIA,EAAK,OACL,MAAO,SAAS,MAAMM,EAAKN,EAAK,QAAU,MAAQM,IAAO,OAASA,EAAK,EAAE,CAEhF,CACD,GAAIN,EAAK,OACL,MAAO,CAACA,EAAK,KAEjB,GAAIA,EAAK,QAAUA,EAAK,OACpB,MAAO,GAEX,GAAIA,EAAK,QAAQ,aAAe,EAC5B,MAAO,GAEX,GAAIoX,EAAe,CACf,IAAIE,EAAiB,GACrB,OAAAtX,EAAK,QAAQ,QAAQuX,GAAa,CAC1BD,IAAmB,KAIlBH,GAAYI,EAAW,CAAE,iBAAAF,EAAkB,cAAAD,CAAe,CAAA,IAC3DE,EAAiB,IAEjC,CAAS,EACMA,CACV,CACD,MAAO,EACX,CAEA,SAASE,GAAgBrY,EAAO,CAC5B,OAAOA,aAAiBsY,EAAAA,aAC5B,CAEA,SAASC,GAAapb,EAAMuG,EAAMC,EAAI,CAElC,MAAMmK,EAAS3Q,EAAK,MAAM,IAAI,QAAQ,KAChC+H,EAAemI,EAAO3J,EAAM,EAAQoK,CAAM,EAC1C0K,EAAcnL,EAAO1J,EAAI,EAAQmK,CAAM,EACvCzI,EAAQlI,EAAK,YAAY+H,CAAY,EACrCI,EAAMnI,EAAK,YAAYqb,EAAa,EAAE,EACtCC,EAAM,KAAK,IAAIpT,EAAM,IAAKC,EAAI,GAAG,EACjCoT,EAAS,KAAK,IAAIrT,EAAM,OAAQC,EAAI,MAAM,EAC1CqT,EAAO,KAAK,IAAItT,EAAM,KAAMC,EAAI,IAAI,EACpCsT,EAAQ,KAAK,IAAIvT,EAAM,MAAOC,EAAI,KAAK,EACvCuT,EAAQD,EAAQD,EAChBG,EAASJ,EAASD,EAGlBxX,EAAO,CACT,IAAAwX,EACA,OAAAC,EACA,KAAAC,EACA,MAAAC,EACA,MAAAC,EACA,OAAAC,EACA,EATMH,EAUN,EATMF,CAUd,EACI,MAAO,CACH,GAAGxX,EACH,OAAQ,IAAMA,CACtB,CACA,CAEA,SAAS8X,GAAWrc,EAAOU,EAAI4b,EAAa,CACxC,IAAI7X,EACJ,KAAM,CAAE,UAAAvE,CAAW,EAAGQ,EACtB,IAAI6b,EAAS,KAIb,GAHI7L,GAAgBxQ,CAAS,IACzBqc,EAASrc,EAAU,SAEnBqc,EAAQ,CACR,MAAMC,GAAgB/X,EAAKzE,EAAM,eAAiB,MAAQyE,IAAO,OAASA,EAAK8X,EAAO,MAAK,EAE3F,MAAQ,CAAC,CAACD,EAAY,QAAQE,CAAY,GACnC,CAACA,EAAa,KAAKhX,GAAQA,EAAK,KAAK,SAAS8W,CAAW,CAAC,CACpE,CACD,KAAM,CAAE,OAAA7O,CAAQ,EAAGvN,EACnB,OAAOuN,EAAO,KAAK,CAAC,CAAE,MAAA1H,EAAO,IAAA+H,CAAG,IAAO,CACnC,IAAI2O,EAAuB1W,EAAM,QAAU,EACrC/F,EAAM,IAAI,eAAiBA,EAAM,IAAI,KAAK,eAAesc,CAAW,EACpE,GACN,OAAAtc,EAAM,IAAI,aAAa+F,EAAM,IAAK+H,EAAI,IAAK,CAAC3J,EAAMuY,EAAMtW,IAAW,CAE/D,GAAIqW,EACA,MAAO,GAEX,GAAItY,EAAK,SAAU,CACf,MAAMwY,EAAuB,CAACvW,GAAUA,EAAO,KAAK,eAAekW,CAAW,EACxEM,EAA4B,CAAC,CAACN,EAAY,QAAQnY,EAAK,KAAK,GAC3D,CAACA,EAAK,MAAM,KAAK0Y,GAAaA,EAAU,KAAK,SAASP,CAAW,CAAC,EACzEG,EAAuBE,GAAwBC,CAClD,CACD,MAAO,CAACH,CACpB,CAAS,EACMA,CACf,CAAK,CACL,CACA,MAAMK,GAAU,CAAC3N,EAAYxM,EAAa,CAAA,IAAO,CAAC,CAAE,GAAAjC,EAAI,MAAAV,EAAO,SAAAqB,KAAe,CAC1E,KAAM,CAAE,UAAAnB,CAAW,EAAGQ,EAChB,CAAE,MAAAiV,EAAO,OAAAlI,CAAQ,EAAGvN,EACpBsC,EAAO6N,EAAYlB,EAAYnP,EAAM,MAAM,EACjD,GAAIqB,EACA,GAAIsU,EAAO,CACP,MAAMvR,EAAgBgU,GAAkBpY,EAAOwC,CAAI,EACnD9B,EAAG,cAAc8B,EAAK,OAAO,CACzB,GAAG4B,EACH,GAAGzB,CACN,CAAA,CAAC,CACL,MAEG8K,EAAO,QAAQlG,GAAS,CACpB,MAAMP,EAAOO,EAAM,MAAM,IACnBN,EAAKM,EAAM,IAAI,IACrBvH,EAAM,IAAI,aAAagH,EAAMC,EAAI,CAAC9C,EAAMgC,IAAQ,CAC5C,MAAM4W,EAAc,KAAK,IAAI5W,EAAKa,CAAI,EAChCgW,EAAY,KAAK,IAAI7W,EAAMhC,EAAK,SAAU8C,CAAE,EAC9B9C,EAAK,MAAM,KAAKqB,GAAQA,EAAK,OAAShD,CAAI,EAK1D2B,EAAK,MAAM,QAAQqB,GAAQ,CACnBhD,IAASgD,EAAK,MACd9E,EAAG,QAAQqc,EAAaC,EAAWxa,EAAK,OAAO,CAC3C,GAAGgD,EAAK,MACR,GAAG7C,CACN,CAAA,CAAC,CAElC,CAAyB,EAGDjC,EAAG,QAAQqc,EAAaC,EAAWxa,EAAK,OAAOG,CAAU,CAAC,CAElF,CAAiB,CACjB,CAAa,EAGT,OAAO0Z,GAAWrc,EAAOU,EAAI8B,CAAI,CACrC,EAEMya,GAAU,CAAC5Z,EAAKC,IAAU,CAAC,CAAE,GAAA5C,CAAE,KACjCA,EAAG,QAAQ2C,EAAKC,CAAK,EACd,IAGL4Z,GAAU,CAAC/N,EAAYxM,EAAa,CAAA,IAAO,CAAC,CAAE,MAAA3C,EAAO,SAAAqB,EAAU,MAAAD,KAAY,CAC7E,MAAMoB,EAAOK,EAAYsM,EAAYnP,EAAM,MAAM,EAEjD,OAAKwC,EAAK,YAIFpB,EAAO,EAEV,QAAQ,CAAC,CAAE,SAAAoG,KACQ2V,EAAAA,aAAa3a,EAAMG,CAAU,EAAE3C,CAAK,EAE7C,GAEJwH,EAAS,YACnB,EACI,QAAQ,CAAC,CAAE,MAAO4V,KACZD,EAAAA,aAAa3a,EAAMG,CAAU,EAAEya,EAAc/b,CAAQ,CAC/D,EACI,OAfD,QAAQ,KAAK,sEAAsE,EAC5E,GAef,EAEMgc,GAAmBtM,GAAY,CAAC,CAAE,GAAArQ,EAAI,SAAAW,CAAQ,IAAO,CACvD,GAAIA,EAAU,CACV,KAAM,CAAE,IAAAlB,CAAK,EAAGO,EACVsG,EAAO2J,EAAOI,EAAU,EAAG5Q,EAAI,QAAQ,IAAI,EAC3CD,EAAY0b,EAAa,cAAC,OAAOzb,EAAK6G,CAAI,EAChDtG,EAAG,aAAaR,CAAS,CAC5B,CACD,MAAO,EACX,EAEMod,GAAmBvM,GAAY,CAAC,CAAE,GAAArQ,EAAI,SAAAW,CAAQ,IAAO,CACvD,GAAIA,EAAU,CACV,KAAM,CAAE,IAAAlB,CAAK,EAAGO,EACV,CAAE,KAAAsG,EAAM,GAAAC,CAAI,EAAG,OAAO8J,GAAa,SAAW,CAAE,KAAMA,EAAU,GAAIA,CAAQ,EAAKA,EACjFI,EAAStC,EAAa,cAAC,QAAQ1O,CAAG,EAAE,KACpCiR,EAASvC,EAAa,cAAC,MAAM1O,CAAG,EAAE,GAClCqI,EAAemI,EAAO3J,EAAMmK,EAAQC,CAAM,EAC1C0K,EAAcnL,EAAO1J,EAAIkK,EAAQC,CAAM,EACvClR,EAAY2O,EAAAA,cAAc,OAAO1O,EAAKqI,EAAcsT,CAAW,EACrEpb,EAAG,aAAaR,CAAS,CAC5B,CACD,MAAO,EACX,EAEMqd,GAAepO,GAAc,CAAC,CAAE,MAAAnP,EAAO,SAAAqB,CAAQ,IAAO,CACxD,MAAMmB,EAAOK,EAAYsM,EAAYnP,EAAM,MAAM,EACjD,OAAOwd,EAAc,aAAChb,CAAI,EAAExC,EAAOqB,CAAQ,CAC/C,EAEA,SAASoc,GAAYzd,EAAO0d,EAAiB,CACzC,MAAMrY,EAAQrF,EAAM,aAAgBA,EAAM,UAAU,IAAI,cAAgBA,EAAM,UAAU,MAAM,MAAO,EACrG,GAAIqF,EAAO,CACP,MAAMsY,EAAgBtY,EAAM,OAAOG,GAAQkY,GAAoB,KAAqC,OAASA,EAAgB,SAASlY,EAAK,KAAK,IAAI,CAAC,EACrJxF,EAAM,GAAG,YAAY2d,CAAa,CACrC,CACL,CACA,MAAMC,GAAa,CAAC,CAAE,UAAAC,EAAY,IAAS,CAAA,IAAO,CAAC,CAAE,GAAAnd,EAAI,MAAAV,EAAO,SAAAqB,EAAU,OAAAb,CAAM,IAAQ,CACpF,KAAM,CAAE,UAAAN,EAAW,IAAAC,CAAK,EAAGO,EACrB,CAAE,MAAAqF,EAAO,IAAA+H,CAAK,EAAG5N,EACjBiC,EAAsB3B,EAAO,iBAAiB,WAC9C6D,EAAgBuW,GAAsBzY,EAAqB4D,EAAM,KAAI,EAAG,KAAK,KAAMA,EAAM,KAAM,EAAC,KAAK,EAC3G,GAAI7F,aAAqB0b,EAAa,eAAI1b,EAAU,KAAK,QACrD,MAAI,CAAC6F,EAAM,cAAgB,CAAC+X,EAAQ,SAAC3d,EAAK4F,EAAM,GAAG,EACxC,IAEP1E,IACIwc,GACAJ,GAAYzd,EAAOQ,EAAO,iBAAiB,eAAe,EAE9DE,EAAG,MAAMqF,EAAM,GAAG,EAAE,eAAc,GAE/B,IAEX,GAAI,CAACA,EAAM,OAAO,QACd,MAAO,GAEX,MAAMgY,EAAQjQ,EAAI,eAAiBA,EAAI,OAAO,QAAQ,KAChDkQ,EAAQjY,EAAM,QAAU,EACxB,OACA2S,GAAe3S,EAAM,KAAK,EAAE,EAAE,eAAeA,EAAM,WAAW,EAAE,CAAC,CAAC,EACxE,IAAIkY,EAAQF,GAASC,EACf,CACE,CACI,KAAMA,EACN,MAAO3Z,CACV,CACJ,EACC,OACFoD,EAAMqW,EAAQ,SAACpd,EAAG,IAAKA,EAAG,QAAQ,IAAIqF,EAAM,GAAG,EAAG,EAAGkY,CAAK,EAc9D,GAbI,CAACA,GACE,CAACxW,GACDqW,EAAQ,SAACpd,EAAG,IAAKA,EAAG,QAAQ,IAAIqF,EAAM,GAAG,EAAG,EAAGiY,EAAQ,CAAC,CAAE,KAAMA,CAAO,CAAA,EAAI,MAAS,IACvFvW,EAAM,GACNwW,EAAQD,EACF,CACE,CACI,KAAMA,EACN,MAAO3Z,CACV,CACJ,EACC,QAENhD,EAAU,CACV,GAAIoG,IACIvH,aAAqB2O,EAAAA,eACrBnO,EAAG,gBAAe,EAEtBA,EAAG,MAAMA,EAAG,QAAQ,IAAIqF,EAAM,GAAG,EAAG,EAAGkY,CAAK,EACxCD,GAAS,CAACD,GAAS,CAAChY,EAAM,cAAgBA,EAAM,OAAO,OAASiY,GAAO,CACvE,MAAMxN,EAAQ9P,EAAG,QAAQ,IAAIqF,EAAM,OAAM,CAAE,EACrCmY,EAASxd,EAAG,IAAI,QAAQ8P,CAAK,EAC/BzK,EAAM,KAAK,EAAE,EAAE,eAAemY,EAAO,MAAK,EAAIA,EAAO,MAAO,EAAG,EAAGF,CAAK,GACvEtd,EAAG,cAAcA,EAAG,QAAQ,IAAIqF,EAAM,OAAM,CAAE,EAAGiY,CAAK,CAE7D,CAEDH,GACAJ,GAAYzd,EAAOQ,EAAO,iBAAiB,eAAe,EAE9DE,EAAG,eAAc,CACpB,CACD,OAAO+G,CACX,EAEM0W,GAAgB,CAAChP,EAAYiP,EAAgB,CAAE,IAAK,CAAC,CAAE,GAAA1d,EAAI,MAAAV,EAAO,SAAAqB,EAAU,OAAAb,KAAc,CAC5F,IAAIiE,EACJ,MAAMjC,EAAOK,EAAYsM,EAAYnP,EAAM,MAAM,EAC3C,CAAE,MAAA+F,EAAO,IAAA+H,GAAQ9N,EAAM,UAGvBmE,EAAOnE,EAAM,UAAU,KAC7B,GAAKmE,GAAQA,EAAK,SAAY4B,EAAM,MAAQ,GAAK,CAACA,EAAM,WAAW+H,CAAG,EAClE,MAAO,GAEX,MAAMuQ,EAActY,EAAM,KAAK,EAAE,EACjC,GAAIsY,EAAY,OAAS7b,EACrB,MAAO,GAEX,MAAML,EAAsB3B,EAAO,iBAAiB,WACpD,GAAIuF,EAAM,OAAO,QAAQ,OAAS,GAAKA,EAAM,KAAK,EAAE,EAAE,aAAeA,EAAM,WAAW,EAAE,EAAG,CAIvF,GAAIA,EAAM,QAAU,GACbA,EAAM,KAAK,EAAE,EAAE,OAASvD,GACxBuD,EAAM,MAAM,EAAE,IAAMA,EAAM,KAAK,EAAE,EAAE,WAAa,EACnD,MAAO,GAEX,GAAI1E,EAAU,CACV,IAAIid,EAAOlM,EAAQ,SAAC,MAEpB,MAAMmM,EAAcxY,EAAM,MAAM,EAAE,EAAI,EAAIA,EAAM,MAAM,EAAE,EAAI,EAAI,EAGhE,QAASyY,EAAIzY,EAAM,MAAQwY,EAAaC,GAAKzY,EAAM,MAAQ,EAAGyY,GAAK,EAC/DF,EAAOlM,EAAAA,SAAS,KAAKrM,EAAM,KAAKyY,CAAC,EAAE,KAAKF,CAAI,CAAC,EAGjD,MAAMG,EAAa1Y,EAAM,WAAW,EAAE,EAAIA,EAAM,KAAK,EAAE,EAAE,WAAa,EAAIA,EAAM,WAAW,EAAE,EAAIA,EAAM,KAAK,EAAE,EAAE,WAAa,EAAI,EAE3H2Y,EAAwB,CAC1B,GAAG9D,GAAsBzY,EAAqB4D,EAAM,KAAM,EAAC,KAAK,KAAMA,EAAM,KAAM,EAAC,KAAK,EACxF,GAAGqY,CACnB,EACkBO,IAAala,EAAKjC,EAAK,aAAa,eAAiB,MAAQiC,IAAO,OAAS,OAASA,EAAG,cAAcia,CAAqB,IAAM,OACxIJ,EAAOA,EAAK,OAAOlM,EAAAA,SAAS,KAAK5P,EAAK,cAAc,KAAMmc,CAAQ,GAAK,MAAS,CAAC,EACjF,MAAMhW,EAAQ5C,EAAM,OAAOA,EAAM,OAASwY,EAAc,EAAE,EAC1D7d,EAAG,QAAQiI,EAAO5C,EAAM,MAAM,CAAC0Y,CAAU,EAAG,IAAIG,EAAAA,MAAMN,EAAM,EAAIC,EAAa,CAAC,CAAC,EAC/E,IAAIM,EAAM,GACVne,EAAG,IAAI,aAAaiI,EAAOjI,EAAG,IAAI,QAAQ,KAAM,CAACoe,EAAG3Y,IAAQ,CACxD,GAAI0Y,EAAM,GACN,MAAO,GAEPC,EAAE,aAAeA,EAAE,QAAQ,OAAS,IACpCD,EAAM1Y,EAAM,EAEhC,CAAa,EACG0Y,EAAM,IACNne,EAAG,aAAamO,EAAa,cAAC,KAAKnO,EAAG,IAAI,QAAQme,CAAG,CAAC,CAAC,EAE3Dne,EAAG,eAAc,CACpB,CACD,MAAO,EACV,CACD,MAAMie,EAAW7Q,EAAI,MAAQ/H,EAAM,IAAG,EAAKsY,EAAY,eAAe,CAAC,EAAE,YAAc,KACjFU,EAAoB,CACtB,GAAGnE,GAAsBzY,EAAqBkc,EAAY,KAAK,KAAMA,EAAY,KAAK,EACtF,GAAGD,CACX,EACUM,EAAwB,CAC1B,GAAG9D,GAAsBzY,EAAqB4D,EAAM,KAAM,EAAC,KAAK,KAAMA,EAAM,KAAM,EAAC,KAAK,EACxF,GAAGqY,CACX,EACI1d,EAAG,OAAOqF,EAAM,IAAK+H,EAAI,GAAG,EAC5B,MAAMmQ,EAAQU,EACR,CACE,CAAE,KAAAnc,EAAM,MAAOuc,CAAmB,EAClC,CAAE,KAAMJ,EAAU,MAAOD,CAAuB,CACnD,EACC,CAAC,CAAE,KAAAlc,EAAM,MAAOuc,CAAmB,CAAA,EACzC,GAAI,CAACjB,EAAQ,SAACpd,EAAG,IAAKqF,EAAM,IAAK,CAAC,EAC9B,MAAO,GAEX,GAAI1E,EAAU,CACV,KAAM,CAAE,UAAAnB,EAAW,YAAAE,CAAa,EAAGJ,EAC7B,CAAE,gBAAA0d,CAAe,EAAKld,EAAO,iBAC7B6E,EAAQjF,GAAgBF,EAAU,IAAI,cAAgBA,EAAU,MAAM,MAAK,EAEjF,GADAQ,EAAG,MAAMqF,EAAM,IAAK,EAAGkY,CAAK,EAAE,iBAC1B,CAAC5Y,GAAS,CAAChE,EACX,MAAO,GAEX,MAAMsc,EAAgBtY,EAAM,OAAOG,GAAQkY,EAAgB,SAASlY,EAAK,KAAK,IAAI,CAAC,EACnF9E,EAAG,YAAYid,CAAa,CAC/B,CACD,MAAO,EACX,EAEMqB,GAAoB,CAACte,EAAIue,IAAa,CACxC,MAAMC,EAAOlG,GAAe7U,GAAQA,EAAK,OAAS8a,CAAQ,EAAEve,EAAG,SAAS,EACxE,GAAI,CAACwe,EACD,MAAO,GAEX,MAAMC,EAASze,EAAG,IAAI,QAAQ,KAAK,IAAI,EAAGwe,EAAK,IAAM,CAAC,CAAC,EAAE,OAAOA,EAAK,KAAK,EAC1E,GAAIC,IAAW,OACX,MAAO,GAEX,MAAMC,EAAa1e,EAAG,IAAI,OAAOye,CAAM,EAEvC,OADyBD,EAAK,KAAK,QAAUE,GAAe,KAAgC,OAASA,EAAW,OAASC,EAAO,QAAC3e,EAAG,IAAKwe,EAAK,GAAG,GAIjJxe,EAAG,KAAKwe,EAAK,GAAG,EACT,EACX,EACMI,GAAmB,CAAC5e,EAAIue,IAAa,CACvC,MAAMC,EAAOlG,GAAe7U,GAAQA,EAAK,OAAS8a,CAAQ,EAAEve,EAAG,SAAS,EACxE,GAAI,CAACwe,EACD,MAAO,GAEX,MAAMK,EAAQ7e,EAAG,IAAI,QAAQwe,EAAK,KAAK,EAAE,MAAMA,EAAK,KAAK,EACzD,GAAIK,IAAU,OACV,MAAO,GAEX,MAAMC,EAAY9e,EAAG,IAAI,OAAO6e,CAAK,EAErC,OADwBL,EAAK,KAAK,QAAUM,GAAc,KAA+B,OAASA,EAAU,OAASH,EAAO,QAAC3e,EAAG,IAAK6e,CAAK,GAI1I7e,EAAG,KAAK6e,CAAK,EACN,EACX,EACME,GAAa,CAACC,EAAgBC,EAAgB9B,EAAWlb,EAAa,CAAA,IAAO,CAAC,CAAE,OAAAnC,EAAQ,GAAAE,EAAI,MAAAV,EAAO,SAAAqB,EAAU,MAAAD,EAAO,SAAAoG,EAAU,IAAAC,KAAW,CAC3I,KAAM,CAAE,WAAA3F,EAAY,gBAAA4b,GAAoBld,EAAO,iBACzCye,EAAWpc,EAAY6c,EAAgB1f,EAAM,MAAM,EACnD4f,EAAW/c,EAAY8c,EAAgB3f,EAAM,MAAM,EACnD,CAAE,UAAAE,EAAW,YAAAE,CAAa,EAAGJ,EAC7B,CAAE,MAAA+F,EAAO,IAAA+H,CAAK,EAAG5N,EACjBqH,EAAQxB,EAAM,WAAW+H,CAAG,EAC5BzI,EAAQjF,GAAgBF,EAAU,IAAI,cAAgBA,EAAU,MAAM,MAAK,EACjF,GAAI,CAACqH,EACD,MAAO,GAEX,MAAMsY,EAAa7G,GAAe7U,GAAQiX,GAAOjX,EAAK,KAAK,KAAMrC,CAAU,CAAC,EAAE5B,CAAS,EACvF,GAAIqH,EAAM,OAAS,GAAKsY,GAActY,EAAM,MAAQsY,EAAW,OAAS,EAAG,CAEvE,GAAIA,EAAW,KAAK,OAASZ,EACzB,OAAOzX,EAAS,aAAaoY,CAAQ,EAGzC,GAAIxE,GAAOyE,EAAW,KAAK,KAAK,KAAM/d,CAAU,GACzCmd,EAAS,aAAaY,EAAW,KAAK,OAAO,GAC7Cxe,EACH,OAAOD,EAAO,EACT,QAAQ,KACTV,EAAG,cAAcmf,EAAW,IAAKZ,CAAQ,EAClC,GACV,EACI,QAAQ,IAAMD,GAAkBte,EAAIue,CAAQ,CAAC,EAC7C,QAAQ,IAAMK,GAAiB5e,EAAIue,CAAQ,CAAC,EAC5C,KAEZ,CACD,MAAI,CAACpB,GAAa,CAACxY,GAAS,CAAChE,EAClBD,EAAO,EAET,QAAQ,IACaqG,EAAK,EAAC,WAAWwX,EAAUtc,CAAU,EAEhD,GAEJ6E,EAAS,YACnB,EACI,WAAWyX,EAAUtc,CAAU,EAC/B,QAAQ,IAAMqc,GAAkBte,EAAIue,CAAQ,CAAC,EAC7C,QAAQ,IAAMK,GAAiB5e,EAAIue,CAAQ,CAAC,EAC5C,MAED7d,EAAO,EAEV,QAAQ,IAAM,CACf,MAAM0e,EAAgBrY,EAAK,EAAC,WAAWwX,EAAUtc,CAAU,EACrDgb,EAAgBtY,EAAM,OAAOG,GAAQkY,EAAgB,SAASlY,EAAK,KAAK,IAAI,CAAC,EAEnF,OADA9E,EAAG,YAAYid,CAAa,EACxBmC,EACO,GAEJtY,EAAS,YACxB,CAAK,EACI,WAAWyX,EAAUtc,CAAU,EAC/B,QAAQ,IAAMqc,GAAkBte,EAAIue,CAAQ,CAAC,EAC7C,QAAQ,IAAMK,GAAiB5e,EAAIue,CAAQ,CAAC,EAC5C,KACT,EAEMc,GAAa,CAAC5Q,EAAYxM,EAAa,CAAE,EAAEoK,EAAU,CAAA,IAAO,CAAC,CAAE,MAAA/M,EAAO,SAAAwH,KAAe,CACvF,KAAM,CAAE,qBAAAwY,EAAuB,EAAO,EAAGjT,EACnCvK,EAAO6N,EAAYlB,EAAYnP,EAAM,MAAM,EAEjD,OADiB8a,GAAa9a,EAAOwC,EAAMG,CAAU,EAE1C6E,EAAS,UAAUhF,EAAM,CAAE,qBAAAwd,CAAsB,CAAA,EAErDxY,EAAS,QAAQhF,EAAMG,CAAU,CAC5C,EAEMsd,GAAa,CAAC9Q,EAAY+Q,EAAkBvd,EAAa,CAAA,IAAO,CAAC,CAAE,MAAA3C,EAAO,SAAAwH,KAAe,CAC3F,MAAMhF,EAAOK,EAAYsM,EAAYnP,EAAM,MAAM,EAC3CmgB,EAAatd,EAAYqd,EAAkBlgB,EAAM,MAAM,EAE7D,OADiB0V,EAAa1V,EAAOwC,EAAMG,CAAU,EAE1C6E,EAAS,QAAQ2Y,CAAU,EAE/B3Y,EAAS,QAAQhF,EAAMG,CAAU,CAC5C,EAEMyd,GAAa,CAACjR,EAAYxM,EAAa,CAAE,IAAK,CAAC,CAAE,MAAA3C,EAAO,SAAAwH,KAAe,CACzE,MAAMhF,EAAOK,EAAYsM,EAAYnP,EAAM,MAAM,EAEjD,OADiB0V,EAAa1V,EAAOwC,EAAMG,CAAU,EAE1C6E,EAAS,KAAKhF,CAAI,EAEtBgF,EAAS,OAAOhF,EAAMG,CAAU,CAC3C,EAEM0d,GAAgB,IAAM,CAAC,CAAE,MAAArgB,EAAO,SAAAqB,CAAQ,IAAO,CACjD,MAAMyJ,EAAU9K,EAAM,QACtB,QAASyQ,EAAI,EAAGA,EAAI3F,EAAQ,OAAQ2F,GAAK,EAAG,CACxC,MAAMtJ,EAAS2D,EAAQ2F,CAAC,EACxB,IAAI6P,EAGJ,GAAInZ,EAAO,KAAK,eAAiBmZ,EAAWnZ,EAAO,SAASnH,CAAK,GAAI,CACjE,GAAIqB,EAAU,CACV,MAAMX,EAAKV,EAAM,GACXugB,EAASD,EAAS,UACxB,QAASE,EAAID,EAAO,MAAM,OAAS,EAAGC,GAAK,EAAGA,GAAK,EAC/C9f,EAAG,KAAK6f,EAAO,MAAMC,CAAC,EAAE,OAAOD,EAAO,KAAKC,CAAC,CAAC,CAAC,EAElD,GAAIF,EAAS,KAAM,CACf,MAAMjb,EAAQ3E,EAAG,IAAI,QAAQ4f,EAAS,IAAI,EAAE,QAC5C5f,EAAG,YAAY4f,EAAS,KAAMA,EAAS,GAAItgB,EAAM,OAAO,KAAKsgB,EAAS,KAAMjb,CAAK,CAAC,CACrF,MAEG3E,EAAG,OAAO4f,EAAS,KAAMA,EAAS,EAAE,CAE3C,CACD,MAAO,EACV,CACJ,CACD,MAAO,EACX,EAEMG,GAAgB,IAAM,CAAC,CAAE,GAAA/f,EAAI,SAAAW,CAAQ,IAAO,CAC9C,KAAM,CAAE,UAAAnB,CAAW,EAAGQ,EAChB,CAAE,MAAAiV,EAAO,OAAAlI,CAAQ,EAAGvN,EAC1B,OAAIyV,GAGAtU,GACAoM,EAAO,QAAQlG,GAAS,CACpB7G,EAAG,WAAW6G,EAAM,MAAM,IAAKA,EAAM,IAAI,GAAG,CACxD,CAAS,EAEE,EACX,EAEMmZ,GAAY,CAACvR,EAAYpC,EAAU,CAAA,IAAO,CAAC,CAAE,GAAArM,EAAI,MAAAV,EAAO,SAAAqB,KAAe,CACzE,IAAIoD,EACJ,KAAM,CAAE,qBAAAub,EAAuB,EAAO,EAAGjT,EACnC,CAAE,UAAA7M,CAAW,EAAGQ,EAChB8B,EAAO6N,EAAYlB,EAAYnP,EAAM,MAAM,EAC3C,CAAE,MAAA+F,EAAO,MAAA4P,EAAO,OAAAlI,CAAM,EAAKvN,EACjC,GAAI,CAACmB,EACD,MAAO,GAEX,GAAIsU,GAASqK,EAAsB,CAC/B,GAAI,CAAE,KAAAhZ,EAAM,GAAAC,CAAI,EAAG/G,EACnB,MAAMygB,GAASlc,EAAKsB,EAAM,QAAQ,KAAKP,GAAQA,EAAK,OAAShD,CAAI,KAAO,MAAQiC,IAAO,OAAS,OAASA,EAAG,MACtG8C,EAAQyI,GAAajK,EAAOvD,EAAMme,CAAK,EACzCpZ,IACAP,EAAOO,EAAM,KACbN,EAAKM,EAAM,IAEf7G,EAAG,WAAWsG,EAAMC,EAAIzE,CAAI,CAC/B,MAEGiL,EAAO,QAAQlG,GAAS,CACpB7G,EAAG,WAAW6G,EAAM,MAAM,IAAKA,EAAM,IAAI,IAAK/E,CAAI,CAC9D,CAAS,EAEL,OAAA9B,EAAG,iBAAiB8B,CAAI,EACjB,EACX,EAEMoe,GAAmB,CAACzR,EAAYxM,EAAa,CAAA,IAAO,CAAC,CAAE,GAAAjC,EAAI,MAAAV,EAAO,SAAAqB,KAAe,CACnF,IAAI4V,EAAW,KACXC,EAAW,KACf,MAAMC,EAAaT,GAAwB,OAAOvH,GAAe,SAAWA,EAAaA,EAAW,KAAMnP,EAAM,MAAM,EACtH,OAAKmX,GAGDA,IAAe,SACfF,EAAWpU,EAAYsM,EAAYnP,EAAM,MAAM,GAE/CmX,IAAe,SACfD,EAAW7G,EAAYlB,EAAYnP,EAAM,MAAM,GAE/CqB,GACAX,EAAG,UAAU,OAAO,QAAQ6G,GAAS,CACjC,MAAMP,EAAOO,EAAM,MAAM,IACnBN,EAAKM,EAAM,IAAI,IACrBvH,EAAM,IAAI,aAAagH,EAAMC,EAAI,CAAC9C,EAAMgC,IAAQ,CACxC8Q,GAAYA,IAAa9S,EAAK,MAC9BzD,EAAG,cAAcyF,EAAK,OAAW,CAC7B,GAAGhC,EAAK,MACR,GAAGxB,CAC3B,CAAqB,EAEDuU,GAAY/S,EAAK,MAAM,QACvBA,EAAK,MAAM,QAAQqB,GAAQ,CACvB,GAAI0R,IAAa1R,EAAK,KAAM,CACxB,MAAMuX,EAAc,KAAK,IAAI5W,EAAKa,CAAI,EAChCgW,EAAY,KAAK,IAAI7W,EAAMhC,EAAK,SAAU8C,CAAE,EAClDvG,EAAG,QAAQqc,EAAaC,EAAW9F,EAAS,OAAO,CAC/C,GAAG1R,EAAK,MACR,GAAG7C,CACN,CAAA,CAAC,CACL,CACzB,CAAqB,CAErB,CAAa,CACb,CAAS,EAEE,IAlCI,EAmCf,EAEMke,GAAS,CAAC1R,EAAYxM,EAAa,CAAE,IAAK,CAAC,CAAE,MAAA3C,EAAO,SAAAqB,KAAe,CACrE,MAAMmB,EAAOK,EAAYsM,EAAYnP,EAAM,MAAM,EACjD,OAAO8gB,EAAAA,OAASte,EAAMG,CAAU,EAAE3C,EAAOqB,CAAQ,CACrD,EAEM0f,GAAa,CAAC5R,EAAYxM,EAAa,CAAE,IAAK,CAAC,CAAE,MAAA3C,EAAO,SAAAqB,KAAe,CACzE,MAAMmB,EAAOK,EAAYsM,EAAYnP,EAAM,MAAM,EACjD,OAAOghB,EAAAA,WAAaxe,EAAMG,CAAU,EAAE3C,EAAOqB,CAAQ,CACzD,EAEA,IAAImG,GAAwB,OAAO,OAAO,CACxC,UAAW,KACX,KAAMkG,GACN,aAAcC,GACd,WAAYE,GACZ,QAASjN,GACT,oBAAqB0N,GACrB,IAAKE,GACL,kBAAmBM,GACnB,WAAYI,GACZ,YAAaE,GACb,gBAAiBC,GACjB,MAAOE,GACP,SAAUC,GACV,gBAAiBc,GACjB,MAAOE,GACP,MAAOc,GACP,QAASG,GACT,cAAeC,GACf,gBAAiB+B,GACjB,aAAcS,GACd,SAAUF,GACV,YAAaI,GACb,iBAAkBE,GAClB,gBAAiBG,GACjB,sBAAuBC,GACvB,qBAAsBE,GACtB,OAAQd,GACR,iBAAkBwB,GAClB,KAAMY,GACN,eAAgBE,GAChB,aAAcE,GACd,cAAeE,GACf,gBAAiBQ,GACjB,eAAgBI,GAChB,UAAWC,GACX,mBAAoBC,GACpB,kBAAmBE,GACnB,iBAAkBE,GAClB,mBAAoBE,GACpB,qBAAsBE,GACtB,WAAYI,GACZ,QAAS4E,GACT,QAASG,GACT,QAASC,GACT,iBAAkBG,GAClB,iBAAkBC,GAClB,aAAcC,GACd,WAAYK,GACZ,cAAeO,GACf,WAAYsB,GACZ,WAAYM,GACZ,WAAYE,GACZ,WAAYG,GACZ,cAAeC,GACf,cAAeI,GACf,UAAWC,GACX,iBAAkBE,GAClB,OAAQC,GACR,WAAYE,EACd,CAAC,EAED,MAAME,GAAWnU,EAAU,OAAO,CAC9B,KAAM,WACN,aAAc,CACV,MAAO,CACH,GAAGtF,EACf,CACK,CACL,CAAC,EAEK0Z,GAAWpU,EAAU,OAAO,CAC9B,KAAM,WACN,uBAAwB,CACpB,MAAO,CACH,IAAInF,SAAO,CACP,IAAK,IAAI6F,EAAS,UAAC,UAAU,EAC7B,MAAO,CACH,SAAU,IAAM,KAAK,OAAO,QAAQ,QACvC,CACjB,CAAa,CACb,CACK,CACL,CAAC,EAEK2T,GAAcrU,EAAU,OAAO,CACjC,KAAM,cACN,uBAAwB,CACpB,KAAM,CAAE,OAAAtM,CAAQ,EAAG,KACnB,MAAO,CACH,IAAImH,SAAO,CACP,IAAK,IAAI6F,EAAS,UAAC,aAAa,EAChC,MAAO,CACH,gBAAiB,CACb,MAAO,CAAC/M,EAAMc,IAAU,CACpBf,EAAO,UAAY,GACnB,MAAMP,EAAcO,EAAO,MAAM,GAC5B,QAAQ,QAAS,CAAE,MAAAe,EAAO,EAC1B,QAAQ,eAAgB,EAAK,EAClC,OAAAd,EAAK,SAASR,CAAW,EAClB,EACV,EACD,KAAM,CAACQ,EAAMc,IAAU,CACnBf,EAAO,UAAY,GACnB,MAAMP,EAAcO,EAAO,MAAM,GAC5B,QAAQ,OAAQ,CAAE,MAAAe,EAAO,EACzB,QAAQ,eAAgB,EAAK,EAClC,OAAAd,EAAK,SAASR,CAAW,EAClB,EACV,CACJ,CACJ,CACjB,CAAa,CACb,CACK,CACL,CAAC,EAEKmhB,GAAStU,EAAU,OAAO,CAC5B,KAAM,SACN,sBAAuB,CACnB,MAAMuU,EAAkB,IAAM,KAAK,OAAO,SAAS,MAAM,CAAC,CAAE,SAAA7Z,KAAe,CACvE,IAAMA,EAAS,cAAe,EAE9B,IAAMA,EAAS,QAAQ,CAAC,CAAE,GAAA9G,CAAE,IAAO,CAC/B,KAAM,CAAE,UAAAR,EAAW,IAAAC,CAAK,EAAGO,EACrB,CAAE,MAAAiV,EAAO,QAAA2L,CAAS,EAAGphB,EACrB,CAAE,IAAAiG,EAAK,OAAAC,CAAQ,EAAGkb,EAClBC,EAAaD,EAAQ,OAAO,aAAenb,EAAM,EAAIzF,EAAG,IAAI,QAAQyF,EAAM,CAAC,EAAImb,EAC/EE,EAAoBD,EAAW,OAAO,KAAK,KAAK,UAChDE,EAAYH,EAAQ,IAAMA,EAAQ,aAClCI,EAAaF,GAAqBD,EAAW,OAAO,aAAe,EACnEE,IAAcH,EAAQ,IACtBrQ,EAAAA,UAAU,QAAQ9Q,CAAG,EAAE,OAASgG,EACtC,MAAI,CAACwP,GACE,CAACvP,EAAO,KAAK,aACbA,EAAO,YAAY,QACnB,CAACsb,GACAA,GAAaJ,EAAQ,OAAO,KAAK,OAAS,YAEvC,GAEJ9Z,EAAS,YAChC,CAAa,EACD,IAAMA,EAAS,gBAAiB,EAChC,IAAMA,EAAS,aAAc,EAC7B,IAAMA,EAAS,mBAAoB,CAC/C,CAAS,EACKma,EAAe,IAAM,KAAK,OAAO,SAAS,MAAM,CAAC,CAAE,SAAAna,KAAe,CACpE,IAAMA,EAAS,gBAAiB,EAChC,IAAMA,EAAS,kBAAmB,EAClC,IAAMA,EAAS,YAAa,EAC5B,IAAMA,EAAS,kBAAmB,CAC9C,CAAS,EAOKoa,EAAa,CACf,MAPgB,IAAM,KAAK,OAAO,SAAS,MAAM,CAAC,CAAE,SAAApa,KAAe,CACnE,IAAMA,EAAS,cAAe,EAC9B,IAAMA,EAAS,oBAAqB,EACpC,IAAMA,EAAS,eAAgB,EAC/B,IAAMA,EAAS,WAAY,CACvC,CAAS,EAGG,YAAa,IAAM,KAAK,OAAO,SAAS,SAAU,EAClD,UAAW6Z,EACX,gBAAiBA,EACjB,kBAAmBA,EACnB,OAAQM,EACR,aAAcA,EACd,QAAS,IAAM,KAAK,OAAO,SAAS,UAAW,CAC3D,EACcE,EAAW,CACb,GAAGD,CACf,EACcE,EAAY,CACd,GAAGF,EACH,SAAUP,EACV,gBAAiBA,EACjB,SAAUM,EACV,qBAAsBA,EACtB,aAAcA,EACd,QAASA,EACT,SAAU,IAAM,KAAK,OAAO,SAAS,qBAAsB,EAC3D,SAAU,IAAM,KAAK,OAAO,SAAS,mBAAoB,CACrE,EACQ,OAAItQ,GAAK,GAAMyD,KACJgN,EAEJD,CACV,EACD,uBAAwB,CACpB,MAAO,CAMH,IAAIla,SAAO,CACP,IAAK,IAAI6F,EAAS,UAAC,eAAe,EAClC,kBAAmB,CAAC/D,EAAcC,EAAUqY,IAAa,CAGrD,GAAI,EAFetY,EAAa,KAAKxJ,GAAeA,EAAY,UAAU,GACnE,CAACyJ,EAAS,IAAI,GAAGqY,EAAS,GAAG,GAEhC,OAEJ,KAAM,CAAE,MAAApM,EAAO,KAAA3O,EAAM,GAAAC,CAAE,EAAKyC,EAAS,UAC/BsY,EAAU/Q,EAAAA,UAAU,QAAQvH,EAAS,GAAG,EAAE,KAC1CuY,EAAShR,EAAAA,UAAU,MAAMvH,EAAS,GAAG,EAAE,GAM7C,GAJIiM,GAAS,EADU3O,IAASgb,GAAW/a,IAAOgb,IAK9C,EADYF,EAAS,IAAI,YAAY,EAAGA,EAAS,IAAI,QAAQ,KAAM,IAAK,GAAG,EAAE,SAAW,GAExF,OAEJ,MAAMrhB,EAAKqhB,EAAS,GACd/hB,EAAQF,GAAqB,CAC/B,MAAOiiB,EACP,YAAarhB,CACrC,CAAqB,EACK,CAAE,SAAA8G,GAAa,IAAInH,GAAe,CACpC,OAAQ,KAAK,OACb,MAAAL,CACxB,CAAqB,EAED,GADAwH,EAAS,WAAU,EACf,EAAC9G,EAAG,MAAM,OAGd,OAAOA,CACV,CACjB,CAAa,CACb,CACK,CACL,CAAC,EAEKwhB,GAAWpV,EAAU,OAAO,CAC9B,KAAM,WACN,uBAAwB,CACpB,MAAO,CACH,IAAInF,SAAO,CACP,IAAK,IAAI6F,EAAS,UAAC,UAAU,EAC7B,MAAO,CACH,WAAY,IAAO,KAAK,OAAO,WAAa,CAAE,SAAU,GAAK,EAAG,EACnE,CACjB,CAAa,CACb,CACK,CACL,CAAC,EAYD,MAAM2U,CAAQ,CACV,IAAI,MAAO,CACP,OAAO,KAAK,KAAK,KAAK,IACzB,CACD,YAAYhc,EAAK3F,EAAQ4hB,EAAU,GAAOje,EAAO,KAAM,CACnD,KAAK,YAAc,KACnB,KAAK,YAAc,KACnB,KAAK,QAAUie,EACf,KAAK,YAAcjc,EACnB,KAAK,OAAS3F,EACd,KAAK,YAAc2D,CACtB,CACD,IAAI,MAAO,CACP,OAAO,KAAK,aAAe,KAAK,YAAY,KAAI,CACnD,CACD,IAAI,SAAU,CACV,OAAO,KAAK,OAAO,KAAK,SAAS,KAAK,GAAG,EAAE,IAC9C,CACD,IAAI,OAAQ,CACR,IAAIM,EACJ,OAAQA,EAAK,KAAK,eAAiB,MAAQA,IAAO,OAASA,EAAK,KAAK,YAAY,KACpF,CACD,IAAI,KAAM,CACN,OAAO,KAAK,YAAY,GAC3B,CACD,IAAI,SAAU,CACV,OAAO,KAAK,KAAK,OACpB,CACD,IAAI,QAAQwN,EAAS,CACjB,IAAIjL,EAAO,KAAK,KACZC,EAAK,KAAK,GACd,GAAI,KAAK,QAAS,CACd,GAAI,KAAK,QAAQ,OAAS,EAAG,CACzB,QAAQ,MAAM,kEAAkE,KAAK,IAAI,OAAO,KAAK,GAAG,EAAE,EAC1G,MACH,CACDD,EAAO,KAAK,KAAO,EACnBC,EAAK,KAAK,GAAK,CAClB,CACD,KAAK,OAAO,SAAS,gBAAgB,CAAE,KAAAD,EAAM,GAAAC,CAAE,EAAIgL,CAAO,CAC7D,CACD,IAAI,YAAa,CACb,OAAO,KAAK,KAAK,KACpB,CACD,IAAI,aAAc,CACd,OAAO,KAAK,KAAK,WACpB,CACD,IAAI,MAAO,CACP,OAAO,KAAK,KAAK,QACpB,CACD,IAAI,MAAO,CACP,OAAI,KAAK,QACE,KAAK,IAET,KAAK,YAAY,MAAM,KAAK,YAAY,KAAK,CACvD,CACD,IAAI,OAAQ,CACR,MAAO,CACH,KAAM,KAAK,KACX,GAAI,KAAK,EACrB,CACK,CACD,IAAI,IAAK,CACL,OAAI,KAAK,QACE,KAAK,IAAM,KAAK,KAEpB,KAAK,YAAY,IAAI,KAAK,YAAY,KAAK,GAAK,KAAK,KAAK,OAAS,EAAI,EACjF,CACD,IAAI,QAAS,CACT,GAAI,KAAK,QAAU,EACf,OAAO,KAEX,MAAMwP,EAAY,KAAK,YAAY,MAAM,KAAK,YAAY,MAAQ,CAAC,EAC7DzS,EAAO,KAAK,YAAY,IAAI,QAAQyS,CAAS,EACnD,OAAO,IAAIU,EAAQnT,EAAM,KAAK,MAAM,CACvC,CACD,IAAI,QAAS,CACT,IAAIA,EAAO,KAAK,YAAY,IAAI,QAAQ,KAAK,MAAQ,KAAK,QAAU,EAAI,EAAE,EAC1E,OAAIA,EAAK,QAAU,KAAK,QACpBA,EAAO,KAAK,YAAY,IAAI,QAAQ,KAAK,KAAO,CAAC,GAE9C,IAAImT,EAAQnT,EAAM,KAAK,MAAM,CACvC,CACD,IAAI,OAAQ,CACR,IAAIA,EAAO,KAAK,YAAY,IAAI,QAAQ,KAAK,IAAM,KAAK,QAAU,EAAI,EAAE,EACxE,OAAIA,EAAK,QAAU,KAAK,QACpBA,EAAO,KAAK,YAAY,IAAI,QAAQ,KAAK,GAAK,CAAC,GAE5C,IAAImT,EAAQnT,EAAM,KAAK,MAAM,CACvC,CACD,IAAI,UAAW,CACX,MAAM4C,EAAW,CAAA,EACjB,YAAK,KAAK,QAAQ,QAAQ,CAACzN,EAAMke,IAAW,CACxC,MAAMD,EAAUje,EAAK,SAAW,CAACA,EAAK,YAChCuK,EAAY,KAAK,IAAM2T,EAAS,EAChCrT,EAAO,KAAK,YAAY,IAAI,QAAQN,CAAS,EACnD,GAAI,CAAC0T,GAAWpT,EAAK,OAAS,KAAK,MAC/B,OAEJ,MAAMsT,EAAe,IAAIH,EAAQnT,EAAM,KAAK,OAAQoT,EAASA,EAAUje,EAAO,IAAI,EAC9Eie,IACAE,EAAa,YAAc,KAAK,MAAQ,GAE5C1Q,EAAS,KAAK,IAAIuQ,EAAQnT,EAAM,KAAK,OAAQoT,EAASA,EAAUje,EAAO,IAAI,CAAC,CACxF,CAAS,EACMyN,CACV,CACD,IAAI,YAAa,CACb,OAAO,KAAK,SAAS,CAAC,GAAK,IAC9B,CACD,IAAI,WAAY,CACZ,MAAMA,EAAW,KAAK,SACtB,OAAOA,EAASA,EAAS,OAAS,CAAC,GAAK,IAC3C,CACD,QAAQ2Q,EAAU5f,EAAa,GAAI,CAC/B,IAAIwB,EAAO,KACP4K,EAAc,KAAK,OACvB,KAAOA,GAAe,CAAC5K,GAAM,CACzB,GAAI4K,EAAY,KAAK,KAAK,OAASwT,EAC/B,GAAI,OAAO,KAAK5f,CAAU,EAAE,OAAS,EAAG,CACpC,MAAM6f,EAAiBzT,EAAY,KAAK,MAClC0T,EAAW,OAAO,KAAK9f,CAAU,EACvC,QAAS0D,EAAQ,EAAGA,EAAQoc,EAAS,OAAQpc,GAAS,EAAG,CACrD,MAAMhD,EAAMof,EAASpc,CAAK,EAC1B,GAAImc,EAAenf,CAAG,IAAMV,EAAWU,CAAG,EACtC,KAEP,CACJ,MAEGc,EAAO4K,EAGfA,EAAcA,EAAY,MAC7B,CACD,OAAO5K,CACV,CACD,cAAcoe,EAAU5f,EAAa,GAAI,CACrC,OAAO,KAAK,iBAAiB4f,EAAU5f,EAAY,EAAI,EAAE,CAAC,GAAK,IAClE,CACD,iBAAiB4f,EAAU5f,EAAa,CAAA,EAAI+f,EAAgB,GAAO,CAC/D,IAAI9d,EAAQ,CAAA,EACZ,GAAI,CAAC,KAAK,UAAY,KAAK,SAAS,SAAW,EAC3C,OAAOA,EAEX,MAAM6d,EAAW,OAAO,KAAK9f,CAAU,EAKvC,YAAK,SAAS,QAAQggB,GAAY,CAE1BD,GAAiB9d,EAAM,OAAS,IAGhC+d,EAAS,KAAK,KAAK,OAASJ,GACGE,EAAS,MAAMpf,GAAOV,EAAWU,CAAG,IAAMsf,EAAS,KAAK,MAAMtf,CAAG,CAAC,GAE7FuB,EAAM,KAAK+d,CAAQ,EAIvB,EAAAD,GAAiB9d,EAAM,OAAS,KAGpCA,EAAQA,EAAM,OAAO+d,EAAS,iBAAiBJ,EAAU5f,EAAY+f,CAAa,CAAC,GAC/F,CAAS,EACM9d,CACV,CACD,aAAajC,EAAY,CACrB,MAAMigB,EAAe,KAAK,OAAO,MAAM,UACvC,KAAK,OAAO,MAAO,EAAC,iBAAiB,KAAK,IAAI,EAAE,iBAAiB,KAAK,KAAK,KAAK,KAAMjgB,CAAU,EAAE,iBAAiBigB,EAAa,IAAI,EAC/H,KACR,CACL,CAEA,MAAMC,GAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GA4Ed,SAASC,GAAeD,EAAOE,EAAOC,EAAQ,CAC1C,MAAMC,EAAiB,SAAS,cAAc,0BAAuD,EACrG,GAAIA,IAAmB,KACnB,OAAOA,EAEX,MAAMC,EAAY,SAAS,cAAc,OAAO,EAChD,OAAIH,GACAG,EAAU,aAAa,QAASH,CAAK,EAEzCG,EAAU,aAAa,oBAAkD,EAAE,EAC3EA,EAAU,UAAYL,EACtB,SAAS,qBAAqB,MAAM,EAAE,CAAC,EAAE,YAAYK,CAAS,EACvDA,CACX,CAEA,MAAMC,WAAe7hB,EAAa,CAC9B,YAAYyL,EAAU,GAAI,CACtB,QACA,KAAK,UAAY,GAIjB,KAAK,cAAgB,GACrB,KAAK,iBAAmB,GACxB,KAAK,QAAU,CACX,QAAS,SAAS,cAAc,KAAK,EACrC,QAAS,GACT,UAAW,GACX,YAAa,OACb,WAAY,CAAE,EACd,UAAW,GACX,SAAU,GACV,YAAa,CAAE,EACf,aAAc,CAAE,EAChB,qBAAsB,CAAE,EACxB,iBAAkB,GAClB,iBAAkB,GAClB,qBAAsB,GACtB,mBAAoB,GACpB,eAAgB,IAAM,KACtB,SAAU,IAAM,KAChB,SAAU,IAAM,KAChB,kBAAmB,IAAM,KACzB,cAAe,IAAM,KACrB,QAAS,IAAM,KACf,OAAQ,IAAM,KACd,UAAW,IAAM,KACjB,eAAgB,CAAC,CAAE,MAAAsF,CAAO,IAAK,CAAE,MAAMA,CAAQ,CAC3D,EACQ,KAAK,uBAAyB,GAC9B,KAAK,oBAAsB,KAC3B,KAAK,WAAWtF,CAAO,EACvB,KAAK,uBAAsB,EAC3B,KAAK,qBAAoB,EACzB,KAAK,aAAY,EACjB,KAAK,GAAG,eAAgB,KAAK,QAAQ,cAAc,EACnD,KAAK,KAAK,eAAgB,CAAE,OAAQ,IAAM,CAAA,EAC1C,KAAK,GAAG,eAAgB,KAAK,QAAQ,cAAc,EACnD,KAAK,WAAU,EACf,KAAK,UAAS,EACd,KAAK,GAAG,SAAU,KAAK,QAAQ,QAAQ,EACvC,KAAK,GAAG,SAAU,KAAK,QAAQ,QAAQ,EACvC,KAAK,GAAG,kBAAmB,KAAK,QAAQ,iBAAiB,EACzD,KAAK,GAAG,cAAe,KAAK,QAAQ,aAAa,EACjD,KAAK,GAAG,QAAS,KAAK,QAAQ,OAAO,EACrC,KAAK,GAAG,OAAQ,KAAK,QAAQ,MAAM,EACnC,KAAK,GAAG,UAAW,KAAK,QAAQ,SAAS,EACzC,OAAO,WAAW,IAAM,CAChB,KAAK,cAGT,KAAK,SAAS,MAAM,KAAK,QAAQ,SAAS,EAC1C,KAAK,KAAK,SAAU,CAAE,OAAQ,IAAM,CAAA,EACpC,KAAK,cAAgB,GACxB,EAAE,CAAC,CACP,CAID,IAAI,SAAU,CACV,OAAO,KAAK,gBACf,CAID,IAAI,UAAW,CACX,OAAO,KAAK,eAAe,QAC9B,CAID,OAAQ,CACJ,OAAO,KAAK,eAAe,OAC9B,CAID,KAAM,CACF,OAAO,KAAK,eAAe,KAC9B,CAID,WAAY,CACJ,KAAK,QAAQ,WAAa,WAC1B,KAAK,IAAM+V,GAAeD,GAAO,KAAK,QAAQ,WAAW,EAEhE,CAMD,WAAW9V,EAAU,GAAI,CACrB,KAAK,QAAU,CACX,GAAG,KAAK,QACR,GAAGA,CACf,EACY,GAAC,KAAK,MAAQ,CAAC,KAAK,OAAS,KAAK,eAGlC,KAAK,QAAQ,aACb,KAAK,KAAK,SAAS,KAAK,QAAQ,WAAW,EAE/C,KAAK,KAAK,YAAY,KAAK,KAAK,EACnC,CAID,YAAYqW,EAAUxV,EAAa,GAAM,CACrC,KAAK,WAAW,CAAE,SAAAwV,CAAQ,CAAE,EACxBxV,GACA,KAAK,KAAK,SAAU,CAAE,OAAQ,KAAM,YAAa,KAAK,MAAM,EAAE,CAAE,CAEvE,CAID,IAAI,YAAa,CAIb,OAAO,KAAK,QAAQ,UAAY,KAAK,MAAQ,KAAK,KAAK,QAC1D,CAID,IAAI,OAAQ,CACR,OAAO,KAAK,KAAK,KACpB,CAOD,eAAezG,EAAQkc,EAAe,CAClC,MAAMvY,EAAUjH,GAAWwf,CAAa,EAClCA,EAAclc,EAAQ,CAAC,GAAG,KAAK,MAAM,OAAO,CAAC,EAC7C,CAAC,GAAG,KAAK,MAAM,QAASA,CAAM,EAC9BnH,EAAQ,KAAK,MAAM,YAAY,CAAE,QAAA8K,CAAO,CAAE,EAChD,KAAK,KAAK,YAAY9K,CAAK,CAC9B,CAMD,iBAAiBsjB,EAAiB,CAC9B,GAAI,KAAK,YACL,OAGJ,MAAM3iB,EAAO,OAAO2iB,GAAoB,SAAW,GAAGA,CAAe,IAAMA,EAAgB,IACrFtjB,EAAQ,KAAK,MAAM,YAAY,CAEjC,QAAS,KAAK,MAAM,QAAQ,OAAOmH,GAAU,CAACA,EAAO,IAAI,WAAWxG,CAAI,CAAC,CACrF,CAAS,EACD,KAAK,KAAK,YAAYX,CAAK,CAC9B,CAID,wBAAyB,CACrB,IAAIyE,EAAI6B,EAWR,MAAMid,EAAgB,CAAC,GAVA,KAAK,QAAQ,qBAAuB,CACvDrC,GACA3T,GAAwB,UAAU,CAC9B,gBAAiBjH,GAAM7B,EAAK,KAAK,QAAQ,wBAA0B,MAAQA,IAAO,OAAS,OAASA,EAAG,2BAA6B,MAAQ6B,IAAO,OAAS,OAASA,EAAG,cACxL,CAAa,EACD2a,GACAE,GACAC,GACAc,EACH,EAAG,GACsC,GAAG,KAAK,QAAQ,UAAU,EAAE,OAAOxgB,GAClE,CAAC,YAAa,OAAQ,MAAM,EAAE,SAASA,GAAc,KAA+B,OAASA,EAAU,IAAI,CACrH,EACD,KAAK,iBAAmB,IAAIwI,EAAiBqZ,EAAe,IAAI,CACnE,CAID,sBAAuB,CACnB,KAAK,eAAiB,IAAIljB,GAAe,CACrC,OAAQ,IACpB,CAAS,CACJ,CAID,cAAe,CACX,KAAK,OAAS,KAAK,iBAAiB,MACvC,CAID,YAAa,CACT,IAAIF,EACJ,GAAI,CACAA,EAAM6X,GAAe,KAAK,QAAQ,QAAS,KAAK,OAAQ,KAAK,QAAQ,aAAc,CAAE,sBAAuB,KAAK,QAAQ,kBAAkB,CAAE,CAChJ,OACMjT,EAAG,CACN,GAAI,EAAEA,aAAa,QAAU,CAAC,CAAC,uCAAwC,sCAAsC,EAAE,SAASA,EAAE,OAAO,EAE7H,MAAMA,EAEV,KAAK,KAAK,eAAgB,CACtB,OAAQ,KACR,MAAOA,EACP,qBAAsB,IAAM,CAExB,KAAK,QAAQ,WAAa,KAAK,QAAQ,WAAW,OAAOrD,GAAaA,EAAU,OAAS,eAAe,EAExG,KAAK,uBAAsB,CAC9B,CACjB,CAAa,EAEDvB,EAAM6X,GAAe,KAAK,QAAQ,QAAS,KAAK,OAAQ,KAAK,QAAQ,aAAc,CAAE,sBAAuB,EAAO,CAAA,CACtH,CACD,MAAM9X,EAAY4Q,GAAqB3Q,EAAK,KAAK,QAAQ,SAAS,EAClE,KAAK,KAAO,IAAIqjB,EAAAA,WAAW,KAAK,QAAQ,QAAS,CAC7C,GAAG,KAAK,QAAQ,YAChB,oBAAqB,KAAK,oBAAoB,KAAK,IAAI,EACvD,MAAOC,EAAW,YAAC,OAAO,CACtB,IAAAtjB,EACA,UAAWD,GAAa,MACxC,CAAa,CACb,CAAS,EAGD,MAAM6hB,EAAW,KAAK,MAAM,YAAY,CACpC,QAAS,KAAK,iBAAiB,OAC3C,CAAS,EACD,KAAK,KAAK,YAAYA,CAAQ,EAC9B,KAAK,gBAAe,EACpB,KAAK,aAAY,EAIjB,MAAM2B,EAAM,KAAK,KAAK,IACtBA,EAAI,OAAS,IAChB,CAID,iBAAkB,CACV,KAAK,KAAK,aAGd,KAAK,KAAK,SAAS,CACf,UAAW,KAAK,iBAAiB,SAC7C,CAAS,CACJ,CAID,cAAe,CACX,KAAK,KAAK,IAAI,UAAY,UAAU,KAAK,KAAK,IAAI,SAAS,EAC9D,CACD,mBAAmBliB,EAAI,CACnB,KAAK,uBAAyB,GAC9BA,IACA,KAAK,uBAAyB,GAC9B,MAAMd,EAAK,KAAK,oBAChB,YAAK,oBAAsB,KACpBA,CACV,CAMD,oBAAoBT,EAAa,CAG7B,GAAI,KAAK,KAAK,YACV,OAEJ,GAAI,KAAK,uBAAwB,CAC7B,GAAI,CAAC,KAAK,oBAAqB,CAC3B,KAAK,oBAAsBA,EAC3B,MACH,CACDA,EAAY,MAAM,QAAQ8S,GAAQ,CAAE,IAAItO,EAAI,OAAQA,EAAK,KAAK,uBAAyB,MAAQA,IAAO,OAAS,OAASA,EAAG,KAAKsO,CAAI,CAAE,CAAE,EACxI,MACH,CACD,MAAM/S,EAAQ,KAAK,MAAM,MAAMC,CAAW,EACpC0jB,EAAsB,CAAC,KAAK,MAAM,UAAU,GAAG3jB,EAAM,SAAS,EACpE,KAAK,KAAK,oBAAqB,CAC3B,OAAQ,KACR,YAAAC,EACA,UAAWD,CACvB,CAAS,EACD,KAAK,KAAK,YAAYA,CAAK,EAC3B,KAAK,KAAK,cAAe,CACrB,OAAQ,KACR,YAAAC,CACZ,CAAS,EACG0jB,GACA,KAAK,KAAK,kBAAmB,CACzB,OAAQ,KACR,YAAA1jB,CAChB,CAAa,EAEL,MAAMqR,EAAQrR,EAAY,QAAQ,OAAO,EACnCyN,EAAOzN,EAAY,QAAQ,MAAM,EACnCqR,GACA,KAAK,KAAK,QAAS,CACf,OAAQ,KACR,MAAOA,EAAM,MACb,YAAArR,CAChB,CAAa,EAEDyN,GACA,KAAK,KAAK,OAAQ,CACd,OAAQ,KACR,MAAOA,EAAK,MACZ,YAAAzN,CAChB,CAAa,EAED,GAACA,EAAY,YAAcA,EAAY,QAAQ,eAAe,IAGlE,KAAK,KAAK,SAAU,CAChB,OAAQ,KACR,YAAAA,CACZ,CAAS,CACJ,CAID,cAAc6C,EAAY,CACtB,OAAO2W,GAAc,KAAK,MAAO3W,CAAU,CAC9C,CACD,SAAS8gB,EAAkBC,EAAuB,CAC9C,MAAMljB,EAAO,OAAOijB,GAAqB,SAAWA,EAAmB,KACjEjhB,EAAa,OAAOihB,GAAqB,SAAWC,EAAwBD,EAClF,OAAOzI,GAAS,KAAK,MAAOxa,EAAMgC,CAAU,CAC/C,CAID,SAAU,CACN,OAAO,KAAK,MAAM,IAAI,OAAM,CAC/B,CAID,SAAU,CACN,OAAOsW,GAAoB,KAAK,MAAM,IAAI,QAAS,KAAK,MAAM,CACjE,CAID,QAAQlM,EAAS,CACb,KAAM,CAAE,eAAAI,EAAiB;AAAA;AAAA,EAAQ,gBAAAC,EAAkB,CAAA,CAAI,EAAGL,GAAW,GACrE,OAAOuM,GAAQ,KAAK,MAAM,IAAK,CAC3B,eAAAnM,EACA,gBAAiB,CACb,GAAGG,GAA6B,KAAK,MAAM,EAC3C,GAAGF,CACN,CACb,CAAS,CACJ,CAID,IAAI,SAAU,CACV,OAAOkO,GAAY,KAAK,MAAM,GAAG,CACpC,CAMD,mBAAoB,CAChB,eAAQ,KAAK,6HAA6H,EACnI,KAAK,MAAM,IAAI,QAAQ,KAAO,CACxC,CAID,SAAU,CACN,KAAK,KAAK,SAAS,EACf,KAAK,MACL,KAAK,KAAK,UAEd,KAAK,mBAAkB,CAC1B,CAID,IAAI,aAAc,CACd,IAAI7W,EAEJ,MAAO,EAAG,GAAAA,EAAK,KAAK,QAAU,MAAQA,IAAO,SAAkBA,EAAG,QACrE,CACD,MAAM8d,EAAU5f,EAAY,CACxB,IAAI8B,EACJ,QAASA,EAAK,KAAK,QAAU,MAAQA,IAAO,OAAS,OAASA,EAAG,cAAc8d,EAAU5f,CAAU,IAAM,IAC5G,CACD,OAAO4f,EAAU5f,EAAY,CACzB,IAAI8B,EACJ,QAASA,EAAK,KAAK,QAAU,MAAQA,IAAO,OAAS,OAASA,EAAG,iBAAiB8d,EAAU5f,CAAU,IAAM,IAC/G,CACD,KAAKwD,EAAK,CACN,MAAM6I,EAAO,KAAK,MAAM,IAAI,QAAQ7I,CAAG,EACvC,OAAO,IAAIgc,EAAQnT,EAAM,IAAI,CAChC,CACD,IAAI,MAAO,CACP,OAAO,KAAK,KAAK,CAAC,CACrB,CACL,CAOA,SAAS8U,EAAc/jB,EAAQ,CAC3B,OAAO,IAAI0G,GAAU,CACjB,KAAM1G,EAAO,KACb,QAAS,CAAC,CAAE,MAAAC,EAAO,MAAAuH,EAAO,MAAAD,CAAK,IAAO,CAClC,MAAM3E,EAAamB,EAAa/D,EAAO,cAAe,OAAWuH,CAAK,EACtE,GAAI3E,IAAe,IAASA,IAAe,KACvC,OAAO,KAEX,KAAM,CAAE,GAAAjC,CAAI,EAAGV,EACT+jB,EAAezc,EAAMA,EAAM,OAAS,CAAC,EACrC0c,EAAY1c,EAAM,CAAC,EACzB,GAAIyc,EAAc,CACd,MAAME,EAAcD,EAAU,OAAO,IAAI,EACnCE,EAAY3c,EAAM,KAAOyc,EAAU,QAAQD,CAAY,EACvDI,EAAUD,EAAYH,EAAa,OAQzC,GAPsBpJ,GAAgBpT,EAAM,KAAMA,EAAM,GAAIvH,EAAM,GAAG,EAChE,OAAOkD,GAESA,EAAK,KAAK,KAAK,SAChB,KAAKV,GAAQA,IAASzC,EAAO,MAAQyC,IAASU,EAAK,KAAK,IAAI,CAC/E,EACI,OAAOA,GAAQA,EAAK,GAAKghB,CAAS,EACrB,OACd,OAAO,KAEPC,EAAU5c,EAAM,IAChB7G,EAAG,OAAOyjB,EAAS5c,EAAM,EAAE,EAE3B2c,EAAY3c,EAAM,MAClB7G,EAAG,OAAO6G,EAAM,KAAO0c,EAAaC,CAAS,EAEjD,MAAME,EAAU7c,EAAM,KAAO0c,EAAcF,EAAa,OACxDrjB,EAAG,QAAQ6G,EAAM,KAAO0c,EAAaG,EAASrkB,EAAO,KAAK,OAAO4C,GAAc,CAAA,CAAE,CAAC,EAClFjC,EAAG,iBAAiBX,EAAO,IAAI,CAClC,CACJ,CACT,CAAK,CACL,CAOA,SAASskB,GAActkB,EAAQ,CAC3B,OAAO,IAAI0G,GAAU,CACjB,KAAM1G,EAAO,KACb,QAAS,CAAC,CAAE,MAAAC,EAAO,MAAAuH,EAAO,MAAAD,CAAK,IAAO,CAClC,MAAM3E,EAAamB,EAAa/D,EAAO,cAAe,OAAWuH,CAAK,GAAK,GACrE,CAAE,GAAA5G,CAAI,EAAGV,EACT2I,EAAQpB,EAAM,KACpB,IAAIqB,EAAMrB,EAAM,GAChB,MAAM+c,EAAUvkB,EAAO,KAAK,OAAO4C,CAAU,EAC7C,GAAI2E,EAAM,CAAC,EAAG,CACV,MAAM+a,EAAS/a,EAAM,CAAC,EAAE,YAAYA,EAAM,CAAC,CAAC,EAC5C,IAAIid,EAAa5b,EAAQ0Z,EACrBkC,EAAa3b,EACb2b,EAAa3b,EAGbA,EAAM2b,EAAajd,EAAM,CAAC,EAAE,OAGhC,MAAMkd,EAAWld,EAAM,CAAC,EAAEA,EAAM,CAAC,EAAE,OAAS,CAAC,EAC7C5G,EAAG,WAAW8jB,EAAU7b,EAAQrB,EAAM,CAAC,EAAE,OAAS,CAAC,EAEnD5G,EAAG,YAAY6jB,EAAY3b,EAAK0b,CAAO,CAC1C,SACQhd,EAAM,CAAC,EAAG,CACf,MAAMmd,EAAiB1kB,EAAO,KAAK,SAAW4I,EAAQA,EAAQ,EAC9DjI,EAAG,OAAO+jB,EAAgB1kB,EAAO,KAAK,OAAO4C,CAAU,CAAC,EAAE,OAAOjC,EAAG,QAAQ,IAAIiI,CAAK,EAAGjI,EAAG,QAAQ,IAAIkI,CAAG,CAAC,CAC9G,CACDlI,EAAG,eAAc,CACpB,CACT,CAAK,CACL,CASA,SAASgkB,GAAuB3kB,EAAQ,CACpC,OAAO,IAAI0G,GAAU,CACjB,KAAM1G,EAAO,KACb,QAAS,CAAC,CAAE,MAAAC,EAAO,MAAAuH,EAAO,MAAAD,CAAK,IAAO,CAClC,MAAMqd,EAAS3kB,EAAM,IAAI,QAAQuH,EAAM,IAAI,EACrC5E,EAAamB,EAAa/D,EAAO,cAAe,OAAWuH,CAAK,GAAK,GAC3E,GAAI,CAACqd,EAAO,KAAK,EAAE,EAAE,eAAeA,EAAO,MAAM,EAAE,EAAGA,EAAO,WAAW,EAAE,EAAG5kB,EAAO,IAAI,EACpF,OAAO,KAEXC,EAAM,GACD,OAAOuH,EAAM,KAAMA,EAAM,EAAE,EAC3B,aAAaA,EAAM,KAAMA,EAAM,KAAMxH,EAAO,KAAM4C,CAAU,CACpE,CACT,CAAK,CACL,CA4CA,SAASiiB,EAAkB7kB,EAAQ,CAC/B,OAAO,IAAI0G,GAAU,CACjB,KAAM1G,EAAO,KACb,QAAS,CAAC,CAAE,MAAAC,EAAO,MAAAuH,EAAO,MAAAD,EAAO,MAAAlG,CAAK,IAAQ,CAC1C,MAAMuB,EAAamB,EAAa/D,EAAO,cAAe,OAAWuH,CAAK,GAAK,GACrE5G,EAAKV,EAAM,GAAG,OAAOuH,EAAM,KAAMA,EAAM,EAAE,EAEzCsd,EADSnkB,EAAG,IAAI,QAAQ6G,EAAM,IAAI,EACd,aACpBud,EAAWD,GAAcE,EAAY,aAACF,EAAY9kB,EAAO,KAAM4C,CAAU,EAC/E,GAAI,CAACmiB,EACD,OAAO,KAGX,GADApkB,EAAG,KAAKmkB,EAAYC,CAAQ,EACxB/kB,EAAO,WAAaA,EAAO,OAAQ,CACnC,KAAM,CAAE,UAAAG,EAAW,YAAAE,CAAa,EAAGJ,EAC7B,CAAE,gBAAA0d,CAAiB,EAAG3d,EAAO,OAAO,iBACpCsF,EAAQjF,GAAgBF,EAAU,IAAI,cAAgBA,EAAU,MAAM,MAAK,EACjF,GAAImF,EAAO,CACP,MAAMsY,EAAgBtY,EAAM,OAAOG,GAAQkY,EAAgB,SAASlY,EAAK,KAAK,IAAI,CAAC,EACnF9E,EAAG,YAAYid,CAAa,CAC/B,CACJ,CACD,GAAI5d,EAAO,eAAgB,CAEvB,MAAMkX,EAAWlX,EAAO,KAAK,OAAS,cAAgBA,EAAO,KAAK,OAAS,cAAgB,WAAa,WACxGqB,EAAK,EAAG,iBAAiB6V,EAAUtU,CAAU,EAAE,IAAG,CACrD,CACD,MAAMwc,EAASze,EAAG,IAAI,QAAQ6G,EAAM,KAAO,CAAC,EAAE,WAC1C4X,GACGA,EAAO,OAASpf,EAAO,MACvBsf,EAAAA,QAAQ3e,EAAG,IAAK6G,EAAM,KAAO,CAAC,IAC7B,CAACxH,EAAO,eAAiBA,EAAO,cAAcuH,EAAO6X,CAAM,IAC/Dze,EAAG,KAAK6G,EAAM,KAAO,CAAC,CAE7B,CACT,CAAK,CACL,CAMA,MAAM0D,CAAK,CACP,YAAYlL,EAAS,GAAI,CACrB,KAAK,KAAO,OACZ,KAAK,KAAO,OACZ,KAAK,OAAS,KACd,KAAK,MAAQ,KACb,KAAK,OAAS,CACV,KAAM,KAAK,KACX,eAAgB,CAAE,CAC9B,EACQ,KAAK,OAAS,CACV,GAAG,KAAK,OACR,GAAGA,CACf,EACQ,KAAK,KAAO,KAAK,OAAO,KACpBA,EAAO,gBAAkB,OAAO,KAAKA,EAAO,cAAc,EAAE,OAAS,GACrE,QAAQ,KAAK,yHAAyH,KAAK,IAAI,IAAI,EAGvJ,KAAK,QAAU,KAAK,OAAO,eACvB,KAAK,OAAO,aACZ,KAAK,QAAU+D,EAAarC,EAAkB,KAAM,aAAc,CAC9D,KAAM,KAAK,IACd,CAAA,CAAC,GAEN,KAAK,QAAUqC,EAAarC,EAAkB,KAAM,aAAc,CAC9D,KAAM,KAAK,KACX,QAAS,KAAK,OAC1B,CAAS,CAAC,GAAK,CAAA,CACV,CACD,OAAO,OAAO1B,EAAS,GAAI,CACvB,OAAO,IAAIkL,EAAKlL,CAAM,CACzB,CACD,UAAUgN,EAAU,GAAI,CAGpB,MAAMrL,EAAY,KAAK,OAAO,CAC1B,GAAG,KAAK,OACR,WAAY,IACDgL,GAAU,KAAK,QAASK,CAAO,CAEtD,CAAS,EAED,OAAArL,EAAU,KAAO,KAAK,KAEtBA,EAAU,OAAS,KAAK,OACjBA,CACV,CACD,OAAOsL,EAAiB,GAAI,CACxB,MAAMtL,EAAY,IAAIuJ,EAAK+B,CAAc,EACzC,OAAAtL,EAAU,OAAS,KACnB,KAAK,MAAQA,EACbA,EAAU,KAAOsL,EAAe,KAAOA,EAAe,KAAOtL,EAAU,OAAO,KAC1EsL,EAAe,gBAAkB,OAAO,KAAKA,EAAe,cAAc,EAAE,OAAS,GACrF,QAAQ,KAAK,yHAAyHtL,EAAU,IAAI,IAAI,EAE5JA,EAAU,QAAUoC,EAAarC,EAAkBC,EAAW,aAAc,CACxE,KAAMA,EAAU,IACnB,CAAA,CAAC,EACFA,EAAU,QAAUoC,EAAarC,EAAkBC,EAAW,aAAc,CACxE,KAAMA,EAAU,KAChB,QAASA,EAAU,OACtB,CAAA,CAAC,EACKA,CACV,CACD,OAAO,WAAW,CAAE,OAAAlB,EAAQ,KAAAgF,GAAQ,CAChC,KAAM,CAAE,GAAA9E,CAAE,EAAKF,EAAO,MAChBwkB,EAAaxkB,EAAO,MAAM,UAAU,MAE1C,GADgBwkB,EAAW,MAAQA,EAAW,IAAG,EACpC,CACT,MAAMxI,EAAewI,EAAW,QAEhC,GAAI,CADa,CAAC,CAACxI,EAAa,KAAKyI,IAAMA,GAAM,KAAuB,OAASA,EAAE,KAAK,QAAUzf,EAAK,IAAI,EAEvG,MAAO,GAEX,MAAM0f,EAAa1I,EAAa,KAAKyI,IAAMA,GAAM,KAAuB,OAASA,EAAE,KAAK,QAAUzf,EAAK,IAAI,EAC3G,OAAI0f,GACAxkB,EAAG,iBAAiBwkB,CAAU,EAElCxkB,EAAG,WAAW,IAAKskB,EAAW,GAAG,EACjCxkB,EAAO,KAAK,SAASE,CAAE,EAChB,EACV,CACD,MAAO,EACV,CACL,CAMA,MAAMykB,CAAK,CACP,YAAYplB,EAAS,GAAI,CACrB,KAAK,KAAO,OACZ,KAAK,KAAO,OACZ,KAAK,OAAS,KACd,KAAK,MAAQ,KACb,KAAK,OAAS,CACV,KAAM,KAAK,KACX,eAAgB,CAAE,CAC9B,EACQ,KAAK,OAAS,CACV,GAAG,KAAK,OACR,GAAGA,CACf,EACQ,KAAK,KAAO,KAAK,OAAO,KACpBA,EAAO,gBAAkB,OAAO,KAAKA,EAAO,cAAc,EAAE,OAAS,GACrE,QAAQ,KAAK,yHAAyH,KAAK,IAAI,IAAI,EAGvJ,KAAK,QAAU,KAAK,OAAO,eACvB,KAAK,OAAO,aACZ,KAAK,QAAU+D,EAAarC,EAAkB,KAAM,aAAc,CAC9D,KAAM,KAAK,IACd,CAAA,CAAC,GAEN,KAAK,QAAUqC,EAAarC,EAAkB,KAAM,aAAc,CAC9D,KAAM,KAAK,KACX,QAAS,KAAK,OAC1B,CAAS,CAAC,GAAK,CAAA,CACV,CACD,OAAO,OAAO1B,EAAS,GAAI,CACvB,OAAO,IAAIolB,EAAKplB,CAAM,CACzB,CACD,UAAUgN,EAAU,GAAI,CAGpB,MAAMrL,EAAY,KAAK,OAAO,CAC1B,GAAG,KAAK,OACR,WAAY,IACDgL,GAAU,KAAK,QAASK,CAAO,CAEtD,CAAS,EAED,OAAArL,EAAU,KAAO,KAAK,KAEtBA,EAAU,OAAS,KAAK,OACjBA,CACV,CACD,OAAOsL,EAAiB,GAAI,CACxB,MAAMtL,EAAY,IAAIyjB,EAAKnY,CAAc,EACzC,OAAAtL,EAAU,OAAS,KACnB,KAAK,MAAQA,EACbA,EAAU,KAAOsL,EAAe,KAAOA,EAAe,KAAOtL,EAAU,OAAO,KAC1EsL,EAAe,gBAAkB,OAAO,KAAKA,EAAe,cAAc,EAAE,OAAS,GACrF,QAAQ,KAAK,yHAAyHtL,EAAU,IAAI,IAAI,EAE5JA,EAAU,QAAUoC,EAAarC,EAAkBC,EAAW,aAAc,CACxE,KAAMA,EAAU,IACnB,CAAA,CAAC,EACFA,EAAU,QAAUoC,EAAarC,EAAkBC,EAAW,aAAc,CACxE,KAAMA,EAAU,KAChB,QAASA,EAAU,OACtB,CAAA,CAAC,EACKA,CACV,CACL,CAEA,SAAS0jB,IAAY,CACjB,OAAO,UAAU,WAAa,WAAa,WAAW,KAAK,UAAU,SAAS,CAClF,CAMA,MAAMC,EAAS,CACX,YAAYC,EAAWhlB,EAAOyM,EAAS,CACnC,KAAK,WAAa,GAClB,KAAK,UAAYuY,EACjB,KAAK,OAAShlB,EAAM,OACpB,KAAK,QAAU,CACX,UAAW,KACX,eAAgB,KAChB,GAAGyM,CACf,EACQ,KAAK,UAAYzM,EAAM,UACvB,KAAK,KAAOA,EAAM,KAClB,KAAK,YAAcA,EAAM,YACzB,KAAK,OAASA,EAAM,OACpB,KAAK,MAAK,CACb,CACD,OAAQ,CAGP,CACD,IAAI,KAAM,CACN,OAAO,KAAK,OAAO,KAAK,GAC3B,CACD,IAAI,YAAa,CACb,OAAO,IACV,CACD,YAAYiB,EAAO,CACf,IAAIkD,EAAI6B,EAAIif,EAAIC,EAAIC,EAAIC,EAAIC,EAC5B,KAAM,CAAE,KAAAllB,CAAI,EAAK,KAAK,OAChBkM,EAASpL,EAAM,OAGfqkB,EAAajZ,EAAO,WAAa,GAChClI,EAAKkI,EAAO,iBAAmB,MAAQlI,IAAO,OAAS,OAASA,EAAG,QAAQ,oBAAoB,EAChGkI,EAAO,QAAQ,oBAAoB,EACzC,GAAI,CAAC,KAAK,KAAS,GAAArG,EAAK,KAAK,cAAgB,MAAQA,IAAO,SAAkBA,EAAG,SAASqG,CAAM,GAAM,CAACiZ,EACnG,OAEJ,IAAIC,EAAI,EACJC,EAAI,EAER,GAAI,KAAK,MAAQF,EAAY,CACzB,MAAMG,EAAS,KAAK,IAAI,sBAAqB,EACvCC,EAAYJ,EAAW,wBAEvBK,GAAWV,EAAKhkB,EAAM,WAAa,MAAQgkB,IAAO,OAASA,GAAMC,EAAKjkB,EAAM,eAAiB,MAAQikB,IAAO,OAAS,OAASA,EAAG,QACjIU,GAAWT,EAAKlkB,EAAM,WAAa,MAAQkkB,IAAO,OAASA,GAAMC,EAAKnkB,EAAM,eAAiB,MAAQmkB,IAAO,OAAS,OAASA,EAAG,QACvIG,EAAIG,EAAU,EAAID,EAAO,EAAIE,EAC7BH,EAAIE,EAAU,EAAID,EAAO,EAAIG,CAChC,EACAP,EAAKpkB,EAAM,gBAAkB,MAAQokB,IAAO,QAAkBA,EAAG,aAAa,KAAK,IAAKE,EAAGC,CAAC,EAG7F,MAAM5lB,EAAY0b,gBAAc,OAAOnb,EAAK,MAAM,IAAK,KAAK,OAAM,CAAE,EAC9DR,EAAcQ,EAAK,MAAM,GAAG,aAAaP,CAAS,EACxDO,EAAK,SAASR,CAAW,CAC5B,CACD,UAAUsB,EAAO,CACb,IAAIkD,EACJ,GAAI,CAAC,KAAK,IACN,MAAO,GAEX,GAAI,OAAO,KAAK,QAAQ,WAAc,WAClC,OAAO,KAAK,QAAQ,UAAU,CAAE,MAAAlD,CAAO,CAAA,EAE3C,MAAMoL,EAASpL,EAAM,OAGrB,GAAI,EAFgB,KAAK,IAAI,SAASoL,CAAM,GAAK,EAAG,GAAAlI,EAAK,KAAK,cAAgB,MAAQA,IAAO,SAAkBA,EAAG,SAASkI,CAAM,IAG7H,MAAO,GAEX,MAAMwZ,EAAc5kB,EAAM,KAAK,WAAW,MAAM,EAC1C6kB,EAAc7kB,EAAM,OAAS,OAGnC,IAFgB,CAAC,QAAS,SAAU,SAAU,UAAU,EAAE,SAASoL,EAAO,OAAO,GAAKA,EAAO,oBAE9E,CAACyZ,GAAe,CAACD,EAC5B,MAAO,GAEX,KAAM,CAAE,WAAAE,CAAU,EAAK,KAAK,OACtB,CAAE,WAAAC,CAAY,EAAG,KACjBC,EAAc,CAAC,CAAC,KAAK,KAAK,KAAK,KAAK,UACpCC,EAAe5K,EAAa,cAAC,aAAa,KAAK,IAAI,EACnD6K,EAAcllB,EAAM,OAAS,OAC7BmlB,EAAenlB,EAAM,OAAS,QAC9BolB,EAAaplB,EAAM,OAAS,MAC5BqlB,EAAerlB,EAAM,OAAS,YAOpC,GAHI,CAACglB,GAAeC,GAAgBL,GAChC5kB,EAAM,eAAc,EAEpBglB,GAAeJ,GAAe,CAACG,EAC/B,OAAA/kB,EAAM,eAAc,EACb,GAGX,GAAIglB,GAAeF,GAAc,CAACC,GAAcM,EAAc,CAC1D,MAAMhB,EAAajZ,EAAO,QAAQ,oBAAoB,EAC5BiZ,IAAe,KAAK,MAAQA,GAAc,KAAK,IAAI,SAASA,CAAU,KAE5F,KAAK,WAAa,GAClB,SAAS,iBAAiB,UAAW,IAAM,CACvC,KAAK,WAAa,EACtC,EAAmB,CAAE,KAAM,EAAI,CAAE,EACjB,SAAS,iBAAiB,OAAQ,IAAM,CACpC,KAAK,WAAa,EACtC,EAAmB,CAAE,KAAM,EAAI,CAAE,EACjB,SAAS,iBAAiB,UAAW,IAAM,CACvC,KAAK,WAAa,EACtC,EAAmB,CAAE,KAAM,EAAI,CAAE,EAExB,CAED,MAAI,EAAAU,GACGF,GACAK,GACAC,GACAC,GACCC,GAAgBJ,EAI3B,CACD,eAAeK,EAAU,CACrB,MAAI,CAAC,KAAK,KAAO,CAAC,KAAK,WACZ,GAEP,OAAO,KAAK,QAAQ,gBAAmB,WAChC,KAAK,QAAQ,eAAe,CAAE,SAAAA,CAAU,CAAA,EAI/C,KAAK,KAAK,QAAU,KAAK,KAAK,OACvB,GAGPA,EAAS,OAAS,aAQlB,KAAK,IAAI,SAASA,EAAS,MAAM,GAC9BA,EAAS,OAAS,cACjBxV,GAAK,GAAM+T,OACZ,KAAK,OAAO,WACM,CACjB,GAAG,MAAM,KAAKyB,EAAS,UAAU,EACjC,GAAG,MAAM,KAAKA,EAAS,YAAY,CACnD,EAG6B,MAAM1iB,GAAQA,EAAK,iBAAiB,EAC1C,GAKX,KAAK,aAAe0iB,EAAS,QAAUA,EAAS,OAAS,aAClD,GAGP,MAAK,WAAW,SAASA,EAAS,MAAM,CAI/C,CACD,iBAAiBlkB,EAAY,CACzB,KAAK,OAAO,SAAS,QAAQ,CAAC,CAAE,GAAAjC,CAAE,IAAO,CACrC,MAAMyF,EAAM,KAAK,SACjB,OAAAzF,EAAG,cAAcyF,EAAK,OAAW,CAC7B,GAAG,KAAK,KAAK,MACb,GAAGxD,CACnB,CAAa,EACM,EACnB,CAAS,CACJ,CACD,YAAa,CACT,MAAMqE,EAAO,KAAK,SACZC,EAAKD,EAAO,KAAK,KAAK,SAC5B,KAAK,OAAO,SAAS,YAAY,CAAE,KAAAA,EAAM,GAAAC,CAAE,CAAE,CAChD,CACL,CAOA,SAAS6f,EAAc/mB,EAAQ,CAC3B,OAAO,IAAIkI,GAAU,CACjB,KAAMlI,EAAO,KACb,QAAS,CAAC,CAAE,MAAAC,EAAO,MAAAuH,EAAO,MAAAD,EAAO,WAAAe,CAAU,IAAQ,CAC/C,MAAM1F,EAAamB,EAAa/D,EAAO,cAAe,OAAWuH,EAAOe,CAAU,EAClF,GAAI1F,IAAe,IAASA,IAAe,KACvC,OAAO,KAEX,KAAM,CAAE,GAAAjC,CAAI,EAAGV,EACT+jB,EAAezc,EAAMA,EAAM,OAAS,CAAC,EACrC0c,EAAY1c,EAAM,CAAC,EACzB,IAAI8c,EAAU7c,EAAM,GACpB,GAAIwc,EAAc,CACd,MAAME,EAAcD,EAAU,OAAO,IAAI,EACnCE,EAAY3c,EAAM,KAAOyc,EAAU,QAAQD,CAAY,EACvDI,EAAUD,EAAYH,EAAa,OAQzC,GAPsBpJ,GAAgBpT,EAAM,KAAMA,EAAM,GAAIvH,EAAM,GAAG,EAChE,OAAOkD,GAESA,EAAK,KAAK,KAAK,SAChB,KAAKV,GAAQA,IAASzC,EAAO,MAAQyC,IAASU,EAAK,KAAK,IAAI,CAC/E,EACI,OAAOA,GAAQA,EAAK,GAAKghB,CAAS,EACrB,OACd,OAAO,KAEPC,EAAU5c,EAAM,IAChB7G,EAAG,OAAOyjB,EAAS5c,EAAM,EAAE,EAE3B2c,EAAY3c,EAAM,MAClB7G,EAAG,OAAO6G,EAAM,KAAO0c,EAAaC,CAAS,EAEjDE,EAAU7c,EAAM,KAAO0c,EAAcF,EAAa,OAClDrjB,EAAG,QAAQ6G,EAAM,KAAO0c,EAAaG,EAASrkB,EAAO,KAAK,OAAO4C,GAAc,CAAA,CAAE,CAAC,EAClFjC,EAAG,iBAAiBX,EAAO,IAAI,CAClC,CACJ,CACT,CAAK,CACL,CAGA,SAASgnB,GAAeC,EAAQ,CAC5B,OAAOA,EAAO,QAAQ,wBAAyB,MAAM,CACzD,CCz3JA,MAAMC,GAAiB,uDAIjBC,GAAiB,uDAIjBC,GAAuB,+CAIvBC,GAAuB,+CAKvBC,GAAOpc,EAAK,OAAO,CACrB,KAAM,OACN,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,CAC9B,CACK,EACD,WAAY,CACR,MAAO,CACH,CACI,IAAK,QACR,EACD,CACI,IAAK,IACL,SAAU9G,GAAQA,EAAK,MAAM,aAAe,UAAY,IAC3D,EACD,CACI,MAAO,cACP,SAAUb,GAAS,4BAA4B,KAAKA,CAAK,GAAK,IACjE,CACb,CACK,EACD,WAAW,CAAE,eAAAyI,GAAkB,CAC3B,MAAO,CAAC,SAAU/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CACpF,EACD,aAAc,CACV,MAAO,CACH,QAAS,IAAM,CAAC,CAAE,SAAAvE,KACPA,EAAS,QAAQ,KAAK,IAAI,EAErC,WAAY,IAAM,CAAC,CAAE,SAAAA,KACVA,EAAS,WAAW,KAAK,IAAI,EAExC,UAAW,IAAM,CAAC,CAAE,SAAAA,KACTA,EAAS,UAAU,KAAK,IAAI,CAEnD,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,QAAS,IAAM,KAAK,OAAO,SAAS,WAAY,EAChD,QAAS,IAAM,KAAK,OAAO,SAAS,WAAY,CAC5D,CACK,EACD,eAAgB,CACZ,MAAO,CACHsc,EAAc,CACV,KAAMmD,GACN,KAAM,KAAK,IAC3B,CAAa,EACDnD,EAAc,CACV,KAAMqD,GACN,KAAM,KAAK,IAC3B,CAAa,CACb,CACK,EACD,eAAgB,CACZ,MAAO,CACHL,EAAc,CACV,KAAMI,GACN,KAAM,KAAK,IAC3B,CAAa,EACDJ,EAAc,CACV,KAAMM,GACN,KAAM,KAAK,IAC3B,CAAa,CACb,CACK,CACL,CAAC,ECtFD,MAAME,EAAe,CACjB,YAAY,CAAE,OAAA9mB,EAAQ,QAAA+mB,EAAS,KAAA9mB,EAAM,aAAA+mB,EAAe,CAAA,EAAI,YAAAC,EAAc,IAAK,WAAAC,GAAe,CACtF,KAAK,YAAc,GACnB,KAAK,WAAa,CAAC,CAAE,KAAAjnB,EAAM,MAAAT,EAAO,KAAAgH,EAAM,GAAAC,KAAU,CAC9C,KAAM,CAAE,IAAA9G,EAAK,UAAAD,CAAW,EAAGF,EACrB,CAAE,MAAA2V,CAAO,EAAGzV,EAIZynB,EAAmB,CAACxnB,EAAI,YAAY6G,EAAMC,CAAE,EAAE,QAAUyJ,GAAgB1Q,EAAM,SAAS,EAIvF4nB,EAAgB,KAAK,QAAQ,SAAS,SAAS,aAAa,EAElE,MAAI,IADmBnnB,EAAK,SAAQ,GAAMmnB,IACnBjS,GAASgS,GAAoB,CAAC,KAAK,OAAO,WAI7E,EACQ,KAAK,iBAAmB,IAAM,CAC1B,KAAK,YAAc,EAC/B,EACQ,KAAK,iBAAmB,IAAM,CAC1B,KAAK,KAAI,CACrB,EACQ,KAAK,aAAe,IAAM,CAEtB,WAAW,IAAM,KAAK,OAAO,KAAK,OAAO,IAAI,CAAC,CAC1D,EACQ,KAAK,YAAc,CAAC,CAAE,MAAApmB,KAAY,CAC9B,IAAIkD,EACJ,GAAI,KAAK,YAAa,CAClB,KAAK,YAAc,GACnB,MACH,CACIlD,GAAU,MAAoCA,EAAM,gBAAoB,GAAAkD,EAAK,KAAK,QAAQ,cAAgB,MAAQA,IAAO,SAAkBA,EAAG,SAASlD,EAAM,aAAa,IAG/K,KAAK,KAAI,CACrB,EACQ,KAAK,iBAAoBA,GAAU,CAC/B,KAAK,YAAY,CAAE,MAAAA,CAAK,CAAE,CACtC,EACQ,KAAK,sBAAwB,CAACd,EAAMiJ,IAAa,CAC7C,MAAMme,EAAmB,EAAEne,GAAa,MAAuCA,EAAS,UAAU,GAAGjJ,EAAK,MAAM,SAAS,GACnHqnB,EAAa,EAAEpe,GAAa,MAAuCA,EAAS,IAAI,GAAGjJ,EAAK,MAAM,GAAG,GACnG,CAAConB,GAAoB,CAACC,IAGtB,KAAK,qBACL,aAAa,KAAK,mBAAmB,EAEzC,KAAK,oBAAsB,OAAO,WAAW,IAAM,CAC/C,KAAK,cAAcrnB,EAAMonB,EAAkBC,EAAYpe,CAAQ,CAC/E,EAAe,KAAK,WAAW,EAC/B,EACQ,KAAK,cAAgB,CAACjJ,EAAMonB,EAAkBC,EAAYpe,IAAa,CACnE,IAAIjF,EAAI6B,EAAIif,EACZ,KAAM,CAAE,MAAAvlB,EAAO,UAAA+nB,CAAW,EAAGtnB,EACvB,CAAE,UAAAP,CAAW,EAAGF,EAEtB,GAAI+nB,GADW,CAACF,GAAoB,CAACC,EAEjC,OAEJ,KAAK,cAAa,EAElB,KAAM,CAAE,OAAAra,CAAQ,EAAGvN,EACb8G,EAAO,KAAK,IAAI,GAAGyG,EAAO,IAAIlG,GAASA,EAAM,MAAM,GAAG,CAAC,EACvDN,EAAK,KAAK,IAAI,GAAGwG,EAAO,IAAIlG,GAASA,EAAM,IAAI,GAAG,CAAC,EASzD,GAAI,GARgB9C,EAAK,KAAK,cAAgB,MAAQA,IAAO,OAAS,OAASA,EAAG,KAAK,KAAM,CACzF,OAAQ,KAAK,OACb,KAAAhE,EACA,MAAAT,EACA,SAAA0J,EACA,KAAA1C,EACA,GAAAC,CAChB,CAAa,GACgB,CACb,KAAK,KAAI,EACT,MACH,EACAX,EAAK,KAAK,SAAW,MAAQA,IAAO,QAAkBA,EAAG,SAAS,CAC/D,yBAA0Bif,EAAK,KAAK,gBAAkB,MAAQA,IAAO,OAAS,OAASA,EAAG,0BAClF,IAAM,CACN,GAAI5J,GAAgB3b,EAAM,SAAS,EAAG,CAClC,IAAImE,EAAO1D,EAAK,QAAQuG,CAAI,EAC5B,MAAMghB,EAAkB7jB,EAAK,QAAQ,gBAAkBA,EAAOA,EAAK,cAAc,0BAA0B,EAI3G,GAHI6jB,IACA7jB,EAAO6jB,EAAgB,YAEvB7jB,EACA,OAAOA,EAAK,uBAEnB,CACD,OAAO0X,GAAapb,EAAMuG,EAAMC,CAAE,CAC1D,EACA,CAAa,EACD,KAAK,KAAI,CACrB,EACQ,KAAK,OAASzG,EACd,KAAK,QAAU+mB,EACf,KAAK,KAAO9mB,EACZ,KAAK,YAAcgnB,EACfC,IACA,KAAK,WAAaA,GAEtB,KAAK,QAAQ,iBAAiB,YAAa,KAAK,iBAAkB,CAAE,QAAS,EAAI,CAAE,EACnF,KAAK,KAAK,IAAI,iBAAiB,YAAa,KAAK,gBAAgB,EACjE,KAAK,OAAO,GAAG,QAAS,KAAK,YAAY,EACzC,KAAK,OAAO,GAAG,OAAQ,KAAK,WAAW,EACvC,KAAK,aAAeF,EAEpB,KAAK,QAAQ,SACb,KAAK,QAAQ,MAAM,WAAa,SACnC,CACD,eAAgB,CACZ,KAAM,CAAE,QAASS,CAAa,EAAK,KAAK,OAAO,QACzCC,EAAmB,CAAC,CAACD,EAAc,cACrC,KAAK,OAAS,CAACC,IAGnB,KAAK,MAAQC,EAAK,MAACF,EAAe,CAC9B,SAAU,EACV,uBAAwB,KACxB,QAAS,KAAK,QACd,YAAa,GACb,QAAS,SACT,UAAW,MACX,YAAa,SACb,GAAG,KAAK,YACpB,CAAS,EAEG,KAAK,MAAM,OAAO,YAClB,KAAK,MAAM,OAAO,WAAW,iBAAiB,OAAQ,KAAK,gBAAgB,EAElF,CACD,OAAOxnB,EAAMiJ,EAAU,CACnB,KAAM,CAAE,MAAA1J,CAAO,EAAGS,EACZ2nB,EAAoBpoB,EAAM,UAAU,OAASA,EAAM,UAAU,GACnE,GAAI,KAAK,YAAc,GAAKooB,EAAmB,CAC3C,KAAK,sBAAsB3nB,EAAMiJ,CAAQ,EACzC,MACH,CACD,MAAMme,EAAmB,EAAEne,GAAa,MAAuCA,EAAS,UAAU,GAAGjJ,EAAK,MAAM,SAAS,GACnHqnB,EAAa,EAAEpe,GAAa,MAAuCA,EAAS,IAAI,GAAGjJ,EAAK,MAAM,GAAG,GACvG,KAAK,cAAcA,EAAMonB,EAAkBC,EAAYpe,CAAQ,CAClE,CACD,MAAO,CACH,IAAIjF,GACHA,EAAK,KAAK,SAAW,MAAQA,IAAO,QAAkBA,EAAG,KAAI,CACjE,CACD,MAAO,CACH,IAAIA,GACHA,EAAK,KAAK,SAAW,MAAQA,IAAO,QAAkBA,EAAG,KAAI,CACjE,CACD,SAAU,CACN,IAAIA,EAAI6B,EACH,GAAA7B,EAAK,KAAK,SAAW,MAAQA,IAAO,SAAkBA,EAAG,OAAO,YACjE,KAAK,MAAM,OAAO,WAAW,oBAAoB,OAAQ,KAAK,gBAAgB,GAEjF6B,EAAK,KAAK,SAAW,MAAQA,IAAO,QAAkBA,EAAG,QAAO,EACjE,KAAK,QAAQ,oBAAoB,YAAa,KAAK,iBAAkB,CAAE,QAAS,EAAI,CAAE,EACtF,KAAK,KAAK,IAAI,oBAAoB,YAAa,KAAK,gBAAgB,EACpE,KAAK,OAAO,IAAI,QAAS,KAAK,YAAY,EAC1C,KAAK,OAAO,IAAI,OAAQ,KAAK,WAAW,CAC3C,CACL,CACA,MAAM+hB,GAAoBtb,GACf,IAAIpF,EAAAA,OAAO,CACd,IAAK,OAAOoF,EAAQ,WAAc,SAAW,IAAIS,EAAS,UAACT,EAAQ,SAAS,EAAIA,EAAQ,UACxF,KAAMtM,GAAQ,IAAI6mB,GAAe,CAAE,KAAA7mB,EAAM,GAAGsM,EAAS,CAC7D,CAAK,EAOcD,EAAU,OAAO,CAChC,KAAM,aACN,YAAa,CACT,MAAO,CACH,QAAS,KACT,aAAc,CAAE,EAChB,UAAW,aACX,YAAa,OACb,WAAY,IACxB,CACK,EACD,uBAAwB,CACpB,OAAK,KAAK,QAAQ,QAGX,CACHub,GAAiB,CACb,UAAW,KAAK,QAAQ,UACxB,OAAQ,KAAK,OACb,QAAS,KAAK,QAAQ,QACtB,aAAc,KAAK,QAAQ,aAC3B,YAAa,KAAK,QAAQ,YAC1B,WAAY,KAAK,QAAQ,UACzC,CAAa,CACb,EAXmB,EAYd,CACL,CAAC,EC1MD,IAAIC,GAAO,CAAC,QAAS,CAAA,CAAE,EAEnBC,GAA0C,CAAA,EAE9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUA,IAAIC,GAEJ,SAASC,IAAkD,CAC1D,GAAID,GAAoD,OAAOD,GAC/DC,GAAqD,EACtD,IAAI,EAAEE,EAAM,SAASC,EAAEre,EAAEC,EAAE,CAAC,OAAOD,IAAIC,IAAQD,IAAJ,GAAO,EAAEA,IAAI,EAAEC,IAAID,IAAIA,GAAGC,IAAIA,CAAC,CAAC,IAAIqe,EAAe,OAAO,OAAO,IAA3B,WAA8B,OAAO,GAAGD,EAAEE,EAAE,EAAE,SAAS5D,EAAE,EAAE,UAAUnG,EAAE,EAAE,gBAAgBgK,EAAE,EAAE,cAAc,SAASC,EAAEze,EAAEC,EAAE,CAAC,IAAIiU,EAAEjU,EAAG,EAAC,EAAEse,EAAE,CAAC,KAAK,CAAC,MAAMrK,EAAE,YAAYjU,CAAC,CAAC,CAAC,EAAEye,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,OAAAlK,EAAE,UAAU,CAACkK,EAAE,MAAMxK,EAAEwK,EAAE,YAAYze,EAAE0e,EAAED,CAAC,GAAG,EAAE,CAAC,KAAKA,CAAC,CAAC,CAAE,EAAE,CAAC1e,EAAEkU,EAAEjU,CAAC,CAAC,EAAE0a,EAAE,UAAU,CAAC,OAAAgE,EAAED,CAAC,GAAG,EAAE,CAAC,KAAKA,CAAC,CAAC,EAAS1e,EAAE,UAAU,CAAC2e,EAAED,CAAC,GAAG,EAAE,CAAC,KAAKA,CAAC,CAAC,CAAE,CAAC,CAAC,EAAE,CAAC1e,CAAC,CAAC,EAAEwe,EAAEtK,CAAC,EAASA,CAAC,CAC3a,SAASyK,EAAE3e,EAAE,CAAC,IAAIC,EAAED,EAAE,YAAYA,EAAEA,EAAE,MAAM,GAAG,CAAC,IAAIkU,EAAEjU,EAAG,EAAC,MAAO,CAACqe,EAAEte,EAAEkU,CAAC,CAAC,MAAS,CAAC,MAAO,EAAE,CAAC,CAAC,SAAS0K,EAAE5e,EAAEC,EAAE,CAAC,OAAOA,EAAC,CAAE,CAAC,IAAI,EAAgB,OAAO,OAArB,KAA2C,OAAO,OAAO,SAA5B,KAAoD,OAAO,OAAO,SAAS,cAArC,IAAmD2e,EAAEH,EAAE,OAAAR,GAAwC,qBAA8B,EAAE,uBAAX,OAAgC,EAAE,qBAAqB,EACrWA,EACR,CAEA,IAAIY,GAAuC,CAAA,EAE3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUA,IAAIC,GAEJ,SAASC,IAA+C,CACvD,OAAID,KACJA,GAAkD,EAE9C,QAAQ,IAAI,WAAa,cAC1B,UAAW,CAIZ,OAAO,+BAAmC,KAC1C,OAAO,+BAA+B,6BACpC,YAEF,+BAA+B,4BAA4B,IAAI,KAAO,EAE9D,IAAIE,EAAUZ,EAEpBa,EAAuBD,EAAQ,mDAEnC,SAASjX,EAAMmX,EAAQ,CAEnB,CACE,QAASC,EAAQ,UAAU,OAAQ5oB,EAAO,IAAI,MAAM4oB,EAAQ,EAAIA,EAAQ,EAAI,CAAC,EAAGC,EAAQ,EAAGA,EAAQD,EAAOC,IACxG7oB,EAAK6oB,EAAQ,CAAC,EAAI,UAAUA,CAAK,EAGnCC,EAAa,QAASH,EAAQ3oB,CAAI,CACnC,CAEJ,CAED,SAAS8oB,EAAaC,EAAOJ,EAAQ3oB,EAAM,CAGzC,CACE,IAAIgpB,EAAyBN,EAAqB,uBAC9CO,EAAQD,EAAuB,mBAE/BC,IAAU,KACZN,GAAU,KACV3oB,EAAOA,EAAK,OAAO,CAACipB,CAAK,CAAC,GAI5B,IAAIC,EAAiBlpB,EAAK,IAAI,SAAUqC,EAAM,CAC5C,OAAO,OAAOA,CAAI,CACzB,CAAM,EAED6mB,EAAe,QAAQ,YAAcP,CAAM,EAI3C,SAAS,UAAU,MAAM,KAAK,QAAQI,CAAK,EAAG,QAASG,CAAc,CACtE,CACF,CAMD,SAASC,EAAGnE,EAAGC,EAAG,CAChB,OAAOD,IAAMC,IAAMD,IAAM,GAAK,EAAIA,IAAM,EAAIC,IAAMD,IAAMA,GAAKC,IAAMA,CAEpE,CAED,IAAImE,EAAW,OAAO,OAAO,IAAO,WAAa,OAAO,GAAKD,EAIzDE,EAAWZ,EAAQ,SACnBa,EAAYb,EAAQ,UACpBc,EAAkBd,EAAQ,gBAC1Be,EAAgBf,EAAQ,cACxBgB,EAAoB,GACpBC,EAA6B,GAWjC,SAASC,EAAqBC,EAAWC,EAIzCC,EAAmB,CAEVL,GACChB,EAAQ,kBAAoB,SAC9BgB,EAAoB,GAEpBjY,EAAM,gMAA+M,GAS3N,IAAI/O,EAAQonB,IAGV,GAAI,CAACH,EAA4B,CAC/B,IAAIK,EAAcF,IAEbT,EAAS3mB,EAAOsnB,CAAW,IAC9BvY,EAAM,sEAAsE,EAE5EkY,EAA6B,GAEhC,CAiBH,IAAIM,EAAYX,EAAS,CACvB,KAAM,CACJ,MAAO5mB,EACP,YAAaonB,CACd,CACN,CAAI,EACGI,EAAOD,EAAU,CAAC,EAAE,KACpBE,EAAcF,EAAU,CAAC,EAK7B,OAAAT,EAAgB,UAAY,CAC1BU,EAAK,MAAQxnB,EACbwnB,EAAK,YAAcJ,EAKfM,EAAuBF,CAAI,GAE7BC,EAAY,CACV,KAAMD,CACf,CAAQ,CAEJ,EAAE,CAACL,EAAWnnB,EAAOonB,CAAW,CAAC,EAClCP,EAAU,UAAY,CAGhBa,EAAuBF,CAAI,GAE7BC,EAAY,CACV,KAAMD,CACf,CAAQ,EAGH,IAAIG,EAAoB,UAAY,CAO9BD,EAAuBF,CAAI,GAE7BC,EAAY,CACV,KAAMD,CACjB,CAAU,CAEV,EAGK,OAAOL,EAAUQ,CAAiB,CACvC,EAAM,CAACR,CAAS,CAAC,EACdJ,EAAc/mB,CAAK,EACZA,CACR,CAED,SAAS0nB,EAAuBF,EAAM,CACpC,IAAII,EAAoBJ,EAAK,YACzBK,EAAYL,EAAK,MAErB,GAAI,CACF,IAAIM,EAAYF,IAChB,MAAO,CAACjB,EAASkB,EAAWC,CAAS,CACtC,MAAe,CACd,MAAO,EACR,CACF,CAED,SAASC,EAAuBZ,EAAWC,EAAaC,EAAmB,CAKzE,OAAOD,EAAW,CACnB,CAED,IAAIY,EAAe,OAAO,OAAW,KAAe,OAAO,OAAO,SAAa,KAAe,OAAO,OAAO,SAAS,cAAkB,IAEnIC,EAAsB,CAACD,EAEvBhD,EAAOiD,EAAsBF,EAAyBb,EACtDgB,EAAyBlC,EAAQ,uBAAyB,OAAYA,EAAQ,qBAAuBhB,EAEzGa,GAAqC,qBAAuBqC,EAG1D,OAAO,+BAAmC,KAC1C,OAAO,+BAA+B,4BACpC,YAEF,+BAA+B,2BAA2B,IAAI,KAAO,CAGxE,KAEQrC,EACR,CAEI,QAAQ,IAAI,WAAa,aAC3Bb,GAAK,QAAUG,KAEfH,GAAK,QAAUe,KAGjB,IAAIoC,GAAcnD,GAAK,QAEvB,MAAMoD,GAAY,IAAIC,IACVxnB,GAAS,CACbwnB,EAAK,QAAQC,GAAO,CACZ,OAAOA,GAAQ,WACfA,EAAIznB,CAAI,EAEHynB,IACLA,EAAI,QAAUznB,EAE9B,CAAS,CACT,EAKM0nB,GAAU,CAAC,CAAE,iBAAAC,KAAwB,CAEvC,MAAMC,EAAYN,GAAY,qBAAqBK,EAAiB,UAAWA,EAAiB,YAAaA,EAAiB,iBAAiB,EAE/I,OAAQpD,EAAM,cAAcA,EAAM,SAAU,KAAM,OAAO,OAAOqD,CAAS,CAAC,CAC9E,EACA,SAASC,IAAc,CACnB,MAAMC,EAAc,IAAI,IACxB,IAAIF,EAAY,CAAA,EAChB,MAAO,CAIH,UAAUjrB,EAAU,CAChB,OAAAmrB,EAAY,IAAInrB,CAAQ,EACjB,IAAM,CACTmrB,EAAY,OAAOnrB,CAAQ,CAC3C,CACS,EACD,aAAc,CACV,OAAOirB,CACV,EACD,mBAAoB,CAChB,OAAOA,CACV,EAID,YAAYG,EAAIC,EAAU,CACtBJ,EAAY,CACR,GAAGA,EACH,CAACG,CAAE,EAAGE,GAAS,aAAaD,EAAS,aAAcA,EAAS,QAASD,CAAE,CACvF,EACYD,EAAY,QAAQI,GAAcA,EAAY,CAAA,CACjD,EAID,eAAeH,EAAI,CACf,MAAMI,EAAgB,CAAE,GAAGP,GAC3B,OAAOO,EAAcJ,CAAE,EACvBH,EAAYO,EACZL,EAAY,QAAQI,GAAcA,EAAY,CAAA,CACjD,CACT,CACA,CACA,MAAME,WAA0B7D,EAAM,SAAU,CAC5C,YAAYpoB,EAAO,CACf,IAAImE,EACJ,MAAMnE,CAAK,EACX,KAAK,iBAAmBooB,EAAM,YAC9B,KAAK,YAAc,GACnB,KAAK,MAAQ,CACT,+BAAgC,GAAS,GAAAjkB,EAAKnE,EAAM,UAAY,MAAQmE,IAAO,SAAkBA,EAAG,iBAChH,CACK,CACD,mBAAoB,CAChB,KAAK,KAAI,CACZ,CACD,oBAAqB,CACjB,KAAK,KAAI,CACZ,CACD,MAAO,CACH,MAAMjE,EAAS,KAAK,MAAM,OAC1B,GAAIA,GAAU,CAACA,EAAO,aAAeA,EAAO,QAAQ,QAAS,CACzD,GAAIA,EAAO,iBACP,OAEJ,MAAM+mB,EAAU,KAAK,iBAAiB,QACtCA,EAAQ,OAAO,GAAG/mB,EAAO,QAAQ,QAAQ,UAAU,EACnDA,EAAO,WAAW,CACd,QAAA+mB,CAChB,CAAa,EACD/mB,EAAO,iBAAmBwrB,KAErB,KAAK,MAAM,iCAEZ,KAAK,8BAAgCxrB,EAAO,iBAAiB,UAAU,IAAM,CACzE,KAAK,SAASgsB,GACLA,EAAU,+BAKRA,EAJI,CACH,+BAAgC,EAChE,CAGqB,EAEG,KAAK,+BACL,KAAK,8BAA6B,CAE1D,CAAiB,GAELhsB,EAAO,gBAAe,EACtB,KAAK,YAAc,EACtB,CACJ,CACD,sBAAuB,CACnB,MAAMA,EAAS,KAAK,MAAM,OAc1B,GAbI,CAACA,IAGL,KAAK,YAAc,GACdA,EAAO,aACRA,EAAO,KAAK,SAAS,CACjB,UAAW,CAAE,CAC7B,CAAa,EAED,KAAK,+BACL,KAAK,8BAA6B,EAEtCA,EAAO,iBAAmB,KACtB,CAACA,EAAO,QAAQ,QAAQ,YACxB,OAEJ,MAAMisB,EAAa,SAAS,cAAc,KAAK,EAC/CA,EAAW,OAAO,GAAGjsB,EAAO,QAAQ,QAAQ,UAAU,EACtDA,EAAO,WAAW,CACd,QAASisB,CACrB,CAAS,CACJ,CACD,QAAS,CACL,KAAM,CAAE,OAAAjsB,EAAQ,SAAAksB,EAAU,GAAGC,CAAM,EAAG,KAAK,MAC3C,OAAQjE,EAAM,cAAcA,EAAM,SAAU,KACxCA,EAAM,cAAc,MAAO,CAAE,IAAKgD,GAAUgB,EAAU,KAAK,gBAAgB,EAAG,GAAGC,CAAI,CAAE,GACtFnsB,GAAW,KAA4B,OAASA,EAAO,mBAAqBkoB,EAAM,cAAcmD,GAAS,CAAE,iBAAkBrrB,EAAO,gBAAkB,CAAA,CAAC,CAC/J,CACL,CAEA,MAAMosB,GAAuBC,EAAU,WAAC,CAACvsB,EAAOsrB,IAAQ,CACpD,MAAMvoB,EAAMqlB,EAAM,QAAQ,IACf,KAAK,MAAM,KAAK,OAAM,EAAK,UAAU,EAAE,WAE/C,CAACpoB,EAAM,MAAM,CAAC,EAEjB,OAAOooB,EAAM,cAAc6D,GAAmB,CAC1C,IAAAlpB,EACA,SAAUuoB,EACV,GAAGtrB,CACX,CAAK,CACL,CAAC,EACKwsB,GAAgBpE,EAAM,KAAKkE,EAAoB,EAErD,IAAIG,GAAe,CAAC,QAAS,CAAA,CAAE,EAE3BC,GAA8B,CAAA,EAElC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUA,IAAIC,GAEJ,SAASC,IAAsC,CAC9C,GAAID,GAAwC,OAAOD,GACnDC,GAAyC,EAC1C,IAAItE,EAAED,EAAM5J,EAAE2M,GAAY,SAAS3C,EAAExe,EAAEC,EAAE,CAAC,OAAOD,IAAIC,IAAQD,IAAJ,GAAO,EAAEA,IAAI,EAAEC,IAAID,IAAIA,GAAGC,IAAIA,CAAC,CAAC,IAAIwe,EAAe,OAAO,OAAO,IAA3B,WAA8B,OAAO,GAAGD,EAAEG,EAAEnK,EAAE,qBAAqBoK,EAAEP,EAAE,OAAOwE,EAAExE,EAAE,UAAU9U,EAAE8U,EAAE,QAAQyE,EAAEzE,EAAE,cAC1M,OAAAqE,GAA4B,iCAAiC,SAAS1iB,EAAEC,EAAExF,EAAE8jB,EAAEwE,EAAE,CAAC,IAAIrE,EAAEE,EAAE,IAAI,EAAE,GAAUF,EAAE,UAAT,KAAiB,CAAC,IAAIxT,EAAE,CAAC,SAAS,GAAG,MAAM,IAAI,EAAEwT,EAAE,QAAQxT,CAAE,MAAMA,EAAEwT,EAAE,QAAQA,EAAEnV,EAAE,UAAU,CAAC,SAASvJ,EAAEA,EAAE,CAAC,GAAG,CAAC0e,EAAE,CAAiB,GAAhBA,EAAE,GAAGxK,EAAElU,EAAEA,EAAEue,EAAEve,CAAC,EAAc+iB,IAAT,QAAY7X,EAAE,SAAS,CAAC,IAAIjL,EAAEiL,EAAE,MAAM,GAAG6X,EAAE9iB,EAAED,CAAC,EAAE,OAAOse,EAAEre,CAAC,CAAC,OAAOqe,EAAEte,CAAC,CAAK,GAAJC,EAAEqe,EAAKG,EAAEvK,EAAElU,CAAC,EAAE,OAAOC,EAAE,IAAIxF,EAAE8jB,EAAEve,CAAC,EAAE,OAAY+iB,IAAT,QAAYA,EAAE9iB,EAAExF,CAAC,EAASwF,GAAEiU,EAAElU,EAASse,EAAE7jB,EAAC,CAAC,IAAIikB,EAAE,GAAGxK,EAAEoK,EAAE3D,EAAWlgB,IAAT,OAAW,KAAKA,EAAE,MAAO,CAAC,UAAU,CAAC,OAAOuF,EAAEC,EAAC,CAAE,CAAC,EAAS0a,IAAP,KAAS,OAAO,UAAU,CAAC,OAAO3a,EAAE2a,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC1a,EAAExF,EAAE8jB,EAAEwE,CAAC,CAAC,EAAE,IAAI7O,EAAEyK,EAAE3e,EAAE0e,EAAE,CAAC,EAAEA,EAAE,CAAC,CAAC,EAC3gB,OAAAmE,EAAE,UAAU,CAAC3X,EAAE,SAAS,GAAGA,EAAE,MAAMgJ,CAAE,EAAE,CAACA,CAAC,CAAC,EAAE4O,EAAE5O,CAAC,EAASA,CAAC,EAClDwO,EACR,CAEA,IAAIM,GAA2B,CAAA,EAE/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAUA,IAAIC,GAEJ,SAASC,IAAmC,CAC3C,OAAID,KACJA,GAAsC,EAElC,QAAQ,IAAI,WAAa,cAC1B,UAAW,CAIZ,OAAO,+BAAmC,KAC1C,OAAO,+BAA+B,6BACpC,YAEF,+BAA+B,4BAA4B,IAAI,KAAO,EAE9D,IAAIjE,EAAUZ,EACpBJ,EAAOmD,GAMX,SAASzB,EAAGnE,EAAGC,EAAG,CAChB,OAAOD,IAAMC,IAAMD,IAAM,GAAK,EAAIA,IAAM,EAAIC,IAAMD,IAAMA,GAAKC,IAAMA,CAEpE,CAED,IAAImE,EAAW,OAAO,OAAO,IAAO,WAAa,OAAO,GAAKD,EAEzDQ,EAAuBlC,EAAK,qBAI5BmF,EAASnE,EAAQ,OACjBa,EAAYb,EAAQ,UACpBoE,EAAUpE,EAAQ,QAClBe,EAAgBf,EAAQ,cAE5B,SAASqE,EAAiClD,EAAWC,EAAaC,EAAmBpI,EAAUqL,EAAS,CAEtG,IAAIC,EAAUJ,EAAO,IAAI,EACrB3C,EAEA+C,EAAQ,UAAY,MACtB/C,EAAO,CACL,SAAU,GACV,MAAO,IACd,EACK+C,EAAQ,QAAU/C,GAElBA,EAAO+C,EAAQ,QAGjB,IAAIC,EAAWJ,EAAQ,UAAY,CAKjC,IAAIK,EAAU,GACVC,EACAC,EAEAC,EAAmB,SAAUC,EAAc,CAC7C,GAAI,CAACJ,EAAS,CAEZA,EAAU,GACVC,EAAmBG,EAEnB,IAAIC,EAAiB7L,EAAS4L,CAAY,EAE1C,GAAIP,IAAY,QAIV9C,EAAK,SAAU,CACjB,IAAIuD,EAAmBvD,EAAK,MAE5B,GAAI8C,EAAQS,EAAkBD,CAAc,EAC1C,OAAAH,EAAoBI,EACbA,CAEV,CAGH,OAAAJ,EAAoBG,EACbA,CACR,CAID,IAAIE,EAAeN,EACfO,EAAgBN,EAEpB,GAAIhE,EAASqE,EAAcH,CAAY,EAErC,OAAOI,EAKT,IAAIC,EAAgBjM,EAAS4L,CAAY,EASzC,OAAIP,IAAY,QAAaA,EAAQW,EAAeC,CAAa,EACxDD,GAGTP,EAAmBG,EACnBF,EAAoBO,EACbA,EACd,EAISC,EAAyB9D,IAAsB,OAAY,KAAOA,EAElE+D,EAA0B,UAAY,CACxC,OAAOR,EAAiBxD,EAAW,CAAE,CAC5C,EAESiE,EAAgCF,IAA2B,KAAO,OAAY,UAAY,CAC5F,OAAOP,EAAiBO,EAAsB,CAAE,CACvD,EACK,MAAO,CAACC,EAAyBC,CAA6B,CAC/D,EAAE,CAACjE,EAAaC,EAAmBpI,EAAUqL,CAAO,CAAC,EAClDgB,EAAed,EAAS,CAAC,EACzBe,EAAqBf,EAAS,CAAC,EAE/BxqB,EAAQknB,EAAqBC,EAAWmE,EAAcC,CAAkB,EAC5E,OAAA1E,EAAU,UAAY,CACpBW,EAAK,SAAW,GAChBA,EAAK,MAAQxnB,CAClB,EAAM,CAACA,CAAK,CAAC,EACV+mB,EAAc/mB,CAAK,EACZA,CACR,CAEDgqB,GAAyB,iCAAmCK,EAG1D,OAAO,+BAAmC,KAC1C,OAAO,+BAA+B,4BACpC,YAEF,+BAA+B,2BAA2B,IAAI,KAAO,CAGxE,KAEQL,EACR,CAEI,QAAQ,IAAI,WAAa,aAC3BP,GAAa,QAAUG,KAEvBH,GAAa,QAAUS,KAGzB,IAAIsB,GAAsB/B,GAAa,QAMvC,MAAMgC,EAAmB,CACrB,YAAYC,EAAe,CACvB,KAAK,kBAAoB,EACzB,KAAK,sBAAwB,EAC7B,KAAK,YAAc,IAAI,IACvB,KAAK,OAASA,EACd,KAAK,aAAe,CAAE,OAAQA,EAAe,kBAAmB,GAChE,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,MAAQ,KAAK,MAAM,KAAK,IAAI,EACjC,KAAK,UAAY,KAAK,UAAU,KAAK,IAAI,CAC5C,CAID,aAAc,CACV,OAAI,KAAK,oBAAsB,KAAK,sBACzB,KAAK,cAEhB,KAAK,sBAAwB,KAAK,kBAClC,KAAK,aAAe,CAAE,OAAQ,KAAK,OAAQ,kBAAmB,KAAK,mBAC5D,KAAK,aACf,CAID,mBAAoB,CAChB,MAAO,CAAE,OAAQ,KAAM,kBAAmB,CAAC,CAC9C,CAID,UAAUluB,EAAU,CAChB,YAAK,YAAY,IAAIA,CAAQ,EACtB,IAAM,CACT,KAAK,YAAY,OAAOA,CAAQ,CAC5C,CACK,CAID,MAAMmuB,EAAY,CAEd,GADA,KAAK,OAASA,EACV,KAAK,OAAQ,CAMb,MAAMztB,EAAK,IAAM,CACb,KAAK,mBAAqB,EAC1B,KAAK,YAAY,QAAQV,GAAYA,EAAU,CAAA,CAC/D,EACkBouB,EAAgB,KAAK,OAC3B,OAAAA,EAAc,GAAG,cAAe1tB,CAAE,EAC3B,IAAM,CACT0tB,EAAc,IAAI,cAAe1tB,CAAE,CACnD,CACS,CAEJ,CACL,CACA,SAAS2tB,GAAepiB,EAAS,CAC7B,KAAM,CAACqiB,CAAc,EAAIlF,WAAS,IAAM,IAAI6E,GAAmBhiB,EAAQ,MAAM,CAAC,EAExEsiB,EAAgBP,GAAoB,iCAAiCM,EAAe,UAAWA,EAAe,YAAaA,EAAe,kBAAmBriB,EAAQ,SAAUA,EAAQ,UAAU,EACvMod,OAAAA,EAAAA,UAAU,IACCiF,EAAe,MAAMriB,EAAQ,MAAM,EAC3C,CAACA,EAAQ,OAAQqiB,CAAc,CAAC,EACnC/E,EAAa,cAACgF,CAAa,EACpBA,CACX,CAEA,MAAMC,GAAQ,QAAQ,IAAI,WAAa,aACjCC,GAAQ,OAAO,OAAW,IAC1BC,GAASD,IAAS,GAAQ,OAAO,OAAW,KAAe,OAAO,MAIxE,MAAME,EAAsB,CACxB,YAAY1iB,EAAS,CAIjB,KAAK,OAAS,KAKd,KAAK,cAAgB,IAAI,IAIzB,KAAK,mBAAqB,GAI1B,KAAK,aAAe,KAIpB,KAAK,WAAa,GAClB,KAAK,QAAUA,EACf,KAAK,cAAgB,IAAI,IACzB,KAAK,UAAU,KAAK,iBAAkB,CAAA,EACtC,KAAK,gBAAe,EACpB,KAAK,UAAY,KAAK,UAAU,KAAK,IAAI,EACzC,KAAK,kBAAoB,KAAK,kBAAkB,KAAK,IAAI,EACzD,KAAK,UAAY,KAAK,UAAU,KAAK,IAAI,EACzC,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,EACrD,KAAK,SAAW,KAAK,SAAS,KAAK,IAAI,EACvC,KAAK,aAAe,KAAK,aAAa,KAAK,IAAI,CAClD,CACD,UAAUvM,EAAQ,CACd,KAAK,OAASA,EACd,KAAK,WAAa,KAAK,SAAS,SAAS,EAAE,EAAE,MAAM,EAAG,CAAC,EAEvD,KAAK,cAAc,QAAQkvB,GAAMA,EAAI,CAAA,CACxC,CACD,kBAAmB,CACf,GAAI,KAAK,QAAQ,QAAQ,oBAAsB,OAC3C,OAAIH,IAASC,IAELF,IAKA,QAAQ,KAAK,0HAA0H,EAGpI,MAGJ,KAAK,eAEhB,GAAI,KAAK,QAAQ,QAAQ,mBAAqBC,IAASD,GAEnD,MAAM,IAAI,MAAM,kOAAkO,EAEtP,OAAI,KAAK,QAAQ,QAAQ,kBACd,KAAK,eAET,IACV,CAID,cAAe,CACX,MAAMK,EAAiB,CACnB,GAAG,KAAK,QAAQ,QAEhB,eAAgB,IAAI9uB,IAAS,CAAE,IAAI4D,EAAI6B,EAAI,OAAQA,GAAM7B,EAAK,KAAK,QAAQ,SAAS,kBAAoB,MAAQ6B,IAAO,OAAS,OAASA,EAAG,KAAK7B,EAAI,GAAG5D,CAAI,CAAI,EAChK,OAAQ,IAAIA,IAAS,CAAE,IAAI4D,EAAI6B,EAAI,OAAQA,GAAM7B,EAAK,KAAK,QAAQ,SAAS,UAAY,MAAQ6B,IAAO,OAAS,OAASA,EAAG,KAAK7B,EAAI,GAAG5D,CAAI,CAAI,EAChJ,SAAU,IAAIA,IAAS,CAAE,IAAI4D,EAAI6B,EAAI,OAAQA,GAAM7B,EAAK,KAAK,QAAQ,SAAS,YAAc,MAAQ6B,IAAO,OAAS,OAASA,EAAG,KAAK7B,EAAI,GAAG5D,CAAI,CAAI,EACpJ,UAAW,IAAIA,IAAS,CAAE,IAAI4D,EAAI6B,EAAI,OAAQA,GAAM7B,EAAK,KAAK,QAAQ,SAAS,aAAe,MAAQ6B,IAAO,OAAS,OAASA,EAAG,KAAK7B,EAAI,GAAG5D,CAAI,CAAI,EACtJ,QAAS,IAAIA,IAAS,CAAE,IAAI4D,EAAI6B,EAAI,OAAQA,GAAM7B,EAAK,KAAK,QAAQ,SAAS,WAAa,MAAQ6B,IAAO,OAAS,OAASA,EAAG,KAAK7B,EAAI,GAAG5D,CAAI,CAAI,EAClJ,kBAAmB,IAAIA,IAAS,CAAE,IAAI4D,EAAI6B,EAAI,OAAQA,GAAM7B,EAAK,KAAK,QAAQ,SAAS,qBAAuB,MAAQ6B,IAAO,OAAS,OAASA,EAAG,KAAK7B,EAAI,GAAG5D,CAAI,CAAI,EACtK,cAAe,IAAIA,IAAS,CAAE,IAAI4D,EAAI6B,EAAI,OAAQA,GAAM7B,EAAK,KAAK,QAAQ,SAAS,iBAAmB,MAAQ6B,IAAO,OAAS,OAASA,EAAG,KAAK7B,EAAI,GAAG5D,CAAI,CAAI,EAC9J,SAAU,IAAIA,IAAS,CAAE,IAAI4D,EAAI6B,EAAI,OAAQA,GAAM7B,EAAK,KAAK,QAAQ,SAAS,YAAc,MAAQ6B,IAAO,OAAS,OAASA,EAAG,KAAK7B,EAAI,GAAG5D,CAAI,CAAI,EACpJ,eAAgB,IAAIA,IAAS,CAAE,IAAI4D,EAAI6B,EAAI,OAAQA,GAAM7B,EAAK,KAAK,QAAQ,SAAS,kBAAoB,MAAQ6B,IAAO,OAAS,OAASA,EAAG,KAAK7B,EAAI,GAAG5D,CAAI,CAAI,CAC5K,EAGQ,OAFe,IAAIsiB,GAAOwM,CAAc,CAG3C,CAID,WAAY,CACR,OAAO,KAAK,MACf,CAID,mBAAoB,CAChB,OAAO,IACV,CAID,UAAUC,EAAe,CACrB,YAAK,cAAc,IAAIA,CAAa,EAC7B,IAAM,CACT,KAAK,cAAc,OAAOA,CAAa,CACnD,CACK,CAMD,SAASC,EAAM,CAEX,MAAO,KACH,KAAK,mBAAqB,GAE1B,aAAa,KAAK,2BAA2B,EACzC,KAAK,QAAU,CAAC,KAAK,OAAO,aAAeA,EAAK,SAAW,EAG3D,KAAK,OAAO,WAAW,KAAK,QAAQ,OAAO,EAQ3C,KAAK,sBAAsBA,CAAI,EAE5B,IAAM,CACT,KAAK,mBAAqB,GAC1B,KAAK,gBAAe,CACpC,EAEK,CAID,sBAAsBA,EAAM,CACxB,GAAI,KAAK,QAAU,CAAC,KAAK,OAAO,YAAa,CAEzC,GAAI,KAAK,eAAiB,KAAM,CAE5B,KAAK,aAAeA,EACpB,MACH,CAGD,GAFqB,KAAK,aAAa,SAAWA,EAAK,QAChD,KAAK,aAAa,MAAM,CAACC,EAAKzpB,IAAUypB,IAAQD,EAAKxpB,CAAK,CAAC,EAG9D,MAEP,CACG,KAAK,QAAU,CAAC,KAAK,OAAO,aAE5B,KAAK,OAAO,UAEhB,KAAK,UAAU,KAAK,aAAc,CAAA,EAElC,KAAK,aAAewpB,CACvB,CAMD,iBAAkB,CACd,MAAME,EAAoB,KAAK,WACzBb,EAAgB,KAAK,OAE3B,KAAK,4BAA8B,WAAW,IAAM,CAChD,GAAI,KAAK,oBAAsB,KAAK,aAAea,EAAmB,CAE9Db,GAEAA,EAAc,WAAW,KAAK,QAAQ,OAAO,EAEjD,MACH,CACGA,GAAiB,CAACA,EAAc,cAChCA,EAAc,QAAO,EACjB,KAAK,aAAea,GACpB,KAAK,UAAU,IAAI,EAK9B,EAAE,CAAC,CACP,CACL,CACA,SAASC,GAAUjjB,EAAU,GAAI8iB,EAAO,CAAA,EAAI,CACxC,MAAMI,EAAoBxC,SAAO1gB,CAAO,EACxCkjB,EAAkB,QAAUljB,EAC5B,KAAM,CAACmjB,CAAe,EAAIhG,EAAQ,SAAC,IAAM,IAAIuF,GAAsBQ,CAAiB,CAAC,EAC/EzvB,EAASirB,GAAY,qBAAqByE,EAAgB,UAAWA,EAAgB,UAAWA,EAAgB,iBAAiB,EACvI7F,OAAAA,EAAa,cAAC7pB,CAAM,EAGpB2pB,EAAAA,UAAU+F,EAAgB,SAASL,CAAI,CAAC,EAGxCV,GAAe,CACX,OAAA3uB,EACA,SAAU,CAAC,CAAE,kBAAA2vB,KACLpjB,EAAQ,8BAAgC,GAEjC,KAGPA,EAAQ,mBAAqBojB,IAAsB,EAC5C,EAEJA,EAAoB,CAEvC,CAAK,EACM3vB,CACX,CAEA,MAAM4vB,GAAgBC,EAAAA,cAAc,CAChC,OAAQ,IACZ,CAAC,EACsBD,GAAc,SAIrC,MAAME,GAAmB,IAAMC,aAAWH,EAAa,EAkBjDI,GAAclwB,GAAU,CAC1B,KAAM,CAACinB,EAASkJ,CAAU,EAAIvG,EAAQ,SAAC,IAAI,EACrC,CAAE,OAAQgF,CAAe,EAAGoB,GAAgB,EAClDnG,OAAAA,EAAAA,UAAU,IAAM,CACZ,IAAI1lB,EAIJ,GAHI,CAAC8iB,GAGC,GAAA9iB,EAAKnE,EAAM,UAAY,MAAQmE,IAAO,SAAkBA,EAAG,aAAiByqB,GAAkB,MAA4CA,EAAc,YAC1J,OAEJ,KAAM,CAAE,UAAAwB,EAAY,aAAc,OAAAlwB,EAAQ,aAAAgnB,EAAe,GAAI,YAAAC,EAAa,WAAAC,EAAa,IAAO,EAAGpnB,EAC3FqwB,EAAanwB,GAAU0uB,EAC7B,GAAI,CAACyB,EAAY,CACb,QAAQ,KAAK,kGAAkG,EAC/G,MACH,CACD,MAAMxpB,EAASkhB,GAAiB,CAC5B,YAAAZ,EACA,OAAQkJ,EACR,QAAApJ,EACA,UAAAmJ,EACA,WAAAhJ,EACA,aAAAF,CACZ,CAAS,EACD,OAAAmJ,EAAW,eAAexpB,CAAM,EACzB,IAAMwpB,EAAW,iBAAiBD,CAAS,CACrD,EAAE,CAACpwB,EAAM,OAAQ4uB,EAAe3H,CAAO,CAAC,EACjCmB,EAAM,cAAc,MAAO,CAAE,IAAK+H,EAAY,UAAWnwB,EAAM,UAAW,MAAO,CAAE,WAAY,QAAU,CAAA,EAAIA,EAAM,QAAQ,CACvI,EAoCMswB,GAAuBP,EAAAA,cAAc,CACvC,YAAa,MACjB,CAAC,EACKQ,GAAmB,IAAMN,aAAWK,EAAoB,EAaxDE,GAAkBpI,EAAM,WAAW,CAACpoB,EAAOsrB,IAAQ,CACrD,KAAM,CAAE,YAAAmF,GAAgBF,KAClBG,EAAM1wB,EAAM,IAAM,MACxB,OAEAooB,EAAM,cAAcsI,EAAK,CAAE,GAAG1wB,EAAO,IAAKsrB,EAAK,yBAA0B,GAAI,YAAamF,EAAa,MAAO,CACtG,WAAY,SACZ,GAAGzwB,EAAM,KACZ,CAAA,CAAE,CACX,CAAC,EAOD,SAAS2wB,GAAiBC,EAAW,CACjC,MAAO,CAAC,EAAE,OAAOA,GAAc,YACxBA,EAAU,WACVA,EAAU,UAAU,iBAC/B,CAMA,SAASC,GAAsBD,EAAW,CACtC,IAAIzsB,EACJ,OAAU,OAAOysB,GAAc,YACtBzsB,EAAKysB,EAAU,YAAc,MAAQzsB,IAAO,OAAS,OAASA,EAAG,SAAU,KAAM,2BAC9F,CAYA,MAAM2sB,EAAc,CAChB,YAAY9L,EAAW,CAAE,OAAA9kB,EAAQ,MAAAF,EAAQ,CAAA,EAAI,GAAA+wB,EAAK,MAAO,UAAAC,EAAY,GAAI,MAAA3Q,CAAK,EAAK,CAC/E,KAAK,IAAM,KACX,KAAK,GAAK,KAAK,MAAM,KAAK,SAAW,UAAU,EAAE,WACjD,KAAK,UAAY2E,EACjB,KAAK,OAAS9kB,EACd,KAAK,MAAQF,EACb,KAAK,QAAU,SAAS,cAAc+wB,CAAE,EACxC,KAAK,QAAQ,UAAU,IAAI,gBAAgB,EACvCC,GACA,KAAK,QAAQ,UAAU,IAAI,GAAGA,EAAU,MAAM,GAAG,CAAC,EAElD3Q,GACA,OAAO,KAAKA,CAAK,EAAE,QAAQtd,GAAO,CAC9B,KAAK,QAAQ,aAAaA,EAAKsd,EAAMtd,CAAG,CAAC,CACzD,CAAa,EAED,KAAK,OAAO,cAGZkuB,GAAAA,UAAU,IAAM,CACZ,KAAK,OAAM,CAC3B,CAAa,EAGD,KAAK,OAAM,CAElB,CACD,QAAS,CACL,IAAI9sB,EACJ,MAAMysB,EAAY,KAAK,UACjB5wB,EAAQ,KAAK,MACbE,EAAS,KAAK,QAChBywB,GAAiBC,CAAS,GAAKC,GAAsBD,CAAS,KAC9D5wB,EAAM,IAAOsrB,GAAQ,CACjB,KAAK,IAAMA,CAC3B,GAEQ,KAAK,aAAelD,EAAM,cAAcwI,EAAW5wB,CAAK,GACvDmE,EAAKjE,GAAW,KAA4B,OAASA,EAAO,oBAAsB,MAAQiE,IAAO,QAAkBA,EAAG,YAAY,KAAK,GAAI,IAAI,CACnJ,CACD,YAAYnE,EAAQ,GAAI,CACpB,KAAK,MAAQ,CACT,GAAG,KAAK,MACR,GAAGA,CACf,EACQ,KAAK,OAAM,CACd,CACD,SAAU,CACN,IAAImE,EACJ,MAAMjE,EAAS,KAAK,QACnBiE,EAAKjE,GAAW,KAA4B,OAASA,EAAO,oBAAsB,MAAQiE,IAAO,QAAkBA,EAAG,eAAe,KAAK,EAAE,CAChJ,CACL,CAEA,MAAM+sB,WAAsBnM,EAAS,CACjC,OAAQ,CACJ,MAAM/kB,EAAQ,CACV,OAAQ,KAAK,OACb,KAAM,KAAK,KACX,YAAa,KAAK,YAClB,SAAU,GACV,UAAW,KAAK,UAChB,OAAQ,IAAM,KAAK,OAAQ,EAC3B,iBAAkB,CAACqC,EAAa,CAAA,IAAO,KAAK,iBAAiBA,CAAU,EACvE,WAAY,IAAM,KAAK,WAAY,CAC/C,EACQ,GAAI,CAAC,KAAK,UAAU,YAAa,CAC7B,MAAM8uB,EAAuBzK,GAClBA,EAAO,OAAO,CAAC,EAAE,YAAW,EAAKA,EAAO,UAAU,CAAC,EAE9D,KAAK,UAAU,YAAcyK,EAAoB,KAAK,UAAU,IAAI,CACvE,CAOD,MAAM7vB,EAAU,CAAE,YANE,KAAK,YAAY,KAAK,IAAI,EAMf,mBALJ2lB,GAAW,CAC9BA,GAAW,KAAK,mBAAqBA,EAAQ,aAAe,KAAK,mBACjEA,EAAQ,YAAY,KAAK,iBAAiB,CAE1D,GAEc2J,EAAY,KAAK,UAGjBQ,EAAwBhJ,EAAM,KAAKiJ,GAC7BjJ,EAAM,cAAckI,GAAqB,SAAU,CAAE,MAAOhvB,CAAS,EAAE8mB,EAAM,cAAcwI,EAAWS,CAAc,CAAC,CAChI,EACDD,EAAsB,YAAc,gBAChC,KAAK,KAAK,OACV,KAAK,kBAAoB,KAEpB,KAAK,QAAQ,qBAClB,KAAK,kBAAoB,SAAS,cAAc,KAAK,QAAQ,oBAAoB,EAGjF,KAAK,kBAAoB,SAAS,cAAc,KAAK,KAAK,SAAW,OAAS,KAAK,EAEnF,KAAK,oBAIL,KAAK,kBAAkB,MAAM,WAAa,WAE9C,IAAIL,EAAK,KAAK,KAAK,SAAW,OAAS,MACnC,KAAK,QAAQ,KACbA,EAAK,KAAK,QAAQ,IAEtB,KAAM,CAAE,UAAAC,EAAY,IAAO,KAAK,QAChC,KAAK,sBAAwB,KAAK,sBAAsB,KAAK,IAAI,EACjE,KAAK,OAAO,GAAG,kBAAmB,KAAK,qBAAqB,EAC5D,KAAK,SAAW,IAAIF,GAAcM,EAAuB,CACrD,OAAQ,KAAK,OACb,MAAApxB,EACA,GAAA+wB,EACA,UAAW,QAAQ,KAAK,KAAK,KAAK,IAAI,IAAIC,CAAS,GAAG,KAAM,EAC5D,MAAO,KAAK,QAAQ,KAChC,CAAS,CACJ,CACD,IAAI,KAAM,CACN,IAAI7sB,EACJ,GAAI,KAAK,SAAS,QAAQ,mBACnB,EAAG,GAAAA,EAAK,KAAK,SAAS,QAAQ,qBAAuB,MAAQA,IAAO,SAAkBA,EAAG,aAAa,wBAAwB,GACjI,MAAM,MAAM,8DAA8D,EAE9E,OAAO,KAAK,SAAS,OACxB,CACD,IAAI,YAAa,CACb,OAAI,KAAK,KAAK,OACH,KAEJ,KAAK,iBACf,CACD,uBAAwB,CACpB,KAAM,CAAE,KAAAuC,EAAM,GAAAC,CAAI,EAAG,KAAK,OAAO,MAAM,UACvC,GAAID,GAAQ,KAAK,OAAM,GAAMC,GAAM,KAAK,SAAW,KAAK,KAAK,SAAU,CACnE,GAAI,KAAK,SAAS,MAAM,SACpB,OAEJ,KAAK,WAAU,CAClB,KACI,CACD,GAAI,CAAC,KAAK,SAAS,MAAM,SACrB,OAEJ,KAAK,aAAY,CACpB,CACJ,CACD,OAAO9C,EAAM2H,EAAa,CACtB,MAAM8lB,EAAetxB,GAAU,CAC3B,KAAK,SAAS,YAAYA,CAAK,CAC3C,EACQ,GAAI6D,EAAK,OAAS,KAAK,KAAK,KACxB,MAAO,GAEX,GAAI,OAAO,KAAK,QAAQ,QAAW,WAAY,CAC3C,MAAM0tB,EAAU,KAAK,KACfC,EAAiB,KAAK,YAC5B,YAAK,KAAO3tB,EACZ,KAAK,YAAc2H,EACZ,KAAK,QAAQ,OAAO,CACvB,QAAA+lB,EACA,eAAAC,EACA,QAAS3tB,EACT,eAAgB2H,EAChB,YAAa,IAAM8lB,EAAY,CAAE,KAAAztB,EAAM,YAAA2H,CAAW,CAAE,CACpE,CAAa,CACJ,CACD,OAAI3H,IAAS,KAAK,MAAQ,KAAK,cAAgB2H,IAG/C,KAAK,KAAO3H,EACZ,KAAK,YAAc2H,EACnB8lB,EAAY,CAAE,KAAAztB,EAAM,YAAA2H,CAAW,CAAE,GAC1B,EACV,CACD,YAAa,CACT,KAAK,SAAS,YAAY,CACtB,SAAU,EACtB,CAAS,EACD,KAAK,SAAS,QAAQ,UAAU,IAAI,0BAA0B,CACjE,CACD,cAAe,CACX,KAAK,SAAS,YAAY,CACtB,SAAU,EACtB,CAAS,EACD,KAAK,SAAS,QAAQ,UAAU,OAAO,0BAA0B,CACpE,CACD,SAAU,CACN,KAAK,SAAS,UACd,KAAK,OAAO,IAAI,kBAAmB,KAAK,qBAAqB,EAC7D,KAAK,kBAAoB,IAC5B,CACL,CACA,SAASimB,GAAsBzM,EAAWvY,EAAS,CAC/C,OAAQzM,GAICA,EAAM,OAAO,iBAGX,IAAIkxB,GAAclM,EAAWhlB,EAAOyM,CAAO,EAFvC,EAInB,CCjxCA,SAASilB,GAAmBhyB,EAAOuH,EAAO0H,EAAO,CAC7C,MAAMxB,EAAS,CAAA,EACTwkB,EAAOjyB,EAAM,KAAK,CAAC,EACzBiP,EACI,OAAOA,GAAU,UAAYA,GAAS,EAChCA,EACAjP,EAAM,WAAWuH,CAAK,EAClB,KAAK,IAAI,EAAGvH,EAAM,YAAYuH,EAAM,GAAG,EAAI,CAAC,EAC5CvH,EAAM,YAAYuH,EAAM,GAAG,EACzC,MAAM2G,EAAY,IAAIgkB,EAAS,UAAClyB,EAAOuH,EAAO0H,CAAK,EAC7CgB,EAAa/B,EAAU,QAAU,EAAI,EAAI+jB,EAAK,QAAQ/jB,EAAU,KAAK,EAAE,WAAW,CAAC,EACzF,OAAAA,EAAU,OAAO,QAAQ,CAACikB,EAAM9P,IAAW,CACvC,MAAMrb,EAAOiJ,EAAaoS,EACpBpb,EAAKD,EAAOmrB,EAAK,SACvB,GAAInrB,EAAOkH,EAAU,OAASlH,GAAQkH,EAAU,IAC5C,OACJ,MAAM6H,EAAiB,IAAIqc,iBAAeH,EAAK,QAAQjrB,CAAI,EAAGirB,EAAK,QAAQhrB,CAAE,CAAC,EAC9EwG,EAAO,KAAKsI,CAAc,CAClC,CAAK,EACMtI,CACX,CACA,MAAM4kB,EAAkB,CAGpB,YAAYC,EAAQC,EAAM,CAF1BC,GAAA,eACAA,GAAA,aAEI,KAAK,OAASF,EACd,KAAK,KAAOC,CACf,CACD,IAAIxkB,EAAS,CACT,OAAO,IAAIskB,GAAkBtkB,EAAQ,IAAI,KAAK,MAAM,EAAGA,EAAQ,IAAI,KAAK,IAAI,CAAC,CAChF,CACD,QAAQ5N,EAAK,CACT,MAAM4E,EAAI5E,EAAI,QAAQ,KAAK,MAAM,EAC3BsyB,EAAItyB,EAAI,QAAQ,KAAK,IAAI,EAC/B,OAAO,IAAIuyB,EAAmB3tB,EAAG0tB,CAAC,CACrC,CACL,CACA,MAAMC,UAA2BzhB,EAAAA,SAAU,CAEvC,YAAYiY,EAAGnkB,EAAG0tB,EAAGE,EAAI,EAAG,CACxB,KAAM,CAAE,IAAK1J,CAAG,EAAGC,EACbpK,EAAIoK,IAAMnkB,EACV0L,EAAIyY,EAAE,MAAQD,EAAE,QAAQ,MAAQlkB,EAAE,MAAQkkB,EAAE,QAAQ,KACpD3e,EAAIwU,GAAK,CAACrO,EAAIwY,EAAE,QAAQlkB,EAAE,KAAO4tB,EAAI,EAAI,EAAI,GAAG,EAAI5tB,EACpDikB,EAAIlK,GAAKrO,EAAIwY,EAAE,QAAQC,EAAE,KAAOyJ,EAAI,EAAI,EAAI,GAAG,EAAIzJ,EACnD,EAAI8I,GAAmBhJ,EAAE,IAAI1e,CAAC,EAAG0e,EAAE,IAAI1e,CAAC,EAAGmoB,CAAC,EAClD,MAAMnoB,EAAE,KAAO4e,EAAE,IAAM,EAAE,CAAC,EAAE,MAAQ,EAAE,EAAE,OAAS,CAAC,EAAE,IAAK5e,EAAE,KAAO4e,EAAE,IAAM,EAAE,EAAE,OAAS,CAAC,EAAE,IAAM,EAAE,CAAC,EAAE,MAAO,CAAC,EARjHsJ,GAAA,cASI,KAAK,MAAQC,CAChB,CACD,IAAI,KAAM,CACN,OAAO,KAAK,OAAO,KAAK,OAAO,OAAS,CAAC,EAAE,GAC9C,CACD,GAAGG,EAAO,CACN,OAAOA,aAAiBF,GAAsBE,EAAM,MAAM,MAAQ,KAAK,MAAM,KAAOA,EAAM,IAAI,MAAQ,KAAK,IAAI,GAClH,CACD,IAAIzyB,EAAK4N,EAAS,CACd,MAAM0kB,EAAItyB,EAAI,QAAQ4N,EAAQ,IAAI,KAAK,MAAM,CAAC,EACxC4kB,EAAIxyB,EAAI,QAAQ4N,EAAQ,IAAI,KAAK,IAAI,CAAC,EAC5C,OAAO,IAAI2kB,EAAmBD,EAAGE,CAAC,CACrC,CACD,QAAS,CACL,MAAO,CAAE,KAAM,YAAa,OAAQ,KAAK,OAAQ,KAAM,KAAK,KAC/D,CACD,IAAI,YAAa,CACb,OAAO,KAAK,MAAQ,KAAK,MAC5B,CACD,IAAI,aAAc,CACd,MAAO,CAAC,KAAK,UAChB,CACD,iBAAkB,CACd,KAAM,CAAE,IAAKzJ,GAAM,KAAK,MACxB,GAAI,KAAK,YAAc,KAAK,OAAO,OAAS,EAAG,CAC3C,MAAMA,EAAI,KAAK,OAAO,MAAM,EAAG,EAAE,EAC3BnkB,EAAImkB,EAAE,CAAC,EAAE,MACTuJ,EAAIvJ,EAAEA,EAAE,OAAS,CAAC,EAAE,IAC1B,OAAO,IAAIwJ,EAAmB3tB,EAAG0tB,EAAG,KAAK,KAAK,CACjD,CACD,MAAM1tB,EAAI,KAAK,OAAO,CAAC,EACjB0tB,EAAIvJ,EAAE,QAAQ,KAAK,IAAI,EAAGnkB,EAAE,MAAM,IAAM,CAAC,CAAC,EAChD,OAAO,IAAI2tB,EAAmB,KAAK,QAASD,EAAG,KAAK,KAAK,CAC5D,CACD,gBAAiB,CACb,KAAM,CAAE,IAAKvJ,GAAM,KAAK,MACxB,GAAI,KAAK,aAAe,KAAK,OAAO,OAAS,EAAG,CAC5C,MAAMA,EAAI,KAAK,OAAO,MAAM,CAAC,EACvBnkB,EAAImkB,EAAE,CAAC,EAAE,MACTuJ,EAAIvJ,EAAEA,EAAE,OAAS,CAAC,EAAE,IAC1B,OAAO,IAAIwJ,EAAmBD,EAAG1tB,EAAG,KAAK,KAAK,CACjD,CACD,MAAMA,EAAI,KAAK,OAAO,KAAK,OAAO,OAAS,CAAC,EACtC0tB,EAAIvJ,EAAE,QAAQ,KAAK,IAAIA,EAAE,QAAQ,KAAMnkB,EAAE,IAAI,IAAM,CAAC,CAAC,EAC3D,OAAO,IAAI2tB,EAAmB,KAAK,QAASD,EAAG,KAAK,KAAK,CAC5D,CACD,OAAO,SAAStyB,EAAK0yB,EAAM,CACvB,OAAO,IAAIH,EAAmBvyB,EAAI,QAAQ0yB,EAAK,MAAM,EAAG1yB,EAAI,QAAQ0yB,EAAK,IAAI,CAAC,CACjF,CACD,OAAO,OAAO1yB,EAAKmyB,EAAQC,EAAMtjB,EAAO4D,EAAO,EAAG,CAC9C,OAAO,IAAI,KAAK1S,EAAI,QAAQmyB,CAAM,EAAGnyB,EAAI,QAAQoyB,CAAI,EAAGtjB,EAAO4D,CAAI,CACtE,CACD,aAAc,CACV,OAAO,IAAIwf,GAAkB,KAAK,OAAQ,KAAK,IAAI,CACtD,CACL,CAEA,SAASS,GAAa3uB,EAAM,CACxB,MAAM4uB,EAAa5uB,EAAK,UAAU,EAAI,EAChC6uB,EAAmB,CAAC7uB,EAAM,GAAG,MAAM,KAAKA,EAAK,qBAAqB,GAAG,CAAC,CAAC,EACvE8uB,EAAiB,CAACF,EAAY,GAAG,MAAM,KAAKA,EAAW,qBAAqB,GAAG,CAAC,CAAC,EACvF,OAAAC,EAAiB,QAAQ,CAACzL,EAASlhB,IAAU,CACzC4sB,EAAe5sB,CAAK,EAAE,MAAM,QAAW,SAAUkhB,EAAS,CACtD,IAAI2L,EAAS,GACb,MAAMC,EAAiB,iBAAiB5L,CAAO,EAC/C,QAAS9W,EAAI,EAAGA,EAAI0iB,EAAe,OAAQ1iB,GAAK,EAC5CyiB,GAAU,GAAGC,EAAe1iB,CAAC,CAAC,IAAI0iB,EAAe,iBAAiBA,EAAe1iB,CAAC,CAAC,CAAC,IAExF,OAAOyiB,CACV,EAAE3L,CAAO,CAClB,CAAK,EACMwL,CACX,CACA,SAASK,GAAkBjvB,EAAMkvB,EAAU,CACvC,OAAO,OAAO,iBAAiBlvB,CAAI,EAAEkvB,CAAQ,CACjD,CACA,SAAS1iB,GAAOrN,EAAQ,EAAGsN,EAAM,EAAGC,EAAM,EAAG,CACzC,OAAO,KAAK,IAAI,KAAK,IAAIvN,EAAOsN,CAAG,EAAGC,CAAG,CAC7C,CACA,SAASyiB,GAAWnvB,EAAM,CAClBA,EAAK,aAAe,MAAQA,EAAK,aAAe,QAChDA,EAAK,WAAW,YAAYA,CAAI,CAExC,CACA,MAAMovB,GAA2BxmB,GAAY,CACzC,KAAM,CAAE,EAAA8Y,EAAG,EAAAC,EAAG,UAAA0N,EAAW,OAAAhzB,CAAM,EAAKuM,EACpC,IAAI0mB,EAAgB,KAChBC,EAAa,KACblV,EAAI,KACJ,EAAIqH,EACR,KAAgB6N,IAAT,MAAuB,EAAI,OAAO,YAAc,EAAI,GAAI,CAC3D,MAAMC,EAAW,SAAS,kBAAkB,EAAG7N,CAAC,EAC1Czf,EAAQstB,EAAS,UAAU1pB,GAAMA,EAAG,UAAU,SAAS,aAAa,CAAC,EACrE2pB,EAAmBD,EAAS,MAAM,EAAGttB,CAAK,EAChD,GAAIutB,EAAiB,OAAS,EAAG,CAC7B,MAAMrM,EAAUqM,EAAiB,CAAC,EAGlC,GAFAH,EAAgBlM,EAChB/I,EAAIhe,EAAO,KAAK,SAAS+mB,EAAS,CAAC,EAC/B/I,GAAK,EAAG,CACRkV,EAAalzB,EAAO,MAAM,IAAI,OAAO,KAAK,IAAIge,EAAI,EAAG,CAAC,CAAC,GACnDkV,IAAe,MAAQA,EAAW,UAClCA,EAAalzB,EAAO,MAAM,IAAI,OAAO,KAAK,IAAIge,EAAI,EAAG,CAAC,CAAC,GAEtDkV,IACDA,EAAalzB,EAAO,MAAM,IAAI,OAAO,KAAK,IAAIge,EAAG,CAAC,CAAC,GAEvD,KACH,CACJ,CACGgV,IAAc,OACd,GAAK,EAGL,GAAK,CAEZ,CACD,MAAO,CAAE,cAAAC,EAAe,WAAAC,EAAY,IAAKlV,IAAM,KAAOA,EAAI,KAC9D,EAEA,SAASqV,GAA6B,EAAG,EAAG,CACxC,KAAM,CAAE,IAAK,GAAM,EAAE,KAAK,MAAOpB,EAAIc,GAAwB,CAAE,OAAQ,EAAG,EAAG,EAAE,QAAS,EAAG,EAAE,QAAS,UAAW,OAAO,CAAE,EAC1H,GAAI,CAACd,EAAE,YAAuBA,EAAE,MAAX,KACjB,MAAO,GACX,MAAMxJ,EAAI,EAAE,QAASxY,EAAK,SAAU1L,EAAGmkB,EAAGpK,EAAG,CACzC,MAAM2T,EAAI,SAASW,GAAkBruB,EAAE,IAAK,aAAa,EAAG,EAAE,EAAGkkB,EAAI,SAASmK,GAAkBruB,EAAE,IAAK,cAAc,EAAG,EAAE,EAAG0L,EAAI,SAAS2iB,GAAkBruB,EAAE,IAAK,iBAAiB,EAAG,EAAE,EAAG4tB,EAAI,SAASS,GAAkBruB,EAAE,IAAK,iBAAiB,EAAG,EAAE,EAAGyZ,EAAIzZ,EAAE,IAAI,wBACrQ,MAAO,CAAE,KAAM4L,GAAOuY,EAAG1K,EAAE,KAAOiU,EAAIhiB,EAAG+N,EAAE,MAAQyK,EAAI0J,CAAC,EAAG,IAAK7T,EACnE,EAAE,EAAE,KAAMmK,EAAG,EAAE,OAAO,EAAG0J,EAAI,EAAE,KAAK,YAAYliB,CAAC,EAClD,GAAI,CAACkiB,EACD,MAAO,GACX,KAAM,CAAE,IAAKnU,CAAG,EAAGmU,EACnB,GAAI,CAAC,EAAE,QAAQnU,CAAC,EAAE,OACd,MAAO,GACX,MAAMlU,EAAI,EAAE,QAAQmoB,EAAE,GAAG,EAAG3J,EAAI,EAAE,QAAQ2J,EAAE,IAAM,CAAC,EACnD,OAAOT,GAAmB1nB,EAAGwe,EAAG,CAAC,CACrC,CACA,MAAMgL,GAA+B,CAAC,EAAG,IAAM,CAC3C,MAAM,EAAI,EAAE,QAAQ,CAAC,EAAG,CAAE,MAAOrB,CAAG,EAAG,EACvC,OAAUA,IAAN,EACO,EACJ,EAAE,IAAM,EAAE,aAAe,CACpC,EACMsB,GAAyB,CAAC,EAAG,IAAM,CACrC,MAAM,EAAI,EAAE,OAAO,CAAC,EAAGtB,EAAI,EAAE,QAAQ,CAAC,EACtC,GAAI,CAAE,MAAOxJ,CAAC,EAAKwJ,EAAGhiB,EAAI,EAC1B,KAAOwY,EAAI,GAAI,CACX,MAAMlkB,EAAI0tB,EAAE,KAAKxJ,CAAC,EACjBA,GAAK,EAAUA,IAAN,IAAYxY,EAAI1L,EAC7B,CACD,OAAO0L,CACX,EACMujB,GAAe,CAAC7zB,EAAKgG,IAAQ,CAC/B,MAAM,EAAI8tB,EAAAA,eAAe,SAAS9zB,CAAG,EACrC,OAAO,EAAI+zB,qCAAmC/tB,EAAK,EAAE,KAAM,EAAE,QAAQ,OAAO,EAAI,IACpF,EACMguB,GAAkB,CAAC,EAAG,IAAM,CAC9B,IAAI,EAAI,EACR,KAAO,GAAK,EAAE,YAAc,EAAE,aAAe,EAAE,KAC3C,EAAI,EAAE,WACV,OAAO,CACX,EACMC,GAA6B,IAAI5mB,EAAS,UAAC,YAAY,EACvD6mB,GAAmB,CAAC,CAAE,UAAW,EAAID,GAA4B,QAAA7M,EAAS,OAAA/mB,EAAQ,aAAAgnB,EAAc,aAAA8M,KAAoB,CACtH,MAAMjb,EAAY,SAAS,cAAc,KAAK,EAC9C,IAAIkb,EAAgB,KAChB1O,EAAI,GACJ9W,EAAc,KACdylB,EAAc,GAClB,OAAAjN,EAAQ,iBAAiB,YAAaxiB,GAAK,CACvC,KAAM,CAAE,KAAAtE,CAAM,EAAGD,EACjB,GAAI,CAACuE,EAAE,aACH,OACJ,KAAM,CAAE,MAAA4Q,EAAO,MAAA5P,EAAO,IAAA+H,CAAK,EAAGrN,EAAK,MAAM,UACnCkyB,EAAIkB,GAA6B9uB,EAAGvE,CAAM,EAC1Cge,EAAIwT,GAAmBjsB,EAAO+H,EAAK,CAAC,EACpCkb,EAAIxK,EAAE,KAAKzZ,GAAK4tB,EAAE,KAAKzJ,GAAKA,EAAE,QAAUnkB,EAAE,OAASmkB,EAAE,MAAQnkB,EAAE,GAAG,CAAC,EACnEooB,EAAIxX,GAAS,CAACqT,EAAI2J,EAAInU,EAC5B,GAAI,CAAC2O,EAAE,OACH,OACJ,KAAM,CAAE,GAAIE,GAAM5sB,EAAK,MACjBkoB,EAAI,SAAS,cAAc,KAAK,EAChC7C,EAAIqH,EAAE,CAAC,EAAE,MAAM,IACftZ,EAAIsZ,EAAEA,EAAE,OAAS,CAAC,EAAE,IAAI,IACxB,EAAIuF,EAAmB,OAAOjyB,EAAK,MAAM,IAAKqlB,EAAGjS,CAAC,EAClD4gB,EAAI,EAAE,UACZtH,EAAE,QAAQpoB,GAAK,CACX,MAAMmkB,EAAI4J,GAAaryB,EAAK,QAAQsE,EAAE,MAAM,GAAG,CAAC,EAChD4jB,EAAE,OAAOO,CAAC,CACtB,CAAS,EACDP,EAAE,MAAM,SAAW,WACnBA,EAAE,MAAM,IAAM,WACd,SAAS,KAAK,OAAOA,CAAC,EACtB5jB,EAAE,aAAa,YACfA,EAAE,aAAa,aAAa4jB,EAAG,EAAG,CAAC,EACnCloB,EAAK,SAAW,CAAE,MAAOg0B,EAAG,KAAM,IAClCpH,EAAE,aAAa,CAAC,EAChB5sB,EAAK,SAAS4sB,CAAC,EACf,SAAS,iBAAiB,OAAQ,IAAMiG,GAAW3K,CAAC,EAAG,CAAE,KAAM,EAAI,CAAE,EACrE,WAAW,IAAM,CACbpB,IAAYA,EAAQ,MAAM,cAAgB,OAC7C,EAAE,CAAC,CACZ,CAAK,EACDA,EAAQ,iBAAiB,UAAW,IAAM,CACtCA,IAAYA,EAAQ,MAAM,cAAgB,OAClD,CAAK,EACM,IAAI5f,EAAAA,OAAO,CACd,IAAK,OAAO,GAAM,SAAW,IAAI6F,EAAS,UAAC,CAAC,EAAI,EAChD,MAAO,CACH,KAAM,KAAO,CAAE,OAAQ,KACvB,MAAMzI,EAAGmkB,EAAGpK,EAAG2T,EAAG,CACd,MAAM5J,EAAI9jB,EAAE,QAAQ,gBAAgB,EAC9BuF,EAAIvF,EAAE,QAAQ,gBAAgB,EACpC,GAAmB8jB,IAAd,SAAoBhD,EAAIgD,GAAIve,GAAKiqB,EAClC,OAAQA,EAAc,KAAM,EACvB1O,EAAI,GACJ9W,EAAc,KACdylB,EAAc,GACPF,GAAR,MAAwBA,EAAa,CAAE,OAAQ9zB,EAAQ,KAAM,KAAM,IAAK,GAAI,EAC5E0oB,EAER,GAAInkB,EAAE,YAAqByvB,IAAP,IAAsBjN,GAAWgN,EAAe,CAChE,MAAMrL,EAAInkB,EAAE,QAAQ,IAAIyvB,CAAW,EACnCtL,IAAMsL,IAAiBA,EAActL,EAAK8K,GAAavB,EAAG+B,CAAW,EACxE,CACD,OAAOtL,CACV,CACJ,EACD,KAAMnkB,GAAK,CACP,IAAImkB,EACJ,OAAS3B,EAAQ,UAAY,GACxBA,EAAQ,MAAM,cAAgB,QACrB2B,EAAI1oB,EAAO,KAAK,IAAI,iBAA9B,MAA8D0oB,IAAd,QAAmBA,EAAE,YAAY7P,CAAS,EAC1FA,EAAU,YAAYkO,CAAO,EAC5BlO,EAAU,MAAM,cAAgB,OAChCA,EAAU,MAAM,SAAW,WAC3BA,EAAU,MAAM,IAAM,IACtBA,EAAU,MAAM,KAAO,IACvBkb,EAAgBpM,EAAAA,MAAMpjB,EAAE,IAAK,CAC1B,uBAAwB,KACxB,YAAa,GACb,QAAS,SACT,UAAW,aACX,YAAa,GACb,SAAU,IACV,OAAQ,GACR,cAAe,CACX,UAAW,CACP,CAAE,KAAM,OAAQ,QAAS,EAAO,EAChC,CAAE,KAAM,kBAAmB,QAAS,CAAE,aAAc,WAAY,SAAU,GAAS,CACtF,CACJ,EACD,GAAGyiB,EACH,SAAUnO,EACV,QAASkO,CAC7B,CAAiB,EACD,CACI,OAAO2B,EAAGpK,EAAG,CAGT,GAFI,CAACyI,GAAW,CAACgN,IAEXhN,EAAQ,UAAY,CAAC1B,EAAI9gB,EAAE,MAAM,IAAI,GAAG+Z,EAAE,GAAG,GAAY0V,IAAP,IACpD,OACJ,IAAI/B,EAAI1tB,EAAE,QAAQyvB,CAAW,EAG7B,GAFM/B,EAAI0B,GAAgBpvB,EAAG0tB,CAAC,EAAIA,IAAM1tB,EAAE,MAEvB0tB,GAAR,KAAY,OAAYA,EAAE,YAAjC,EACA,OACJ,MAAMxJ,EAAIlkB,EAAE,SAAS0tB,EAAG,CAAC,EAAGE,EAAIoB,GAAuBvzB,EAAO,MAAM,IAAKyoB,CAAC,EAC1E,GAAI0J,IAAM5jB,EAAa,CACnB,MAAMma,EAAI4K,GAA6BtzB,EAAO,MAAM,IAAKyoB,CAAC,EACzDla,EAAc4jB,EACV6B,EAActL,EACd8K,GAAajvB,EAAE,MAAOyvB,CAAW,EAC1BF,GAAR,MAAwBA,EAAa,CAAE,OAAQ9zB,EAAQ,KAAMuO,EAAa,IAAKylB,EAAa,EAC5FD,EAAc,SAAS,CAAE,uBAAwB,IAAM9B,EAAE,sBAAqB,EAAI,EAClF8B,EAAc,KAAI,CACzB,CACJ,EACD,SAAU,CACEA,GAAR,MAAyBA,EAAc,QAAS,EAAEhN,GAAW+L,GAAWja,CAAS,CACpF,CACrB,CACS,EACD,MAAO,CACH,gBAAiB,CACb,WAAY,CAACtU,EAAGxD,KAAWskB,GACtBtkB,EAAM,QACH,CAAC8X,EAAU,SAAS9X,EAAM,aAAa,IAC9BgzB,GAAR,MAAyBA,EAAc,KAAM,EACzCxlB,EAAc,KACdylB,EAAc,GACPF,GAAR,MAAwBA,EAAa,CAAE,OAAQ9zB,EAAQ,KAAM,KAAM,IAAK,EAAE,CAAE,GACpF,IACJ,UAAUuE,EAAGmkB,EAAG,CACZ,GAAI,CAAC3B,GAAW,CAACgN,GAAiB1O,EAC9B,MAAO,GACX,MAAM/G,EAAIyU,GAAwB,CAAE,EAAGrK,EAAE,QAAS,EAAGA,EAAE,QAAS,UAAW,QAAS,OAAQ1oB,CAAQ,CAAA,EACpG,GAAI,CAACse,EAAE,cACH,MAAO,GACX,IAAI2T,EAAI3T,EAAE,cAGV,GAFM2T,EAAI0B,GAAgBpvB,EAAG0tB,CAAC,EAAIA,IAAM1tB,EAAE,MAEvB0tB,GAAR,KAAY,OAAYA,EAAE,YAAjC,EACA,MAAO,GACX,MAAMxJ,EAAIlkB,EAAE,SAAS0tB,EAAG,CAAC,EAAGE,EAAIoB,GAAuBvzB,EAAO,MAAM,IAAKyoB,CAAC,EAC1E,GAAI0J,IAAM5jB,EAAa,CACnB,MAAMma,EAAI4K,GAA6BtzB,EAAO,MAAM,IAAKyoB,CAAC,EACzDla,EAAc4jB,EACV6B,EAActL,EACd8K,GAAajvB,EAAE,MAAOyvB,CAAW,EAC1BF,GAAR,MAAwBA,EAAa,CAAE,OAAQ9zB,EAAQ,KAAMuO,EAAa,IAAKylB,EAAa,EAC5FD,EAAc,SAAS,CAAE,uBAAwB,IAAM9B,EAAE,sBAAqB,EAAI,EAClF8B,EAAc,KAAI,CACzB,CACD,MAAO,EACV,CACJ,CACJ,CACT,CAAK,CACL,EC5WMtN,GAAiB,+CAIjBC,GAAiB,+CAIjBC,GAAuB,2CAIvBC,GAAuB,2CAKvBsN,GAASzpB,EAAK,OAAO,CACvB,KAAM,SACN,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,CAC9B,CACK,EACD,WAAY,CACR,MAAO,CACH,CACI,IAAK,IACR,EACD,CACI,IAAK,IACL,SAAU9G,GAAQA,EAAK,MAAM,YAAc,UAAY,IAC1D,EACD,CACI,MAAO,mBACV,CACb,CACK,EACD,WAAW,CAAE,eAAA4H,GAAkB,CAC3B,MAAO,CAAC,KAAM/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAChF,EACD,aAAc,CACV,MAAO,CACH,UAAW,IAAM,CAAC,CAAE,SAAAvE,KACTA,EAAS,QAAQ,KAAK,IAAI,EAErC,aAAc,IAAM,CAAC,CAAE,SAAAA,KACZA,EAAS,WAAW,KAAK,IAAI,EAExC,YAAa,IAAM,CAAC,CAAE,SAAAA,KACXA,EAAS,UAAU,KAAK,IAAI,CAEnD,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,QAAS,IAAM,KAAK,OAAO,SAAS,aAAc,EAClD,QAAS,IAAM,KAAK,OAAO,SAAS,aAAc,CAC9D,CACK,EACD,eAAgB,CACZ,MAAO,CACHsc,EAAc,CACV,KAAMmD,GACN,KAAM,KAAK,IAC3B,CAAa,EACDnD,EAAc,CACV,KAAMqD,GACN,KAAM,KAAK,IAC3B,CAAa,CACb,CACK,EACD,eAAgB,CACZ,MAAO,CACHL,EAAc,CACV,KAAMI,GACN,KAAM,KAAK,IAC3B,CAAa,EACDJ,EAAc,CACV,KAAMM,GACN,KAAM,KAAK,IAC3B,CAAa,CACb,CACK,CACL,CAAC,ECnFKuN,GAAY1pB,EAAK,OAAO,CAC1B,KAAM,YACN,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,CAC9B,CACK,EACD,WAAY,CACR,MAAO,CACH,CACI,IAAK,GACR,EACD,CACI,MAAO,kBACP,UAAW,GACX,SAAU4X,GAAUA,EAAM,SAAS,WAAW,EAAI,CAAE,EAAG,EAC1D,CACb,CACK,EACD,WAAW,CAAE,eAAA9W,GAAkB,CAC3B,MAAO,CAAC,IAAK/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAC/E,EACD,aAAc,CACV,MAAO,CACH,aAAc,IAAM,CAAC,CAAE,SAAAvE,KACZA,EAAS,QAAQ,KAAK,IAAI,EAErC,gBAAiB,IAAM,CAAC,CAAE,SAAAA,KACfA,EAAS,WAAW,KAAK,IAAI,EAExC,eAAgB,IAAM,CAAC,CAAE,SAAAA,KACdA,EAAS,UAAU,KAAK,IAAI,CAEnD,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,QAAS,IAAM,KAAK,OAAO,SAAS,gBAAiB,EACrD,QAAS,IAAM,KAAK,OAAO,SAAS,gBAAiB,CACjE,CACK,CACL,CAAC,EC1CKotB,GAAa,+CAIbC,GAAa,+CAKbC,GAAS7pB,EAAK,OAAO,CACvB,KAAM,SACN,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,CAC9B,CACK,EACD,WAAY,CACR,MAAO,CACH,CACI,IAAK,GACR,EACD,CACI,IAAK,KACR,EACD,CACI,IAAK,QACR,EACD,CACI,MAAO,kBACP,UAAW,GACX,SAAU4X,GAAUA,EAAM,SAAS,cAAc,EAAI,CAAE,EAAG,EAC7D,CACb,CACK,EACD,WAAW,CAAE,eAAA9W,GAAkB,CAC3B,MAAO,CAAC,IAAK/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAC/E,EACD,aAAc,CACV,MAAO,CACH,UAAW,IAAM,CAAC,CAAE,SAAAvE,KACTA,EAAS,QAAQ,KAAK,IAAI,EAErC,aAAc,IAAM,CAAC,CAAE,SAAAA,KACZA,EAAS,WAAW,KAAK,IAAI,EAExC,YAAa,IAAM,CAAC,CAAE,SAAAA,KACXA,EAAS,UAAU,KAAK,IAAI,CAEnD,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,cAAe,IAAM,KAAK,OAAO,SAAS,aAAc,CACpE,CACK,EACD,eAAgB,CACZ,MAAO,CACHsc,EAAc,CACV,KAAM8Q,GACN,KAAM,KAAK,IAC3B,CAAa,CACb,CACK,EACD,eAAgB,CACZ,MAAO,CACH9N,EAAc,CACV,KAAM+N,GACN,KAAM,KAAK,IAC3B,CAAa,CACb,CACK,CACL,CAAC,ECvEKD,GAAa,2CAIbC,GAAa,2CAKbE,GAAO9pB,EAAK,OAAO,CACrB,KAAM,OACN,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,CAC9B,CACK,EACD,SAAU,IACV,KAAM,GACN,SAAU,GACV,WAAY,CACR,MAAO,CACH,CAAE,IAAK,MAAQ,CAC3B,CACK,EACD,WAAW,CAAE,eAAAc,GAAkB,CAC3B,MAAO,CAAC,OAAQ/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAClF,EACD,aAAc,CACV,MAAO,CACH,QAAS,IAAM,CAAC,CAAE,SAAAvE,KACPA,EAAS,QAAQ,KAAK,IAAI,EAErC,WAAY,IAAM,CAAC,CAAE,SAAAA,KACVA,EAAS,WAAW,KAAK,IAAI,EAExC,UAAW,IAAM,CAAC,CAAE,SAAAA,KACTA,EAAS,UAAU,KAAK,IAAI,CAEnD,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,QAAS,IAAM,KAAK,OAAO,SAAS,WAAY,CAC5D,CACK,EACD,eAAgB,CACZ,MAAO,CACHsc,EAAc,CACV,KAAM8Q,GACN,KAAM,KAAK,IAC3B,CAAa,CACb,CACK,EACD,eAAgB,CACZ,MAAO,CACH9N,EAAc,CACV,KAAM+N,GACN,KAAM,KAAK,IAC3B,CAAa,CACb,CACK,CACL,CAAC,EC5DKG,GAAqB,uBAIrBC,GAAkB,uBAKlBC,GAAY/P,EAAK,OAAO,CAC1B,KAAM,YACN,YAAa,CACT,MAAO,CACH,oBAAqB,YACrB,kBAAmB,GACnB,gBAAiB,GACjB,gBAAiB,KACjB,eAAgB,CAAE,CAC9B,CACK,EACD,QAAS,QACT,MAAO,GACP,MAAO,QACP,KAAM,GACN,SAAU,GACV,eAAgB,CACZ,MAAO,CACH,SAAU,CACN,QAAS,KAAK,QAAQ,gBACtB,UAAWoC,GAAW,CAClB,IAAI9iB,EACJ,KAAM,CAAE,oBAAA0wB,CAAmB,EAAK,KAAK,QAK/BC,EAJa,CAAC,KAAM3wB,EAAK8iB,EAAQ,qBAAuB,MAAQ9iB,IAAO,OAAS,OAASA,EAAG,YAAc,CAAE,CAAC,EAE9G,OAAO6sB,GAAaA,EAAU,WAAW6D,CAAmB,CAAC,EAC7D,IAAI7D,GAAaA,EAAU,QAAQ6D,EAAqB,EAAE,CAAC,EACrC,CAAC,EAC5B,OAAKC,GACM,IAGd,EACD,SAAU,EACb,CACb,CACK,EACD,WAAY,CACR,MAAO,CACH,CACI,IAAK,MACL,mBAAoB,MACvB,CACb,CACK,EACD,WAAW,CAAE,KAAAjxB,EAAM,eAAA4H,GAAkB,CACjC,MAAO,CACH,MACA/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAC3D,CACI,OACA,CACI,MAAO5H,EAAK,MAAM,SACZ,KAAK,QAAQ,oBAAsBA,EAAK,MAAM,SAC9C,IACT,EACD,CACH,CACb,CACK,EACD,aAAc,CACV,MAAO,CACH,aAAcxB,GAAc,CAAC,CAAE,SAAA6E,KACpBA,EAAS,QAAQ,KAAK,KAAM7E,CAAU,EAEjD,gBAAiBA,GAAc,CAAC,CAAE,SAAA6E,KACvBA,EAAS,WAAW,KAAK,KAAM,YAAa7E,CAAU,CAE7E,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,YAAa,IAAM,KAAK,OAAO,SAAS,gBAAiB,EAEzD,UAAW,IAAM,CACb,KAAM,CAAE,MAAAgT,EAAO,QAAA2L,CAAS,EAAG,KAAK,OAAO,MAAM,UACvCI,EAAYJ,EAAQ,MAAQ,EAClC,MAAI,CAAC3L,GAAS2L,EAAQ,OAAO,KAAK,OAAS,KAAK,KACrC,GAEPI,GAAa,CAACJ,EAAQ,OAAO,YAAY,OAClC,KAAK,OAAO,SAAS,WAAU,EAEnC,EACV,EAED,MAAO,CAAC,CAAE,OAAA9gB,KAAa,CACnB,GAAI,CAAC,KAAK,QAAQ,kBACd,MAAO,GAEX,KAAM,CAAE,MAAAR,CAAO,EAAGQ,EACZ,CAAE,UAAAN,CAAW,EAAGF,EAChB,CAAE,MAAA+F,EAAO,MAAA4P,CAAO,EAAGzV,EACzB,GAAI,CAACyV,GAAS5P,EAAM,OAAO,OAAS,KAAK,KACrC,MAAO,GAEX,MAAMsvB,EAAUtvB,EAAM,eAAiBA,EAAM,OAAO,SAAW,EACzDuvB,EAAwBvvB,EAAM,OAAO,YAAY,SAAS;AAAA;AAAA,CAAM,EACtE,MAAI,CAACsvB,GAAW,CAACC,EACN,GAEJ90B,EACF,MAAO,EACP,QAAQ,CAAC,CAAE,GAAAE,MACZA,EAAG,OAAOqF,EAAM,IAAM,EAAGA,EAAM,GAAG,EAC3B,GACV,EACI,SAAU,EACV,KACR,EAED,UAAW,CAAC,CAAE,OAAAvF,KAAa,CACvB,GAAI,CAAC,KAAK,QAAQ,gBACd,MAAO,GAEX,KAAM,CAAE,MAAAR,CAAO,EAAGQ,EACZ,CAAE,UAAAN,EAAW,IAAAC,CAAK,EAAGH,EACrB,CAAE,MAAA+F,EAAO,MAAA4P,CAAO,EAAGzV,EAKzB,GAJI,CAACyV,GAAS5P,EAAM,OAAO,OAAS,KAAK,MAIrC,EADYA,EAAM,eAAiBA,EAAM,OAAO,SAAW,GAE3D,MAAO,GAEX,MAAMwZ,EAAQxZ,EAAM,QACpB,OAAIwZ,IAAU,OACH,GAEOpf,EAAI,OAAOof,CAAK,EAEvB/e,EAAO,SAAS,QAAQ,CAAC,CAAE,GAAAE,CAAE,KAChCA,EAAG,aAAauQ,EAAAA,UAAU,KAAK9Q,EAAI,QAAQof,CAAK,CAAC,CAAC,EAC3C,GACV,EAEE/e,EAAO,SAAS,UAC1B,CACb,CACK,EACD,eAAgB,CACZ,MAAO,CACHkkB,GAAuB,CACnB,KAAMsQ,GACN,KAAM,KAAK,KACX,cAAe1tB,IAAU,CACrB,SAAUA,EAAM,CAAC,CACrC,EACA,CAAa,EACDod,GAAuB,CACnB,KAAMuQ,GACN,KAAM,KAAK,KACX,cAAe3tB,IAAU,CACrB,SAAUA,EAAM,CAAC,CACrC,EACA,CAAa,CACb,CACK,EACD,uBAAwB,CACpB,MAAO,CAGH,IAAIK,SAAO,CACP,IAAK,IAAI6F,EAAS,UAAC,wBAAwB,EAC3C,MAAO,CACH,YAAa,CAAC/M,EAAMc,IAAU,CAK1B,GAJI,CAACA,EAAM,eAIP,KAAK,OAAO,SAAS,KAAK,KAAK,IAAI,EACnC,MAAO,GAEX,MAAMoF,EAAOpF,EAAM,cAAc,QAAQ,YAAY,EAC/Cg0B,EAASh0B,EAAM,cAAc,QAAQ,oBAAoB,EACzDi0B,EAAaD,EAAS,KAAK,MAAMA,CAAM,EAAI,OAC3CH,EAAWI,GAAe,KAAgC,OAASA,EAAW,KACpF,GAAI,CAAC7uB,GAAQ,CAACyuB,EACV,MAAO,GAEX,KAAM,CAAE,GAAA10B,EAAI,OAAAqC,GAAWtC,EAAK,MAItBg1B,EAAW1yB,EAAO,KAAK4D,EAAK,QAAQ,SAAU;AAAA,CAAI,CAAC,EAGzD,OAAAjG,EAAG,qBAAqB,KAAK,KAAK,OAAO,CAAE,SAAA00B,CAAQ,EAAIK,CAAQ,CAAC,EAC5D/0B,EAAG,UAAU,MAAM,OAAO,OAAS,KAAK,MAExCA,EAAG,aAAamO,EAAa,cAAC,KAAKnO,EAAG,IAAI,QAAQ,KAAK,IAAI,EAAGA,EAAG,UAAU,KAAO,CAAC,CAAC,CAAC,CAAC,EAK1FA,EAAG,QAAQ,QAAS,EAAI,EACxBD,EAAK,SAASC,CAAE,EACT,EACV,CACJ,CACjB,CAAa,CACb,CACK,CACL,CAAC,ECnNKg1B,GAAYzqB,EAAK,OAAO,CAC1B,KAAM,YACN,SAAU,IACV,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,CAC9B,CACK,EACD,WAAY,CACR,MAAO,CACH,CACI,IAAK,OACL,SAAUsc,GACYA,EAAQ,aAAa,OAAO,EAIvC,GAFI,EAIlB,CACb,CACK,EACD,WAAW,CAAE,eAAAxb,GAAkB,CAC3B,MAAO,CAAC,OAAQ/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAClF,EACD,aAAc,CACV,MAAO,CACH,qBAAsB,IAAM,CAAC,CAAE,MAAA/L,EAAO,SAAAwH,CAAQ,IAAO,CACjD,MAAM7E,EAAayV,GAAkBpY,EAAO,KAAK,IAAI,EAErD,OADkB,OAAO,QAAQ2C,CAAU,EAAE,KAAK,CAAC,EAAGW,CAAK,IAAM,CAAC,CAACA,CAAK,EAE7D,GAEJkE,EAAS,UAAU,KAAK,IAAI,CACtC,CACb,CACK,CACL,CAAC,ECrCKmuB,GAAa7oB,EAAU,OAAO,CAChC,KAAM,aACN,YAAa,CACT,MAAO,CACH,MAAO,CAAC,WAAW,CAC/B,CACK,EACD,qBAAsB,CAClB,MAAO,CACH,CACI,MAAO,KAAK,QAAQ,MACpB,WAAY,CACR,WAAY,CACR,QAAS,KACT,UAAWya,GAAW,CAAE,IAAI9iB,EAAI,OAAQA,EAAK8iB,EAAQ,MAAM,cAAgB,MAAQ9iB,IAAO,OAAS,OAASA,EAAG,QAAQ,SAAU,EAAE,CAAI,EACvI,WAAY9B,GACHA,EAAW,WAGT,CACH,MAAO,gBAAgBA,EAAW,UAAU,EAC5E,EAJuC,EAMlB,CACJ,CACJ,CACb,CACK,EACD,aAAc,CACV,MAAO,CACH,cAAeizB,GAAc,CAAC,CAAE,MAAAx0B,KACrBA,EAAO,EACT,QAAQ,YAAa,CAAE,WAAAw0B,EAAY,EACnC,MAET,gBAAiB,IAAM,CAAC,CAAE,MAAAx0B,KACfA,EAAO,EACT,QAAQ,YAAa,CAAE,WAAY,IAAI,CAAE,EACzC,qBAAsB,EACtB,KAErB,CACK,CACL,CAAC,EC5CKy0B,GAAU1Q,EAAK,OAAO,CACxB,KAAM,UACN,YAAa,CACT,MAAO,CACH,OAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EACzB,eAAgB,CAAE,CAC9B,CACK,EACD,QAAS,UACT,MAAO,QACP,SAAU,GACV,eAAgB,CACZ,MAAO,CACH,MAAO,CACH,QAAS,EACT,SAAU,EACb,CACb,CACK,EACD,WAAY,CACR,OAAO,KAAK,QAAQ,OACf,IAAKyE,IAAW,CACjB,IAAK,IAAIA,CAAK,GACd,MAAO,CAAE,MAAAA,CAAO,CACnB,EAAC,CACL,EACD,WAAW,CAAE,KAAAzlB,EAAM,eAAA4H,GAAkB,CAKjC,MAAO,CAAC,IAJS,KAAK,QAAQ,OAAO,SAAS5H,EAAK,MAAM,KAAK,EAExDA,EAAK,MAAM,MACX,KAAK,QAAQ,OAAO,CAAC,CACV,GAAInB,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CACvF,EACD,aAAc,CACV,MAAO,CACH,WAAYpJ,GAAc,CAAC,CAAE,SAAA6E,KACpB,KAAK,QAAQ,OAAO,SAAS7E,EAAW,KAAK,EAG3C6E,EAAS,QAAQ,KAAK,KAAM7E,CAAU,EAFlC,GAIf,cAAeA,GAAc,CAAC,CAAE,SAAA6E,KACvB,KAAK,QAAQ,OAAO,SAAS7E,EAAW,KAAK,EAG3C6E,EAAS,WAAW,KAAK,KAAM,YAAa7E,CAAU,EAFlD,EAI3B,CACK,EACD,sBAAuB,CACnB,OAAO,KAAK,QAAQ,OAAO,OAAO,CAACQ,EAAOymB,KAAW,CACjD,GAAGzmB,EAEC,CAAC,WAAWymB,CAAK,EAAE,EAAG,IAAM,KAAK,OAAO,SAAS,cAAc,CAAE,MAAAA,EAAO,CAExF,GAAY,CAAE,CAAA,CACT,EACD,eAAgB,CACZ,OAAO,KAAK,QAAQ,OAAO,IAAIA,GACpBlF,GAAuB,CAC1B,KAAM,IAAI,OAAO,SAASkF,CAAK,QAAQ,EACvC,KAAM,KAAK,KACX,cAAe,CACX,MAAAA,CACH,CACjB,CAAa,CACJ,CACJ,CACL,CAAC,ECpEKkM,GAAYhpB,EAAU,OAAO,CAC/B,KAAM,YACN,YAAa,CACT,MAAO,CACH,MAAO,CAAE,EACT,WAAY,CAAC,OAAQ,SAAU,QAAS,SAAS,EACjD,iBAAkB,MAC9B,CACK,EACD,qBAAsB,CAClB,MAAO,CACH,CACI,MAAO,KAAK,QAAQ,MACpB,WAAY,CACR,UAAW,CACP,QAAS,KAAK,QAAQ,iBACtB,UAAWya,GAAW,CAClB,MAAMwO,EAAYxO,EAAQ,MAAM,WAAa,KAAK,QAAQ,iBAC1D,OAAO,KAAK,QAAQ,WAAW,SAASwO,CAAS,EAAIA,EAAY,KAAK,QAAQ,gBACjF,EACD,WAAYpzB,GACJA,EAAW,YAAc,KAAK,QAAQ,iBAC/B,GAEJ,CAAE,MAAO,eAAeA,EAAW,SAAS,GAE1D,CACJ,CACJ,CACb,CACK,EACD,aAAc,CACV,MAAO,CACH,aAAeozB,GAAc,CAAC,CAAE,SAAAvuB,CAAQ,IAC/B,KAAK,QAAQ,WAAW,SAASuuB,CAAS,EAGxC,KAAK,QAAQ,MACf,IAAIvzB,GAAQgF,EAAS,iBAAiBhF,EAAM,CAAE,UAAWuzB,CAAS,CAAE,CAAC,EACrE,MAAMC,GAAYA,CAAQ,EAJpB,GAMf,eAAgB,IAAM,CAAC,CAAE,SAAAxuB,KACd,KAAK,QAAQ,MACf,IAAIhF,GAAQgF,EAAS,gBAAgBhF,EAAM,WAAW,CAAC,EACvD,MAAMwzB,GAAYA,CAAQ,CAE/C,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,cAAe,IAAM,KAAK,OAAO,SAAS,aAAa,MAAM,EAC7D,cAAe,IAAM,KAAK,OAAO,SAAS,aAAa,QAAQ,EAC/D,cAAe,IAAM,KAAK,OAAO,SAAS,aAAa,OAAO,EAC9D,cAAe,IAAM,KAAK,OAAO,SAAS,aAAa,SAAS,CAC5E,CACK,CACL,CAAC,ECvDKC,GAAQnpB,EAAU,OAAO,CAC3B,KAAM,QACN,YAAa,CACT,MAAO,CACH,MAAO,CAAC,WAAW,CAC/B,CACK,EACD,qBAAsB,CAClB,MAAO,CACH,CACI,MAAO,KAAK,QAAQ,MACpB,WAAY,CACR,MAAO,CACH,QAAS,KACT,UAAWya,GAAW,CAAE,IAAI9iB,EAAI,OAAQA,EAAK8iB,EAAQ,MAAM,SAAW,MAAQ9iB,IAAO,OAAS,OAASA,EAAG,QAAQ,SAAU,EAAE,CAAI,EAClI,WAAY9B,GACHA,EAAW,MAGT,CACH,MAAO,UAAUA,EAAW,KAAK,EACjE,EAJuC,EAMlB,CACJ,CACJ,CACb,CACK,EACD,aAAc,CACV,MAAO,CACH,SAAUuzB,GAAS,CAAC,CAAE,MAAA90B,KACXA,EAAO,EACT,QAAQ,YAAa,CAAE,MAAA80B,EAAO,EAC9B,MAET,WAAY,IAAM,CAAC,CAAE,MAAA90B,KACVA,EAAO,EACT,QAAQ,YAAa,CAAE,MAAO,IAAI,CAAE,EACpC,qBAAsB,EACtB,KAErB,CACK,CACL,CAAC,EC7CKwzB,GAAa,+CAIbC,GAAa,+CAKbsB,GAAYlrB,EAAK,OAAO,CAC1B,KAAM,YACN,YAAa,CACT,MAAO,CACH,WAAY,GACZ,eAAgB,CAAE,CAC9B,CACK,EACD,eAAgB,CACZ,OAAK,KAAK,QAAQ,WAGX,CACH,MAAO,CACH,QAAS,KACT,UAAWsc,GAAWA,EAAQ,aAAa,YAAY,GAAKA,EAAQ,MAAM,gBAC1E,WAAY5kB,GACHA,EAAW,MAGT,CACH,aAAcA,EAAW,MACzB,MAAO,qBAAqBA,EAAW,KAAK,kBACpE,EAL+B,EAOlB,CACb,EAhBmB,EAiBd,EACD,WAAY,CACR,MAAO,CACH,CACI,IAAK,MACR,CACb,CACK,EACD,WAAW,CAAE,eAAAoJ,GAAkB,CAC3B,MAAO,CAAC,OAAQ/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAClF,EACD,aAAc,CACV,MAAO,CACH,aAAcpJ,GAAc,CAAC,CAAE,SAAA6E,KACpBA,EAAS,QAAQ,KAAK,KAAM7E,CAAU,EAEjD,gBAAiBA,GAAc,CAAC,CAAE,SAAA6E,KACvBA,EAAS,WAAW,KAAK,KAAM7E,CAAU,EAEpD,eAAgB,IAAM,CAAC,CAAE,SAAA6E,KACdA,EAAS,UAAU,KAAK,IAAI,CAEnD,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,cAAe,IAAM,KAAK,OAAO,SAAS,gBAAiB,CACvE,CACK,EACD,eAAgB,CACZ,MAAO,CACHsc,EAAc,CACV,KAAM8Q,GACN,KAAM,KAAK,IAC3B,CAAa,CACb,CACK,EACD,eAAgB,CACZ,MAAO,CACH9N,EAAc,CACV,KAAM+N,GACN,KAAM,KAAK,IAC3B,CAAa,CACb,CACK,CACL,CAAC,EChFKuB,GAAWjR,EAAK,OAAO,CACzB,KAAM,WACN,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,EAClB,mBAAoB,aACpB,oBAAqB,aACjC,CACK,EACD,QAAS,mBACT,SAAU,GACV,WAAY,CACR,MAAO,CACH,CACI,IAAK,IACR,CACb,CACK,EACD,WAAW,CAAE,eAAApZ,GAAkB,CAC3B,MAAO,CAAC,KAAM/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAChF,EACD,sBAAuB,CACnB,MAAO,CACH,MAAO,IAAM,KAAK,OAAO,SAAS,cAAc,KAAK,IAAI,EACzD,IAAK,IAAM,KAAK,OAAO,SAAS,aAAa,KAAK,IAAI,EACtD,YAAa,IAAM,KAAK,OAAO,SAAS,aAAa,KAAK,IAAI,CAC1E,CACK,CACL,CAAC,EAOK2pB,GAAYzqB,EAAK,OAAO,CAC1B,KAAM,YACN,SAAU,IACV,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,CAC9B,CACK,EACD,WAAY,CACR,MAAO,CACH,CACI,IAAK,OACL,SAAUsc,GACYA,EAAQ,aAAa,OAAO,EAIvC,GAFI,EAIlB,CACb,CACK,EACD,WAAW,CAAE,eAAAxb,GAAkB,CAC3B,MAAO,CAAC,OAAQ/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAClF,EACD,aAAc,CACV,MAAO,CACH,qBAAsB,IAAM,CAAC,CAAE,MAAA/L,EAAO,SAAAwH,CAAQ,IAAO,CACjD,MAAM7E,EAAayV,GAAkBpY,EAAO,KAAK,IAAI,EAErD,OADkB,OAAO,QAAQ2C,CAAU,EAAE,KAAK,CAAC,EAAGW,CAAK,IAAM,CAAC,CAACA,CAAK,EAE7D,GAEJkE,EAAS,UAAU,KAAK,IAAI,CACtC,CACb,CACK,CACL,CAAC,EAKKotB,GAAa,iBAObyB,GAAalR,EAAK,OAAO,CAC3B,KAAM,aACN,YAAa,CACT,MAAO,CACH,aAAc,WACd,eAAgB,CAAE,EAClB,UAAW,GACX,eAAgB,EAC5B,CACK,EACD,MAAO,aACP,SAAU,CACN,MAAO,GAAG,KAAK,QAAQ,YAAY,GACtC,EACD,WAAY,CACR,MAAO,CACH,CAAE,IAAK,IAAM,CACzB,CACK,EACD,WAAW,CAAE,eAAApZ,GAAkB,CAC3B,MAAO,CAAC,KAAM/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAChF,EACD,aAAc,CACV,MAAO,CACH,iBAAkB,IAAM,CAAC,CAAE,SAAAvE,EAAU,MAAApG,CAAK,IAClC,KAAK,QAAQ,eACNA,EAAK,EAAG,WAAW,KAAK,KAAM,KAAK,QAAQ,aAAc,KAAK,QAAQ,SAAS,EAAE,iBAAiBg1B,GAAS,KAAM,KAAK,OAAO,cAAcV,GAAU,IAAI,CAAC,EAAE,MAEhKluB,EAAS,WAAW,KAAK,KAAM,KAAK,QAAQ,aAAc,KAAK,QAAQ,SAAS,CAEvG,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,cAAe,IAAM,KAAK,OAAO,SAAS,iBAAkB,CACxE,CACK,EACD,eAAgB,CACZ,IAAI8uB,EAAY1R,EAAkB,CAC9B,KAAMgQ,GACN,KAAM,KAAK,IACvB,CAAS,EACD,OAAI,KAAK,QAAQ,WAAa,KAAK,QAAQ,kBACvC0B,EAAY1R,EAAkB,CAC1B,KAAMgQ,GACN,KAAM,KAAK,KACX,UAAW,KAAK,QAAQ,UACxB,eAAgB,KAAK,QAAQ,eAC7B,cAAe,IAAe,KAAK,OAAO,cAAcc,GAAU,IAAI,EACtE,OAAQ,KAAK,MAC7B,CAAa,GAEE,CACHY,CACZ,CACK,CACL,CAAC,EC5IKF,GAAWjR,EAAK,OAAO,CACzB,KAAM,WACN,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,EAClB,mBAAoB,aACpB,oBAAqB,aACjC,CACK,EACD,QAAS,mBACT,SAAU,GACV,WAAY,CACR,MAAO,CACH,CACI,IAAK,IACR,CACb,CACK,EACD,WAAW,CAAE,eAAApZ,GAAkB,CAC3B,MAAO,CAAC,KAAM/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAChF,EACD,sBAAuB,CACnB,MAAO,CACH,MAAO,IAAM,KAAK,OAAO,SAAS,cAAc,KAAK,IAAI,EACzD,IAAK,IAAM,KAAK,OAAO,SAAS,aAAa,KAAK,IAAI,EACtD,YAAa,IAAM,KAAK,OAAO,SAAS,aAAa,KAAK,IAAI,CAC1E,CACK,CACL,CAAC,EAOK2pB,GAAYzqB,EAAK,OAAO,CAC1B,KAAM,YACN,SAAU,IACV,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,CAC9B,CACK,EACD,WAAY,CACR,MAAO,CACH,CACI,IAAK,OACL,SAAUsc,GACYA,EAAQ,aAAa,OAAO,EAIvC,GAFI,EAIlB,CACb,CACK,EACD,WAAW,CAAE,eAAAxb,GAAkB,CAC3B,MAAO,CAAC,OAAQ/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAClF,EACD,aAAc,CACV,MAAO,CACH,qBAAsB,IAAM,CAAC,CAAE,MAAA/L,EAAO,SAAAwH,CAAQ,IAAO,CACjD,MAAM7E,EAAayV,GAAkBpY,EAAO,KAAK,IAAI,EAErD,OADkB,OAAO,QAAQ2C,CAAU,EAAE,KAAK,CAAC,EAAGW,CAAK,IAAM,CAAC,CAACA,CAAK,EAE7D,GAEJkE,EAAS,UAAU,KAAK,IAAI,CACtC,CACb,CACK,CACL,CAAC,EAKKotB,GAAa,cAOb2B,GAAcpR,EAAK,OAAO,CAC5B,KAAM,cACN,YAAa,CACT,MAAO,CACH,aAAc,WACd,eAAgB,CAAE,EAClB,UAAW,GACX,eAAgB,EAC5B,CACK,EACD,MAAO,aACP,SAAU,CACN,MAAO,GAAG,KAAK,QAAQ,YAAY,GACtC,EACD,eAAgB,CACZ,MAAO,CACH,MAAO,CACH,QAAS,EACT,UAAWoC,GACAA,EAAQ,aAAa,OAAO,EAC7B,SAASA,EAAQ,aAAa,OAAO,GAAK,GAAI,EAAE,EAChD,CAEb,EACD,KAAM,CACF,QAAS,OACT,UAAWA,GAAWA,EAAQ,aAAa,MAAM,CACpD,CACb,CACK,EACD,WAAY,CACR,MAAO,CACH,CACI,IAAK,IACR,CACb,CACK,EACD,WAAW,CAAE,eAAAxb,GAAkB,CAC3B,KAAM,CAAE,MAAApD,EAAO,GAAG6tB,CAAsB,EAAKzqB,EAC7C,OAAOpD,IAAU,EACX,CAAC,KAAM3F,EAAgB,KAAK,QAAQ,eAAgBwzB,CAAsB,EAAG,CAAC,EAC9E,CAAC,KAAMxzB,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAC/E,EACD,aAAc,CACV,MAAO,CACH,kBAAmB,IAAM,CAAC,CAAE,SAAAvE,EAAU,MAAApG,CAAK,IACnC,KAAK,QAAQ,eACNA,EAAK,EAAG,WAAW,KAAK,KAAM,KAAK,QAAQ,aAAc,KAAK,QAAQ,SAAS,EAAE,iBAAiBg1B,GAAS,KAAM,KAAK,OAAO,cAAcV,GAAU,IAAI,CAAC,EAAE,MAEhKluB,EAAS,WAAW,KAAK,KAAM,KAAK,QAAQ,aAAc,KAAK,QAAQ,SAAS,CAEvG,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,cAAe,IAAM,KAAK,OAAO,SAAS,kBAAmB,CACzE,CACK,EACD,eAAgB,CACZ,IAAI8uB,EAAY1R,EAAkB,CAC9B,KAAMgQ,GACN,KAAM,KAAK,KACX,cAAettB,IAAU,CAAE,MAAO,CAACA,EAAM,CAAC,IAC1C,cAAe,CAACA,EAAOnD,IAASA,EAAK,WAAaA,EAAK,MAAM,QAAU,CAACmD,EAAM,CAAC,CAC3F,CAAS,EACD,OAAI,KAAK,QAAQ,WAAa,KAAK,QAAQ,kBACvCgvB,EAAY1R,EAAkB,CAC1B,KAAMgQ,GACN,KAAM,KAAK,KACX,UAAW,KAAK,QAAQ,UACxB,eAAgB,KAAK,QAAQ,eAC7B,cAAettB,IAAU,CAAE,MAAO,CAACA,EAAM,CAAC,EAAG,GAAG,KAAK,OAAO,cAAcouB,GAAU,IAAI,CAAC,GACzF,cAAe,CAACpuB,EAAOnD,IAASA,EAAK,WAAaA,EAAK,MAAM,QAAU,CAACmD,EAAM,CAAC,EAC/E,OAAQ,KAAK,MAC7B,CAAa,GAEE,CACHgvB,CACZ,CACK,CACL,CAAC,ECrKK1B,GAAa,yBAKb6B,GAAWtR,EAAK,OAAO,CACzB,KAAM,WACN,YAAa,CACT,MAAO,CACH,OAAQ,GACR,eAAgB,CAAE,EAClB,iBAAkB,UAC9B,CACK,EACD,SAAU,CACN,OAAO,KAAK,QAAQ,OAAS,mBAAqB,YACrD,EACD,SAAU,GACV,eAAgB,CACZ,MAAO,CACH,QAAS,CACL,QAAS,GACT,YAAa,GACb,UAAWoC,GAAW,CAClB,MAAMmP,EAAcnP,EAAQ,aAAa,cAAc,EACvD,OAAOmP,IAAgB,IAAMA,IAAgB,MAChD,EACD,WAAY/zB,IAAe,CACvB,eAAgBA,EAAW,OAC/C,EACa,CACb,CACK,EACD,WAAY,CACR,MAAO,CACH,CACI,IAAK,iBAAiB,KAAK,IAAI,KAC/B,SAAU,EACb,CACb,CACK,EACD,WAAW,CAAE,KAAAwB,EAAM,eAAA4H,GAAkB,CACjC,MAAO,CACH,KACA/I,EAAgB,KAAK,QAAQ,eAAgB+I,EAAgB,CACzD,YAAa,KAAK,IAClC,CAAa,EACD,CACI,QACA,CACI,QACA,CACI,KAAM,WACN,QAAS5H,EAAK,MAAM,QAAU,UAAY,IAC7C,CACJ,EACD,CAAC,MAAM,CACV,EACD,CAAC,MAAO,CAAC,CACrB,CACK,EACD,sBAAuB,CACnB,MAAMwyB,EAAY,CACd,MAAO,IAAM,KAAK,OAAO,SAAS,cAAc,KAAK,IAAI,EACzD,YAAa,IAAM,KAAK,OAAO,SAAS,aAAa,KAAK,IAAI,CAC1E,EACQ,OAAK,KAAK,QAAQ,OAGX,CACH,GAAGA,EACH,IAAK,IAAM,KAAK,OAAO,SAAS,aAAa,KAAK,IAAI,CAClE,EALmBA,CAMd,EACD,aAAc,CACV,MAAO,CAAC,CAAE,KAAAxyB,EAAM,eAAA4H,EAAgB,OAAAF,EAAQ,OAAArL,CAAM,IAAQ,CAClD,MAAMo2B,EAAW,SAAS,cAAc,IAAI,EACtCC,EAAkB,SAAS,cAAc,OAAO,EAChDC,EAAiB,SAAS,cAAc,MAAM,EAC9CC,EAAW,SAAS,cAAc,OAAO,EACzC9kB,EAAU,SAAS,cAAc,KAAK,EAC5C,OAAA4kB,EAAgB,gBAAkB,QAClCE,EAAS,KAAO,WAChBA,EAAS,iBAAiB,SAAUx1B,GAAS,CAGzC,GAAI,CAACf,EAAO,YAAc,CAAC,KAAK,QAAQ,kBAAmB,CACvDu2B,EAAS,QAAU,CAACA,EAAS,QAC7B,MACH,CACD,KAAM,CAAE,QAAAC,CAAO,EAAKz1B,EAAM,OACtBf,EAAO,YAAc,OAAOqL,GAAW,YACvCrL,EACK,MAAO,EACP,MAAM,OAAW,CAAE,eAAgB,EAAK,CAAE,EAC1C,QAAQ,CAAC,CAAE,GAAAE,KAAS,CACrB,MAAMqQ,EAAWlF,IACXkD,EAAcrO,EAAG,IAAI,OAAOqQ,CAAQ,EAC1C,OAAArQ,EAAG,cAAcqQ,EAAU,OAAW,CAClC,GAAGhC,GAAgB,KAAiC,OAASA,EAAY,MACzE,QAAAioB,CAC5B,CAAyB,EACM,EAC/B,CAAqB,EACI,MAEL,CAACx2B,EAAO,YAAc,KAAK,QAAQ,oBAE9B,KAAK,QAAQ,kBAAkB2D,EAAM6yB,CAAO,IAC7CD,EAAS,QAAU,CAACA,EAAS,SAGrD,CAAa,EACD,OAAO,QAAQ,KAAK,QAAQ,cAAc,EAAE,QAAQ,CAAC,CAAC1zB,EAAKC,CAAK,IAAM,CAClEszB,EAAS,aAAavzB,EAAKC,CAAK,CAChD,CAAa,EACDszB,EAAS,QAAQ,QAAUzyB,EAAK,MAAM,QAClCA,EAAK,MAAM,SACX4yB,EAAS,aAAa,UAAW,SAAS,EAE9CF,EAAgB,OAAOE,EAAUD,CAAc,EAC/CF,EAAS,OAAOC,EAAiB5kB,CAAO,EACxC,OAAO,QAAQlG,CAAc,EAAE,QAAQ,CAAC,CAAC1I,EAAKC,CAAK,IAAM,CACrDszB,EAAS,aAAavzB,EAAKC,CAAK,CAChD,CAAa,EACM,CACH,IAAKszB,EACL,WAAY3kB,EACZ,OAAQglB,GACAA,EAAY,OAAS,KAAK,KACnB,IAEXL,EAAS,QAAQ,QAAUK,EAAY,MAAM,QACzCA,EAAY,MAAM,QAClBF,EAAS,aAAa,UAAW,SAAS,EAG1CA,EAAS,gBAAgB,SAAS,EAE/B,GAE3B,CACA,CACK,EACD,eAAgB,CACZ,MAAO,CACHnS,EAAkB,CACd,KAAMgQ,GACN,KAAM,KAAK,KACX,cAAettB,IAAU,CACrB,QAASA,EAAMA,EAAM,OAAS,CAAC,IAAM,GACzD,EACA,CAAa,CACb,CACK,CACL,CAAC,EC1JK4vB,GAAW/R,EAAK,OAAO,CACzB,KAAM,WACN,YAAa,CACT,MAAO,CACH,aAAc,WACd,eAAgB,CAAE,CAC9B,CACK,EACD,MAAO,aACP,SAAU,CACN,MAAO,GAAG,KAAK,QAAQ,YAAY,GACtC,EACD,WAAY,CACR,MAAO,CACH,CACI,IAAK,iBAAiB,KAAK,IAAI,KAC/B,SAAU,EACb,CACb,CACK,EACD,WAAW,CAAE,eAAApZ,GAAkB,CAC3B,MAAO,CAAC,KAAM/I,EAAgB,KAAK,QAAQ,eAAgB+I,EAAgB,CAAE,YAAa,KAAK,IAAI,CAAE,EAAG,CAAC,CAC5G,EACD,aAAc,CACV,MAAO,CACH,eAAgB,IAAM,CAAC,CAAE,SAAAvE,KACdA,EAAS,WAAW,KAAK,KAAM,KAAK,QAAQ,YAAY,CAE/E,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,cAAe,IAAM,KAAK,OAAO,SAAS,eAAgB,CACtE,CACK,CACL,CAAC,ECpCKotB,GAAa,WAKbuC,GAAahS,EAAK,OAAO,CAC3B,KAAM,aACN,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,CAC9B,CACK,EACD,QAAS,SACT,MAAO,QACP,SAAU,GACV,WAAY,CACR,MAAO,CACH,CAAE,IAAK,YAAc,CACjC,CACK,EACD,WAAW,CAAE,eAAApZ,GAAkB,CAC3B,MAAO,CAAC,aAAc/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CACxF,EACD,aAAc,CACV,MAAO,CACH,cAAe,IAAM,CAAC,CAAE,SAAAvE,KACbA,EAAS,OAAO,KAAK,IAAI,EAEpC,iBAAkB,IAAM,CAAC,CAAE,SAAAA,KAChBA,EAAS,WAAW,KAAK,IAAI,EAExC,gBAAiB,IAAM,CAAC,CAAE,SAAAA,KACfA,EAAS,KAAK,KAAK,IAAI,CAE9C,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,cAAe,IAAM,KAAK,OAAO,SAAS,iBAAkB,CACxE,CACK,EACD,eAAgB,CACZ,MAAO,CACHod,EAAkB,CACd,KAAMgQ,GACN,KAAM,KAAK,IAC3B,CAAa,CACb,CACK,CACL,CAAC,ECxCD,SAASwC,GAAqBC,EAAQ,CAClC,OAAIA,EAAO,SAAW,EACXA,EAAO,CAAC,EAAE,OAEjBA,EAAO,SAAW,GAAKA,EAAO,CAAC,EAAE,OAC1B,CAAC,KAAM,IAAI,EAAE,SAASA,EAAO,CAAC,EAAE,MAAQA,EAAO,CAAC,EAAE,KAAK,EAE3D,EACX,CAMA,SAASC,GAASvqB,EAAS,CACvB,OAAO,IAAIpF,EAAAA,OAAO,CACd,IAAK,IAAI6F,EAAS,UAAC,UAAU,EAC7B,kBAAmB,CAAC/D,EAAcC,EAAUqY,IAAa,CAIrD,MAAMwV,EAAa9tB,EAAa,KAAKxJ,GAAeA,EAAY,UAAU,GAAK,CAACyJ,EAAS,IAAI,GAAGqY,EAAS,GAAG,EAItGyV,EAAkB/tB,EAAa,KAAKxJ,GAAeA,EAAY,QAAQ,iBAAiB,CAAC,EAK/F,GAAI,CAACs3B,GAAcC,EACf,OAEJ,KAAM,CAAE,GAAA92B,CAAI,EAAGqhB,EACTvJ,EAAYF,GAAwB5O,EAAS,IAAK,CAAC,GAAGD,CAAY,CAAC,EA4DzE,GA3DgB2Q,GAAiB5B,CAAS,EAClC,QAAQ,CAAC,CAAE,SAAAif,KAAe,CAE9B,MAAMC,EAAuB5e,GAAoBiJ,EAAS,IAAK0V,EAAUtzB,GAAQA,EAAK,WAAW,EACjG,IAAIwzB,EACAC,EAYJ,GAXIF,EAAqB,OAAS,GAE9BC,EAAYD,EAAqB,CAAC,EAClCE,EAAuB7V,EAAS,IAAI,YAAY4V,EAAU,IAAKA,EAAU,IAAMA,EAAU,KAAK,SAAU,OAAW,GAAG,GAEjHD,EAAqB,QAEvB3V,EAAS,IAAI,YAAY0V,EAAS,KAAMA,EAAS,GAAI,IAAK,GAAG,EAAE,SAAS,GAAG,IAC9EE,EAAYD,EAAqB,CAAC,EAClCE,EAAuB7V,EAAS,IAAI,YAAY4V,EAAU,IAAKF,EAAS,GAAI,OAAW,GAAG,GAE1FE,GAAaC,EAAsB,CACnC,MAAMC,EAAwBD,EAAqB,MAAM,GAAG,EAAE,OAAOjF,GAAKA,IAAM,EAAE,EAClF,GAAIkF,EAAsB,QAAU,EAChC,MAAO,GAEX,MAAMC,EAAsBD,EAAsBA,EAAsB,OAAS,CAAC,EAC5EE,EAAyBJ,EAAU,IAAMC,EAAqB,YAAYE,CAAmB,EACnG,GAAI,CAACA,EACD,MAAO,GAEX,MAAME,EAAmBC,EAAAA,SAASH,CAAmB,EAAE,IAAI5O,GAAKA,EAAE,SAASnc,EAAQ,eAAe,CAAC,EACnG,GAAI,CAACqqB,GAAqBY,CAAgB,EACtC,MAAO,GAEXA,EACK,OAAOE,GAAQA,EAAK,MAAM,EAE1B,IAAIA,IAAS,CACd,GAAGA,EACH,KAAMH,EAAyBG,EAAK,MAAQ,EAC5C,GAAIH,EAAyBG,EAAK,IAAM,CAChE,EAAsB,EAEG,OAAOA,GACHnW,EAAS,OAAO,MAAM,KAGpB,CAACA,EAAS,IAAI,aAAamW,EAAK,KAAMA,EAAK,GAAInW,EAAS,OAAO,MAAM,IAAI,EAFrE,EAGd,EAEI,OAAOmW,GAAQnrB,EAAQ,SAASmrB,EAAK,KAAK,CAAC,EAE3C,QAAQA,GAAQ,CACbvd,GAAgBud,EAAK,KAAMA,EAAK,GAAInW,EAAS,GAAG,EAAE,KAAK7e,GAAQA,EAAK,KAAK,OAAS6J,EAAQ,IAAI,GAGlGrM,EAAG,QAAQw3B,EAAK,KAAMA,EAAK,GAAInrB,EAAQ,KAAK,OAAO,CAC/C,KAAMmrB,EAAK,IACd,CAAA,CAAC,CAC1B,CAAqB,CACJ,CACjB,CAAa,EACG,EAACx3B,EAAG,MAAM,OAGd,OAAOA,CACV,CACT,CAAK,CACL,CAEA,SAASy3B,GAAaprB,EAAS,CAC3B,OAAO,IAAIpF,EAAAA,OAAO,CACd,IAAK,IAAI6F,EAAS,UAAC,iBAAiB,EACpC,MAAO,CACH,YAAa,CAAC/M,EAAM0F,EAAK5E,IAAU,CAC/B,IAAIkD,EAAI6B,EAIR,GAHI/E,EAAM,SAAW,GAGjB,CAACd,EAAK,SACN,MAAO,GAEX,IAAI6J,EAAI/I,EAAM,OACd,MAAM62B,EAAM,CAAA,EACZ,KAAO9tB,EAAE,WAAa,OAClB8tB,EAAI,KAAK9tB,CAAC,EACVA,EAAIA,EAAE,WAEV,GAAI,CAAC8tB,EAAI,KAAK90B,GAASA,EAAM,WAAa,GAAG,EACzC,MAAO,GAEX,MAAMqd,EAAQlH,GAAchZ,EAAK,MAAOsM,EAAQ,KAAK,IAAI,EACnDmrB,EAAO32B,EAAM,OACb82B,GAAQ5zB,EAAKyzB,GAAS,KAA0B,OAASA,EAAK,QAAU,MAAQzzB,IAAO,OAASA,EAAKkc,EAAM,KAC3GhU,GAAUrG,EAAK4xB,GAAS,KAA0B,OAASA,EAAK,UAAY,MAAQ5xB,IAAO,OAASA,EAAKqa,EAAM,OACrH,OAAIuX,GAAQG,GACR,OAAO,KAAKA,EAAM1rB,CAAM,EACjB,IAEJ,EACV,CACJ,CACT,CAAK,CACL,CAEA,SAAS2rB,GAAavrB,EAAS,CAC3B,OAAO,IAAIpF,EAAAA,OAAO,CACd,IAAK,IAAI6F,EAAS,UAAC,iBAAiB,EACpC,MAAO,CACH,YAAa,CAAC/M,EAAMc,EAAOg3B,IAAU,CACjC,KAAM,CAAE,MAAAv4B,CAAO,EAAGS,EACZ,CAAE,UAAAP,CAAW,EAAGF,EAChB,CAAE,MAAA2V,CAAO,EAAGzV,EAClB,GAAIyV,EACA,MAAO,GAEX,IAAI6iB,EAAc,GAClBD,EAAM,QAAQ,QAAQp0B,GAAQ,CAC1Bq0B,GAAer0B,EAAK,WACxC,CAAiB,EACD,MAAM+zB,EAAOtxB,EAAAA,KAAK4xB,EAAa,CAAE,gBAAiBzrB,EAAQ,eAAiB,CAAA,EAAE,KAAK7J,GAAQA,EAAK,QAAUA,EAAK,QAAUs1B,CAAW,EACnI,MAAI,CAACA,GAAe,CAACN,EACV,IAEXnrB,EAAQ,OAAO,SAAS,QAAQA,EAAQ,KAAM,CAC1C,KAAMmrB,EAAK,IAC/B,CAAiB,EACM,GACV,CACJ,CACT,CAAK,CACL,CAMA,MAAMO,GAAkB,8DACxB,SAASC,GAAaC,EAAKC,EAAW,CAClC,MAAMC,EAAmB,CAAC,OAAQ,QAAS,MAAO,OAAQ,SAAU,MAAO,SAAU,MAAO,MAAO,MAAM,EACzG,OAAID,GACAA,EAAU,QAAQE,GAAY,CAC1B,MAAMC,EAAgB,OAAOD,GAAa,SAAWA,EAAWA,EAAS,OACrEC,GACAF,EAAiB,KAAKE,CAAY,CAElD,CAAS,EAGE,CAACJ,GAAOA,EAAI,QAAQF,GAAiB,EAAE,EAAE,MAAM,IAAI,OAAO,UAAUI,EAAiB,KAAK,GAAG,CAAC,uCAA0C,GAAG,CAAC,CACvJ,CAKK,MAACG,GAAO/tB,EAAK,OAAO,CACrB,KAAM,OACN,SAAU,IACV,YAAa,GACb,SAAU,GACV,UAAW,CACP,KAAK,QAAQ,UAAU,QAAQ6tB,GAAY,CACvC,GAAI,OAAOA,GAAa,SAAU,CAC9BG,EAAsB,uBAACH,CAAQ,EAC/B,MACH,CACDG,EAAAA,uBAAuBH,EAAS,OAAQA,EAAS,eAAe,CAC5E,CAAS,CACJ,EACD,WAAY,CACRI,EAAAA,OACH,EACD,WAAY,CACR,OAAO,KAAK,QAAQ,QACvB,EACD,YAAa,CACT,MAAO,CACH,YAAa,GACb,YAAa,GACb,SAAU,GACV,UAAW,CAAE,EACb,gBAAiB,OACjB,eAAgB,CACZ,OAAQ,SACR,IAAK,+BACL,MAAO,IACV,EACD,SAAUC,GAAO,CAAC,CAACA,CAC/B,CACK,EACD,eAAgB,CACZ,MAAO,CACH,KAAM,CACF,QAAS,KACT,UAAU5R,EAAS,CACf,OAAOA,EAAQ,aAAa,MAAM,CACrC,CACJ,EACD,OAAQ,CACJ,QAAS,KAAK,QAAQ,eAAe,MACxC,EACD,IAAK,CACD,QAAS,KAAK,QAAQ,eAAe,GACxC,EACD,MAAO,CACH,QAAS,KAAK,QAAQ,eAAe,KACxC,CACb,CACK,EACD,WAAY,CACR,MAAO,CAAC,CACA,IAAK,UACL,SAAU7D,GAAO,CACb,MAAM2U,EAAO3U,EAAI,aAAa,MAAM,EAEpC,MAAI,CAAC2U,GAAQ,CAACK,GAAaL,EAAM,KAAK,QAAQ,SAAS,EAC5C,GAEJ,IACV,CACjB,CAAa,CACR,EACD,WAAW,CAAE,eAAAtsB,GAAkB,CAE3B,OAAK2sB,GAAa3sB,EAAe,KAAM,KAAK,QAAQ,SAAS,EAItD,CAAC,IAAK/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,EAFjE,CAAC,IAAK/I,EAAgB,KAAK,QAAQ,eAAgB,CAAE,GAAG+I,EAAgB,KAAM,GAAI,EAAG,CAAC,CAGpG,EACD,aAAc,CACV,MAAO,CACH,QAASpJ,GAAc,CAAC,CAAE,MAAAvB,KACfA,EAAO,EAAC,QAAQ,KAAK,KAAMuB,CAAU,EAAE,QAAQ,kBAAmB,EAAI,EAAE,IAAG,EAEtF,WAAYA,GAAc,CAAC,CAAE,MAAAvB,KAClBA,EAAO,EACT,WAAW,KAAK,KAAMuB,EAAY,CAAE,qBAAsB,GAAM,EAChE,QAAQ,kBAAmB,EAAI,EAC/B,MAET,UAAW,IAAM,CAAC,CAAE,MAAAvB,KACTA,EAAO,EACT,UAAU,KAAK,KAAM,CAAE,qBAAsB,EAAI,CAAE,EACnD,QAAQ,kBAAmB,EAAI,EAC/B,KAErB,CACK,EACD,eAAgB,CACZ,MAAO,CACH0lB,EAAc,CACV,KAAMngB,GAAQ,CACV,MAAMyyB,EAAa,CAAA,EACnB,GAAIzyB,EAAM,CACN,KAAM,CAAE,SAAA0yB,CAAQ,EAAK,KAAK,QACpBC,EAAQ1yB,EAAAA,KAAKD,CAAI,EAAE,OAAOzD,GAAQA,EAAK,QAAUm2B,EAASn2B,EAAK,KAAK,CAAC,EACvEo2B,EAAM,QACNA,EAAM,QAAQpB,GAASkB,EAAW,KAAK,CACnC,KAAMlB,EAAK,MACX,KAAM,CACF,KAAMA,EAAK,IACd,EACD,MAAOA,EAAK,KACf,CAAA,CAAE,CAEV,CACD,OAAOkB,CACV,EACD,KAAM,KAAK,KACX,cAAe9xB,GAAS,CACpB,IAAI7C,EACJ,MAAO,CACH,MAAOA,EAAK6C,EAAM,QAAU,MAAQ7C,IAAO,OAAS,OAASA,EAAG,IACxF,CACiB,CACjB,CAAa,CACb,CACK,EACD,uBAAwB,CACpB,MAAMqG,EAAU,CAAA,EAChB,OAAI,KAAK,QAAQ,UACbA,EAAQ,KAAKwsB,GAAS,CAClB,KAAM,KAAK,KACX,gBAAiB,KAAK,QAAQ,gBAC9B,SAAU,KAAK,QAAQ,QAC1B,CAAA,CAAC,EAEF,KAAK,QAAQ,cAAgB,IAC7BxsB,EAAQ,KAAKqtB,GAAa,CACtB,KAAM,KAAK,IACd,CAAA,CAAC,EAEF,KAAK,QAAQ,aACbrtB,EAAQ,KAAKwtB,GAAa,CACtB,OAAQ,KAAK,OACb,gBAAiB,KAAK,QAAQ,gBAC9B,KAAM,KAAK,IACd,CAAA,CAAC,EAECxtB,CACV,CACL,CAAC,ECrVKyuB,GAAiBpU,EAAK,OAAO,CAC/B,KAAM,iBACN,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,CAC9B,CACK,EACD,MAAO,QACP,WAAY,CACR,MAAO,CAAC,CAAE,IAAK,IAAI,CAAE,CACxB,EACD,WAAW,CAAE,eAAApZ,GAAkB,CAC3B,MAAO,CAAC,KAAM/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,CAAC,CAC7E,EACD,aAAc,CACV,MAAO,CACH,kBAAmB,IAAM,CAAC,CAAE,MAAA3K,EAAO,MAAApB,CAAK,IAAO,CAC3C,KAAM,CAAE,UAAAE,CAAW,EAAGF,EAChB,CAAE,MAAOw5B,EAAa,IAAKC,CAAS,EAAKv5B,EACzCw5B,EAAet4B,IACrB,OAAIo4B,EAAY,eAAiB,EAC7BE,EAAa,gBAAgB,CACzB,KAAM,KAAK,IAAIF,EAAY,IAAM,EAAG,CAAC,EACrC,GAAIC,EAAU,GACtC,EAAuB,CACC,KAAM,KAAK,IACnC,CAAqB,EAEI9d,GAAgBzb,CAAS,EAC9Bw5B,EAAa,gBAAgBD,EAAU,IAAK,CACxC,KAAM,KAAK,IACnC,CAAqB,EAGDC,EAAa,cAAc,CAAE,KAAM,KAAK,IAAM,CAAA,EAE1CA,EAEH,QAAQ,CAAC,CAAE,GAAAh5B,EAAI,SAAAW,KAAe,CAC/B,IAAIoD,EACJ,GAAIpD,EAAU,CACV,KAAM,CAAE,IAAAyM,CAAG,EAAKpN,EAAG,UACbi5B,EAAW7rB,EAAI,MACrB,GAAIA,EAAI,UACAA,EAAI,UAAU,YACdpN,EAAG,aAAamO,EAAa,cAAC,OAAOnO,EAAG,IAAKoN,EAAI,IAAM,CAAC,CAAC,EAEpDA,EAAI,UAAU,QACnBpN,EAAG,aAAakb,EAAAA,cAAc,OAAOlb,EAAG,IAAKoN,EAAI,GAAG,CAAC,EAGrDpN,EAAG,aAAamO,EAAAA,cAAc,OAAOnO,EAAG,IAAKoN,EAAI,GAAG,CAAC,MAGxD,CAED,MAAM3J,GAAQM,EAAKqJ,EAAI,OAAO,KAAK,aAAa,eAAiB,MAAQrJ,IAAO,OAAS,OAASA,EAAG,SACjGN,IACAzD,EAAG,OAAOi5B,EAAUx1B,CAAI,EACxBzD,EAAG,aAAamO,EAAAA,cAAc,OAAOnO,EAAG,IAAKi5B,EAAW,CAAC,CAAC,EAEjE,CACDj5B,EAAG,eAAc,CACpB,CACD,MAAO,EAC3B,CAAiB,EACI,KACR,CACb,CACK,EACD,eAAgB,CACZ,MAAO,CACH2jB,GAAc,CACV,KAAM,8BACN,KAAM,KAAK,IAC3B,CAAa,CACb,CACK,CACL,CAAC,ECzEKuV,GAAU9sB,EAAU,OAAO,CAC7B,KAAM,UACN,YAAa,CACT,MAAO,CACH,MAAO,IACP,cAAe,GAC3B,CACK,EACD,aAAc,CACV,MAAO,CACH,KAAM,IAAM,CAAC,CAAE,MAAA9M,EAAO,SAAAqB,CAAQ,IACnBw4B,EAAI,KAAC75B,EAAOqB,CAAQ,EAE/B,KAAM,IAAM,CAAC,CAAE,MAAArB,EAAO,SAAAqB,CAAQ,IACnBy4B,EAAI,KAAC95B,EAAOqB,CAAQ,CAE3C,CACK,EACD,uBAAwB,CACpB,MAAO,CACH04B,EAAO,QAAC,KAAK,OAAO,CAChC,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,QAAS,IAAM,KAAK,OAAO,SAAS,KAAM,EAC1C,cAAe,IAAM,KAAK,OAAO,SAAS,KAAM,EAChD,QAAS,IAAM,KAAK,OAAO,SAAS,KAAM,EAE1C,QAAS,IAAM,KAAK,OAAO,SAAS,KAAM,EAC1C,cAAe,IAAM,KAAK,OAAO,SAAS,KAAM,CAC5D,CACK,CACL,CAAC,ECtCKC,GAAiBltB,EAAU,OAAO,CACpC,KAAM,iBACN,YAAa,CACT,MAAO,CACH,MAAO,KACP,KAAM,UAClB,CACK,EACD,YAAa,CACT,MAAO,CACH,WAAY,IAAM,EAClB,MAAO,IAAM,CACzB,CACK,EACD,gBAAiB,CACb,KAAK,QAAQ,WAAaC,GAAW,CACjC,MAAM5I,GAAQ4I,GAAY,KAA6B,OAASA,EAAQ,OAAS,KAAK,OAAO,MAAM,IAEnG,QADcA,GAAY,KAA6B,OAASA,EAAQ,OAAS,KAAK,QAAQ,QACjF,WACI5I,EAAK,YAAY,EAAGA,EAAK,QAAQ,KAAM,OAAW,GAAG,EACtD,OAETA,EAAK,QACxB,EACQ,KAAK,QAAQ,MAAQ4I,GAAW,CAC5B,MAAM5I,GAAQ4I,GAAY,KAA6B,OAASA,EAAQ,OAAS,KAAK,OAAO,MAAM,IAGnG,OAFa5I,EAAK,YAAY,EAAGA,EAAK,QAAQ,KAAM,IAAK,GAAG,EACzC,MAAM,GAAG,EAAE,OAAO81B,GAAQA,IAAS,EAAE,EAC3C,MACzB,CACK,EACD,uBAAwB,CACpB,MAAO,CACH,IAAItyB,SAAO,CACP,IAAK,IAAI6F,EAAS,UAAC,gBAAgB,EACnC,kBAAmB,CAACvN,EAAaD,IAAU,CACvC,MAAMk6B,EAAQ,KAAK,QAAQ,MAE3B,GAAI,CAACj6B,EAAY,YAAci6B,IAAU,GAAKA,IAAU,MAAQA,IAAU,OACtE,MAAO,GAEX,MAAMC,EAAU,KAAK,QAAQ,WAAW,CAAE,KAAMn6B,EAAM,GAAG,CAAE,EACrDo6B,EAAU,KAAK,QAAQ,WAAW,CAAE,KAAMn6B,EAAY,GAAG,CAAE,EAMjE,GAJIm6B,GAAWF,GAIXC,EAAUD,GAASE,EAAUF,GAASE,GAAWD,EACjD,MAAO,GAQX,GALIA,EAAUD,GAASE,EAAUF,GAASE,EAAUD,GAKhD,CAFYl6B,EAAY,QAAQ,OAAO,EAGvC,MAAO,GAGX,MAAMkG,EAAMlG,EAAY,UAAU,MAAM,IAClCo6B,EAAOD,EAAUF,EACjBlzB,EAAOb,EAAMk0B,EACbpzB,EAAKd,EASX,OANAlG,EAAY,YAAY+G,EAAMC,CAAE,EAM5B,EADgB,KAAK,QAAQ,WAAW,CAAE,KAAMhH,EAAY,GAAG,CAAE,EACnDi6B,EAIrB,CACjB,CAAa,CACb,CACK,CACL,CAAC,EC/EKI,GAAaxtB,EAAU,OAAO,CAChC,KAAM,aACN,YAAa,CACT,MAAO,CACH,MAAO,eACP,MAAO,EACP,MAAO,MACnB,CACK,EACD,uBAAwB,CACpB,MAAO,CACHytB,EAAU,WAAC,KAAK,OAAO,CACnC,CACK,CACL,CAAC,ECfKC,GAAe1tB,EAAU,OAAO,CAClC,KAAM,QACN,YAAa,CACT,MAAO,CACH,UAAW,YACX,KAAM,KAClB,CACK,EACD,uBAAwB,CACpB,MAAO,CACH,IAAInF,SAAO,CACP,IAAK,IAAI6F,EAAS,UAAC,OAAO,EAC1B,MAAO,CACH,YAAa,CAAC,CAAE,IAAArN,EAAK,UAAAD,KAAgB,CACjC,KAAM,CAAE,WAAAmmB,EAAY,UAAAoU,GAAc,KAAK,OACjC,CAAE,OAAAnI,CAAQ,EAAGpyB,EACb4L,EAAc,CAAA,EACpB,GAAI,CAACua,GAAc,CAACoU,EAChB,OAAOC,gBAAc,OAAOv6B,EAAK,CAAE,CAAA,EAGvC,IAAIw6B,EAAY,EACZ,KAAK,QAAQ,OAAS,WACtBx6B,EAAI,YAAY,CAACgE,EAAMgC,IAAQ,CAC3B,GAAIhC,EAAK,OACL,OAGJ,GAAI,EADcmuB,GAAUnsB,GAAOmsB,GAAUnsB,EAAMhC,EAAK,SAAW,GAE/D,MAAO,GAEXw2B,GAAa,CAC7C,CAA6B,EAGL,IAAIC,EAAe,EACnB,OAAAz6B,EAAI,YAAY,CAACgE,EAAMgC,IAAQ,CAK3B,GAJIhC,EAAK,QAIL,EADcmuB,GAAUnsB,GAAOmsB,GAAUnsB,EAAMhC,EAAK,SAAW,GAE/D,MAAO,GAKX,GAHAy2B,GAAgB,EACI,KAAK,QAAQ,OAAS,WAAaD,EAAYC,EAAe,GAC1E,KAAK,QAAQ,OAAS,cAAgBA,EAAe,EAEzD,OAAO,KAAK,QAAQ,OAAS,UAEjC9uB,EAAY,KAAK+uB,aAAW,KAAK10B,EAAKA,EAAMhC,EAAK,SAAU,CACvD,MAAO,KAAK,QAAQ,SACvB,CAAA,CAAC,CAC9B,CAAyB,EACMu2B,gBAAc,OAAOv6B,EAAK2L,CAAW,CAC/C,CACJ,CACjB,CAAa,CACb,CACK,CACL,CAAC,EC3DKgvB,GAAYhuB,EAAU,OAAO,CAC/B,KAAM,YACN,uBAAwB,CACpB,MAAO,CACHiuB,YAAW,CACvB,CACK,EACD,iBAAiBr5B,EAAW,CACxB,IAAI+C,EACJ,MAAM7C,EAAU,CACZ,KAAMF,EAAU,KAChB,QAASA,EAAU,QACnB,QAASA,EAAU,OAC/B,EACQ,MAAO,CACH,gBAAiB+C,EAAKX,EAAarC,EAAkBC,EAAW,iBAAkBE,CAAO,CAAC,KAAO,MAAQ6C,IAAO,OAASA,EAAK,IAC1I,CACK,CACL,CAAC,ECrBKu2B,GAAY7V,EAAK,OAAO,CAC1B,KAAM,YACN,YAAa,CACT,MAAO,CACH,UAAW,GACX,eAAgB,CAAE,CAC9B,CACK,EACD,OAAQ,GACR,MAAO,SACP,WAAY,GACZ,WAAY,CACR,MAAO,CACH,CAAE,IAAK,IAAM,CACzB,CACK,EACD,WAAW,CAAE,eAAApZ,GAAkB,CAC3B,MAAO,CAAC,KAAM/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,CAAC,CAC7E,EACD,YAAa,CACT,MAAO;AAAA,CACV,EACD,aAAc,CACV,MAAO,CACH,aAAc,IAAM,CAAC,CAAE,SAAAvE,EAAU,MAAApG,EAAO,MAAApB,EAAO,OAAAQ,KACpCgH,EAAS,MAAM,CAClB,IAAMA,EAAS,SAAU,EACzB,IAAMA,EAAS,QAAQ,IAAM,CACzB,KAAM,CAAE,UAAAtH,EAAW,YAAAE,CAAa,EAAGJ,EACnC,GAAIE,EAAU,MAAM,OAAO,KAAK,KAAK,UACjC,MAAO,GAEX,KAAM,CAAE,UAAA2d,CAAS,EAAK,KAAK,QACrB,CAAE,gBAAAH,CAAe,EAAKld,EAAO,iBAC7B6E,EAAQjF,GACNF,EAAU,IAAI,cAAgBA,EAAU,MAAM,MAAK,EAC3D,OAAOkB,EAAO,EACT,cAAc,CAAE,KAAM,KAAK,IAAI,CAAE,EACjC,QAAQ,CAAC,CAAE,GAAAV,EAAI,SAAAW,KAAe,CAC/B,GAAIA,GAAYgE,GAASwY,EAAW,CAChC,MAAMF,EAAgBtY,EACjB,OAAOG,GAAQkY,EAAgB,SAASlY,EAAK,KAAK,IAAI,CAAC,EAC5D9E,EAAG,YAAYid,CAAa,CAC/B,CACD,MAAO,EACnC,CAAyB,EACI,KAC7B,CAAqB,CACrB,CAAiB,CAEjB,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,YAAa,IAAM,KAAK,OAAO,SAAS,aAAc,EACtD,cAAe,IAAM,KAAK,OAAO,SAAS,aAAc,CACpE,CACK,CACL,CAAC,EC1DKyY,GAAWjR,EAAK,OAAO,CACzB,KAAM,WACN,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,EAClB,mBAAoB,aACpB,oBAAqB,aACjC,CACK,EACD,QAAS,mBACT,SAAU,GACV,WAAY,CACR,MAAO,CACH,CACI,IAAK,IACR,CACb,CACK,EACD,WAAW,CAAE,eAAApZ,GAAkB,CAC3B,MAAO,CAAC,KAAM/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAChF,EACD,sBAAuB,CACnB,MAAO,CACH,MAAO,IAAM,KAAK,OAAO,SAAS,cAAc,KAAK,IAAI,EACzD,IAAK,IAAM,KAAK,OAAO,SAAS,aAAa,KAAK,IAAI,EACtD,YAAa,IAAM,KAAK,OAAO,SAAS,aAAa,KAAK,IAAI,CAC1E,CACK,CACL,CAAC,EC5BKkvB,GAAY9V,EAAK,OAAO,CAC1B,KAAM,YACN,SAAU,IACV,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,CAC9B,CACK,EACD,MAAO,QACP,QAAS,UACT,WAAY,CACR,MAAO,CACH,CAAE,IAAK,GAAK,CACxB,CACK,EACD,WAAW,CAAE,eAAApZ,GAAkB,CAC3B,MAAO,CAAC,IAAK/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAC/E,EACD,aAAc,CACV,MAAO,CACH,aAAc,IAAM,CAAC,CAAE,SAAAvE,KACZA,EAAS,QAAQ,KAAK,IAAI,CAEjD,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,YAAa,IAAM,KAAK,OAAO,SAAS,aAAc,CAClE,CACK,CACL,CAAC,EC3BK0zB,GAAcpuB,EAAU,OAAO,CACjC,KAAM,cACN,YAAa,CACT,MAAO,CACH,iBAAkB,kBAClB,eAAgB,WAChB,YAAa,oBACb,qBAAsB,GACtB,gBAAiB,GACjB,gBAAiB,EAC7B,CACK,EACD,uBAAwB,CACpB,MAAO,CACH,IAAInF,SAAO,CACP,IAAK,IAAI6F,EAAS,UAAC,aAAa,EAChC,MAAO,CACH,YAAa,CAAC,CAAE,IAAArN,EAAK,UAAAD,KAAgB,CACjC,MAAMi7B,EAAS,KAAK,OAAO,YAAc,CAAC,KAAK,QAAQ,qBACjD,CAAE,OAAA7I,CAAQ,EAAGpyB,EACb4L,EAAc,CAAA,EACpB,GAAI,CAACqvB,EACD,OAAO,KAEX,MAAMC,EAAa,KAAK,OAAO,QAC/B,OAAAj7B,EAAI,YAAY,CAACgE,EAAMgC,IAAQ,CAC3B,MAAMk1B,EAAY/I,GAAUnsB,GAAOmsB,GAAUnsB,EAAMhC,EAAK,SAClDm3B,EAAU,CAACn3B,EAAK,QAAUmX,GAAYnX,CAAI,EAChD,IAAKk3B,GAAa,CAAC,KAAK,QAAQ,kBAAoBC,EAAS,CACzD,MAAMC,EAAU,CAAC,KAAK,QAAQ,cAAc,EACxCH,GACAG,EAAQ,KAAK,KAAK,QAAQ,gBAAgB,EAE9C,MAAMC,EAAaX,EAAAA,WAAW,KAAK10B,EAAKA,EAAMhC,EAAK,SAAU,CACzD,MAAOo3B,EAAQ,KAAK,GAAG,EACvB,mBAAoB,OAAO,KAAK,QAAQ,aAAgB,WAClD,KAAK,QAAQ,YAAY,CACvB,OAAQ,KAAK,OACb,KAAAp3B,EACA,IAAAgC,EACA,UAAAk1B,CAC5C,CAAyC,EACC,KAAK,QAAQ,WACvD,CAAiC,EACDvvB,EAAY,KAAK0vB,CAAU,CAC9B,CACD,OAAO,KAAK,QAAQ,eAChD,CAAyB,EACMd,gBAAc,OAAOv6B,EAAK2L,CAAW,CAC/C,CACJ,CACjB,CAAa,CACb,CACK,CACL,CAAC,ECzDK2vB,GAAOtW,EAAK,OAAO,CACrB,KAAM,OACN,MAAO,QACX,CAAC,ECHKuW,GAAWvW,EAAK,OAAO,CACzB,KAAM,MACN,QAAS,GACT,QAAS,QACb,CAAC,ECJKwW,GAAY1wB,EAAK,OAAO,CAC1B,KAAM,YACN,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,CAC9B,CACK,EACD,WAAY,CACR,MAAO,CACH,CACI,IAAK,KACR,EACD,CACI,MAAO,iBACP,SAAS3H,EAAO,CAEZ,OAAIA,IAAU,MACH,GAGJ,IACV,CACJ,CACb,CACK,EACD,WAAW,CAAE,eAAAyI,GAAkB,CAC3B,MAAO,CAAC,MAAO/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CACjF,EACD,aAAc,CACV,MAAO,CACH,aAAc,IAAM,CAAC,CAAE,SAAAvE,KACZA,EAAS,QAAQ,KAAK,IAAI,EAErC,gBAAiB,IAAM,CAAC,CAAE,SAAAA,KACfA,EAAS,WAAW,KAAK,IAAI,EAExC,eAAgB,IAAM,CAAC,CAAE,SAAAA,KACdA,EAAS,UAAU,KAAK,IAAI,CAEnD,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,QAAS,IAAM,KAAK,OAAO,SAAS,gBAAiB,CACjE,CACK,CACL,CAAC,EC9CKo0B,GAAc3wB,EAAK,OAAO,CAC5B,KAAM,cACN,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,CAC9B,CACK,EACD,WAAY,CACR,MAAO,CACH,CACI,IAAK,KACR,EACD,CACI,MAAO,iBACP,SAAS3H,EAAO,CAEZ,OAAIA,IAAU,QACH,GAGJ,IACV,CACJ,CACb,CACK,EACD,WAAW,CAAE,eAAAyI,GAAkB,CAC3B,MAAO,CAAC,MAAO/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CACjF,EACD,aAAc,CACV,MAAO,CACH,eAAgB,IAAM,CAAC,CAAE,SAAAvE,KACdA,EAAS,QAAQ,KAAK,IAAI,EAErC,kBAAmB,IAAM,CAAC,CAAE,SAAAA,KACjBA,EAAS,WAAW,KAAK,IAAI,EAExC,iBAAkB,IAAM,CAAC,CAAE,SAAAA,KAChBA,EAAS,UAAU,KAAK,IAAI,CAEnD,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,QAAS,IAAM,KAAK,OAAO,SAAS,kBAAmB,CACnE,CACK,CACL,CAAC,EChDD,SAASq0B,GAAoB97B,EAAQ,CACjC,IAAI0E,EACJ,KAAM,CAAE,KAAAq3B,EAAM,YAAAC,EAAa,gBAAAC,EAAiB,YAAAC,EAAa,UAAAC,CAAY,EAAGn8B,EAClEo8B,EAAcpV,GAAe+U,CAAI,EACjC9Y,EAAS,IAAI,OAAO,MAAMmZ,CAAW,GAAG,EACxCC,EAASH,EAAc,IAAM,GAC7BI,EAASN,EACT,IAAI,OAAO,GAAGK,CAAM,GAAGD,CAAW,YAAYA,CAAW,MAAO,IAAI,EACpE,IAAI,OAAO,GAAGC,CAAM,SAASD,CAAW,QAAQA,CAAW,KAAM,IAAI,EACrEx1B,IAASlC,EAAKy3B,EAAU,cAAgB,MAAQz3B,IAAO,OAAS,OAASA,EAAG,SAAWy3B,EAAU,WAAW,KAClH,GAAI,CAACv1B,EACD,OAAO,KAEX,MAAM21B,EAAWJ,EAAU,IAAMv1B,EAAK,OAChCW,EAAQ,MAAM,KAAKX,EAAK,SAAS01B,CAAM,CAAC,EAAE,MAChD,GAAI,CAAC/0B,GAASA,EAAM,QAAU,QAAaA,EAAM,QAAU,OACvD,OAAO,KAIX,MAAMi1B,EAAcj1B,EAAM,MAAM,MAAM,KAAK,IAAI,EAAGA,EAAM,MAAQ,CAAC,EAAGA,EAAM,KAAK,EACzEk1B,EAAuB,IAAI,OAAO,KAAKR,GAAoB,KAAqC,OAASA,EAAgB,KAAK,EAAE,CAAC,OAAO,EAAE,KAAKO,CAAW,EAChK,GAAIP,IAAoB,MAAQ,CAACQ,EAC7B,OAAO,KAGX,MAAMx1B,EAAOs1B,EAAWh1B,EAAM,MAC9B,IAAIL,EAAKD,EAAOM,EAAM,CAAC,EAAE,OAQzB,OALIy0B,GAAe/Y,EAAO,KAAKrc,EAAK,MAAMM,EAAK,EAAGA,EAAK,CAAC,CAAC,IACrDK,EAAM,CAAC,GAAK,IACZL,GAAM,GAGND,EAAOk1B,EAAU,KAAOj1B,GAAMi1B,EAAU,IACjC,CACH,MAAO,CACH,KAAAl1B,EACA,GAAAC,CACH,EACD,MAAOK,EAAM,CAAC,EAAE,MAAMw0B,EAAK,MAAM,EACjC,KAAMx0B,EAAM,CAAC,CACzB,EAEW,IACX,CAEA,MAAMm1B,GAAsB,IAAIjvB,YAAU,YAAY,EAKtD,SAASkvB,GAAW,CAAE,UAAAhM,EAAY+L,GAAqB,OAAAj8B,EAAQ,KAAAs7B,EAAO,IAAK,YAAAC,EAAc,GAAO,gBAAAC,EAAkB,CAAC,GAAG,EAAG,YAAAC,EAAc,GAAO,cAAAU,EAAgB,OAAQ,gBAAAC,EAAkB,aAAc,QAAAh8B,EAAU,IAAM,KAAM,MAAAuC,EAAQ,IAAM,CAAE,EAAE,OAAA05B,EAAS,KAAO,CAAA,GAAK,MAAAC,EAAQ,IAAM,GAAM,oBAAqBC,EAAwBlB,IAAwB,CACxV,IAAIv7B,EACJ,MAAM6rB,EAAW0Q,GAAW,KAA4B,OAASA,IAC3D11B,EAAS,IAAIQ,SAAO,CACtB,IAAK+oB,EACL,MAAO,CACH,MAAO,CACH,OAAQ,MAAOjwB,EAAM+rB,IAAc,CAC/B,IAAI/nB,EAAI6B,EAAIif,EAAIC,EAAIC,EAAIC,EAAIC,EAC5B,MAAM/d,GAAQnD,EAAK,KAAK,OAAS,MAAQA,IAAO,OAAS,OAASA,EAAG,SAAS+nB,CAAS,EACjFwQ,GAAQ12B,EAAK,KAAK,OAAS,MAAQA,IAAO,OAAS,OAASA,EAAG,SAAS7F,EAAK,KAAK,EAElFw8B,EAAQr1B,EAAK,QAAUo1B,EAAK,QAAUp1B,EAAK,MAAM,OAASo1B,EAAK,MAAM,KACrEE,EAAU,CAACt1B,EAAK,QAAUo1B,EAAK,OAC/BG,EAAUv1B,EAAK,QAAU,CAACo1B,EAAK,OAC/BI,EAAU,CAACF,GAAW,CAACC,GAAWv1B,EAAK,QAAUo1B,EAAK,MACtDK,EAAcH,GAAYD,GAASG,EACnCE,EAAeF,GAAWH,EAC1BM,EAAaJ,GAAYF,GAASG,EAExC,GAAI,CAACC,GAAe,CAACC,GAAgB,CAACC,EAClC,OAEJ,MAAMv9B,EAAQu9B,GAAc,CAACF,EAAcz1B,EAAOo1B,EAC5CQ,GAAiB/8B,EAAK,IAAI,cAAc,wBAAwBT,EAAM,YAAY,IAAI,EAC5FM,EAAQ,CACJ,OAAAE,EACA,MAAOR,EAAM,MACb,MAAOA,EAAM,MACb,KAAMA,EAAM,KACZ,MAAO,CAAE,EACT,QAASy9B,GACE78B,EAAQ,CACX,OAAAJ,EACA,MAAOR,EAAM,MACb,MAAOy9B,CACvC,CAA6B,EAEL,eAAAD,GAGA,WAAYA,GACN,IAAM,CACJ,IAAI/4B,EAEJ,KAAM,CAAE,aAAAi5B,EAAY,GAAMj5B,EAAK,KAAK,OAAS,MAAQA,IAAO,OAAS,OAASA,EAAG,SAASjE,EAAO,KAAK,EAChGm9B,GAAwBl9B,EAAK,IAAI,cAAc,wBAAwBi9B,EAAY,IAAI,EAC7F,OAAQC,IAA0B,KAA2C,OAASA,GAAsB,sBAAuB,IAAK,IAC3I,EACC,IAC9B,EACwBN,KACC9X,EAAK4G,GAAa,KAA8B,OAASA,EAAS,iBAAmB,MAAQ5G,IAAO,QAAkBA,EAAG,KAAK4G,EAAU7rB,CAAK,GAE9Ig9B,KACC9X,EAAK2G,GAAa,KAA8B,OAASA,EAAS,kBAAoB,MAAQ3G,IAAO,QAAkBA,EAAG,KAAK2G,EAAU7rB,CAAK,IAE/Ig9B,GAAgBD,KAChB/8B,EAAM,MAAQ,MAAM6C,EAAM,CACtB,OAAA3C,EACA,MAAOR,EAAM,KACzC,CAAyB,GAEDu9B,KACC9X,EAAK0G,GAAa,KAA8B,OAASA,EAAS,UAAY,MAAQ1G,IAAO,QAAkBA,EAAG,KAAK0G,EAAU7rB,CAAK,GAEvIg9B,KACC5X,EAAKyG,GAAa,KAA8B,OAASA,EAAS,YAAc,MAAQzG,IAAO,QAAkBA,EAAG,KAAKyG,EAAU7rB,CAAK,GAEzI+8B,KACC1X,EAAKwG,GAAa,KAA8B,OAASA,EAAS,WAAa,MAAQxG,IAAO,QAAkBA,EAAG,KAAKwG,EAAU7rB,CAAK,EAE/I,EACD,QAAS,IAAM,CACX,IAAImE,EACCnE,KAGJmE,EAAK0nB,GAAa,KAA8B,OAASA,EAAS,UAAY,MAAQ1nB,IAAO,QAAkBA,EAAG,KAAK0nB,EAAU7rB,CAAK,EAC1I,CACjB,CACS,EACD,MAAO,CAEH,MAAO,CAWH,MAVc,CACV,OAAQ,GACR,MAAO,CACH,KAAM,EACN,GAAI,CACP,EACD,MAAO,KACP,KAAM,KACN,UAAW,EAC/B,CAEa,EAED,MAAML,EAAa2H,EAAMg2B,EAAW59B,EAAO,CACvC,KAAM,CAAE,WAAAqmB,CAAY,EAAG7lB,EACjB,CAAE,UAAAunB,CAAS,EAAKvnB,EAAO,KACvB,CAAE,UAAAN,CAAW,EAAGD,EAChB,CAAE,MAAA0V,EAAO,KAAA3O,CAAM,EAAG9G,EAClB88B,EAAO,CAAE,GAAGp1B,GAKlB,GAJAo1B,EAAK,UAAYjV,EAIb1B,IAAe1Q,GAASnV,EAAO,KAAK,WAAY,EAE3CwG,EAAOY,EAAK,MAAM,MAAQZ,EAAOY,EAAK,MAAM,KAAO,CAACmgB,GAAa,CAACngB,EAAK,YACxEo1B,EAAK,OAAS,IAGlB,MAAM11B,EAAQy1B,EAAsB,CAChC,KAAAjB,EACA,YAAAC,EACA,gBAAAC,EACA,YAAAC,EACA,UAAW/7B,EAAU,KAC7C,CAAqB,EACKw9B,EAAe,MAAM,KAAK,MAAM,KAAK,OAAQ,EAAG,UAAU,CAAC,GAE7Dp2B,GAASw1B,EAAM,CACf,OAAAt8B,EAAQ,MAAAR,EAAO,MAAOsH,EAAM,MAAO,SAAUM,EAAK,MAC1E,CAAqB,GACGo1B,EAAK,OAAS,GACdA,EAAK,aAAep1B,EAAK,aAAeA,EAAK,aAAe81B,EAC5DV,EAAK,MAAQ11B,EAAM,MACnB01B,EAAK,MAAQ11B,EAAM,MACnB01B,EAAK,KAAO11B,EAAM,MAGlB01B,EAAK,OAAS,EAErB,MAEGA,EAAK,OAAS,GAGlB,OAAKA,EAAK,SACNA,EAAK,aAAe,KACpBA,EAAK,MAAQ,CAAE,KAAM,EAAG,GAAI,GAC5BA,EAAK,MAAQ,KACbA,EAAK,KAAO,MAETA,CACV,CACJ,EACD,MAAO,CAEH,cAAcv8B,EAAMc,EAAO,CACvB,IAAIkD,EACJ,KAAM,CAAE,OAAA02B,EAAQ,MAAA5zB,CAAO,EAAGJ,EAAO,SAAS1G,EAAK,KAAK,EACpD,OAAK06B,KAGI12B,EAAK0nB,GAAa,KAA8B,OAASA,EAAS,aAAe,MAAQ1nB,IAAO,OAAS,OAASA,EAAG,KAAK0nB,EAAU,CAAE,KAAA1rB,EAAM,MAAAc,EAAO,MAAAgG,CAAO,CAAA,IAAM,EAC5K,EAED,YAAYvH,EAAO,CACf,KAAM,CAAE,OAAAm7B,EAAQ,MAAA5zB,EAAO,aAAAm2B,CAAc,EAAGv2B,EAAO,SAASnH,CAAK,EAC7D,OAAKm7B,EAGET,gBAAc,OAAO16B,EAAM,IAAK,CACnC66B,EAAAA,WAAW,OAAOtzB,EAAM,KAAMA,EAAM,GAAI,CACpC,SAAUo1B,EACV,MAAOC,EACP,qBAAsBc,CAC9C,CAAqB,CACrB,CAAiB,EARU,IASd,CACJ,CACT,CAAK,EACD,OAAOv2B,CACX,CCpOA,MAAMytB,GAAa,2DAKbiJ,GAAQ1Y,EAAK,OAAO,CACtB,KAAM,QACN,YAAa,CACT,MAAO,CACH,OAAQ,GACR,YAAa,GACb,eAAgB,CAAE,CAC9B,CACK,EACD,QAAS,CACL,OAAO,KAAK,QAAQ,MACvB,EACD,OAAQ,CACJ,OAAO,KAAK,QAAQ,OAAS,SAAW,OAC3C,EACD,UAAW,GACX,eAAgB,CACZ,MAAO,CACH,IAAK,CACD,QAAS,IACZ,EACD,IAAK,CACD,QAAS,IACZ,EACD,MAAO,CACH,QAAS,IACZ,CACb,CACK,EACD,WAAY,CACR,MAAO,CACH,CACI,IAAK,KAAK,QAAQ,YACZ,WACA,8BACT,CACb,CACK,EACD,WAAW,CAAE,eAAApZ,GAAkB,CAC3B,MAAO,CAAC,MAAO/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,CAAC,CAC9E,EACD,aAAc,CACV,MAAO,CACH,SAAUgB,GAAW,CAAC,CAAE,SAAAvF,KACbA,EAAS,cAAc,CAC1B,KAAM,KAAK,KACX,MAAOuF,CAC3B,CAAiB,CAEjB,CACK,EACD,eAAgB,CACZ,MAAO,CACHsX,GAAc,CACV,KAAMuQ,GACN,KAAM,KAAK,KACX,cAAettB,GAAS,CACpB,KAAM,CAAK,CAAA,CAAA2N,EAAK6oB,EAAKC,CAAK,EAAIz2B,EAC9B,MAAO,CAAE,IAAAw2B,EAAK,IAAA7oB,EAAK,MAAA8oB,EACtB,CACjB,CAAa,CACb,CACK,CACL,CAAC,ECnEKC,GAAW7Y,EAAK,OAAO,CACzB,KAAM,WACN,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,CAC9B,CACK,EACD,QAAS,6BACT,UAAW,MACX,WAAY,CACR,MAAO,CACH,CAAE,IAAK,IAAM,CACzB,CACK,EACD,WAAW,CAAE,eAAApZ,GAAkB,CAC3B,MAAO,CAAC,KAAM/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAChF,CACL,CAAC,ECnBD,SAASkyB,GAAc95B,EAAM+5B,EAAUC,EAAOC,EAAcC,EAAaC,EAAe,CACpF,IAAIC,EAAa,EACbC,EAAa,GACbC,EAAUP,EAAS,WACvB,MAAMQ,EAAMv6B,EAAK,WACjB,QAASsM,EAAI,EAAGkuB,EAAM,EAAGluB,EAAIiuB,EAAI,WAAYjuB,GAAK,EAAG,CACjD,KAAM,CAAE,QAAAmuB,EAAS,SAAAC,CAAU,EAAGH,EAAI,MAAMjuB,CAAC,EAAE,MAC3C,QAAS+P,EAAI,EAAGA,EAAIoe,EAASpe,GAAK,EAAGme,GAAO,EAAG,CAC3C,MAAMG,EAAWT,IAAgBM,EAAML,EAAgBO,GAAYA,EAASre,CAAC,EACvEue,EAAWD,EAAW,GAAGA,CAAQ,KAAO,GAC9CP,GAAcO,GAAYV,EACrBU,IACDN,EAAa,IAEZC,GAIGA,EAAQ,MAAM,QAAUM,IACxBN,EAAQ,MAAM,MAAQM,GAE1BN,EAAUA,EAAQ,aANlBP,EAAS,YAAY,SAAS,cAAc,KAAK,CAAC,EAAE,MAAM,MAAQa,CAQzE,CACJ,CACD,KAAON,GAAS,CACZ,MAAMlf,EAAQkf,EAAQ,YACtBA,EAAQ,WAAW,YAAYA,CAAO,EACtCA,EAAUlf,CACb,CACGif,GACAL,EAAM,MAAM,MAAQ,GAAGI,CAAU,KACjCJ,EAAM,MAAM,SAAW,KAGvBA,EAAM,MAAM,MAAQ,GACpBA,EAAM,MAAM,SAAW,GAAGI,CAAU,KAE5C,CACA,MAAMS,EAAU,CACZ,YAAY76B,EAAMi6B,EAAc,CAC5B,KAAK,KAAOj6B,EACZ,KAAK,aAAei6B,EACpB,KAAK,IAAM,SAAS,cAAc,KAAK,EACvC,KAAK,IAAI,UAAY,eACrB,KAAK,MAAQ,KAAK,IAAI,YAAY,SAAS,cAAc,OAAO,CAAC,EACjE,KAAK,SAAW,KAAK,MAAM,YAAY,SAAS,cAAc,UAAU,CAAC,EACzEH,GAAc95B,EAAM,KAAK,SAAU,KAAK,MAAOi6B,CAAY,EAC3D,KAAK,WAAa,KAAK,MAAM,YAAY,SAAS,cAAc,OAAO,CAAC,CAC3E,CACD,OAAOj6B,EAAM,CACT,OAAIA,EAAK,OAAS,KAAK,KAAK,KACjB,IAEX,KAAK,KAAOA,EACZ85B,GAAc95B,EAAM,KAAK,SAAU,KAAK,MAAO,KAAK,YAAY,EACzD,GACV,CACD,eAAe0iB,EAAU,CACrB,OAAQA,EAAS,OAAS,eAClBA,EAAS,SAAW,KAAK,OAAS,KAAK,SAAS,SAASA,EAAS,MAAM,EACnF,CACL,CAWA,SAASoY,GAAe96B,EAAMi6B,EAAcC,EAAaC,EAAe,CACpE,IAAIC,EAAa,EACbC,EAAa,GACjB,MAAMU,EAAO,CAAA,EACPR,EAAMv6B,EAAK,WACjB,GAAI,CAACu6B,EACD,MAAO,GAEX,QAASjuB,EAAI,EAAGkuB,EAAM,EAAGluB,EAAIiuB,EAAI,WAAYjuB,GAAK,EAAG,CACjD,KAAM,CAAE,QAAAmuB,EAAS,SAAAC,CAAU,EAAGH,EAAI,MAAMjuB,CAAC,EAAE,MAC3C,QAAS+P,EAAI,EAAGA,EAAIoe,EAASpe,GAAK,EAAGme,GAAO,EAAG,CAC3C,MAAMG,EAAWT,IAAgBM,EAAML,EAAgBO,GAAYA,EAASre,CAAC,EACvEue,EAAWD,EAAW,GAAGA,CAAQ,KAAO,GAC9CP,GAAcO,GAAYV,EACrBU,IACDN,EAAa,IAEjBU,EAAK,KAAK,CAAC,MAAOH,EAAW,CAAE,MAAO,UAAUA,CAAQ,IAAO,CAAA,CAAE,CAAC,CACrE,CACJ,CACD,MAAMI,EAAaX,EAAa,GAAGD,CAAU,KAAO,GAC9Ca,EAAgBZ,EAAa,GAAK,GAAGD,CAAU,KAErD,MAAO,CAAE,SADQ,CAAC,WAAY,CAAA,EAAI,GAAGW,CAAI,EACtB,WAAAC,EAAY,cAAAC,EACnC,CAEA,SAASC,GAAWC,EAAUC,EAAa,CAIvC,OAAOD,EAAS,eACpB,CAEA,SAASE,GAAkBz8B,EAAQ,CAC/B,GAAIA,EAAO,OAAO,eACd,OAAOA,EAAO,OAAO,eAEzB,MAAM08B,EAAQ,CAAA,EACd,cAAO,KAAK18B,EAAO,KAAK,EAAE,QAAQP,GAAQ,CACtC,MAAMyU,EAAWlU,EAAO,MAAMP,CAAI,EAC9ByU,EAAS,KAAK,YACdwoB,EAAMxoB,EAAS,KAAK,SAAS,EAAIA,EAE7C,CAAK,EACDlU,EAAO,OAAO,eAAiB08B,EACxBA,CACX,CAEA,SAASC,GAAY38B,EAAQ48B,EAAWC,EAAWC,EAAeN,EAAa,CAC3E,MAAMthB,EAAQuhB,GAAkBz8B,CAAM,EAChC+8B,EAAc,CAAA,EACdC,EAAQ,CAAA,EACd,QAAS15B,EAAQ,EAAGA,EAAQu5B,EAAWv5B,GAAS,EAAG,CAC/C,MAAM25B,EAAOX,GAAWphB,EAAM,IAAiB,EAI/C,GAHI+hB,GACAD,EAAM,KAAKC,CAAI,EAEfH,EAAe,CACf,MAAMI,EAAaZ,GAAWphB,EAAM,WAAwB,EACxDgiB,GACAH,EAAY,KAAKG,CAAU,CAElC,CACJ,CACD,MAAMC,EAAO,CAAA,EACb,QAAS75B,EAAQ,EAAGA,EAAQs5B,EAAWt5B,GAAS,EAC5C65B,EAAK,KAAKjiB,EAAM,IAAI,cAAc,KAAM4hB,GAAiBx5B,IAAU,EAAIy5B,EAAcC,CAAK,CAAC,EAE/F,OAAO9hB,EAAM,MAAM,cAAc,KAAMiiB,CAAI,CAC/C,CAEA,SAASC,GAAgB78B,EAAO,CAC5B,OAAOA,aAAiB88B,EAAAA,aAC5B,CAEA,MAAMC,GAAkC,CAAC,CAAE,OAAA7/B,KAAa,CACpD,KAAM,CAAE,UAAAN,CAAS,EAAKM,EAAO,MAC7B,GAAI,CAAC2/B,GAAgBjgC,CAAS,EAC1B,MAAO,GAEX,IAAIogC,EAAY,EAChB,MAAMnC,EAAQplB,GAA2B7Y,EAAU,OAAO,CAAC,EAAE,MAAOiE,GACzDA,EAAK,KAAK,OAAS,OAC7B,EAUD,OATAg6B,GAAU,MAAoCA,EAAM,KAAK,YAAYh6B,GAAQ,CACzE,GAAIA,EAAK,KAAK,OAAS,QACnB,MAAO,GAEP,CAAC,YAAa,aAAa,EAAE,SAASA,EAAK,KAAK,IAAI,IACpDm8B,GAAa,EAEzB,CAAK,EACwBA,IAAcpgC,EAAU,OAAO,QAIxDM,EAAO,SAAS,cACT,IAHI,EAIf,EAMM+/B,GAAQpb,EAAK,OAAO,CACtB,KAAM,QAEN,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,EAClB,UAAW,GACX,YAAa,EACb,aAAc,GAEd,KAAM6Z,GACN,oBAAqB,GACrB,wBAAyB,EACrC,CACK,EACD,QAAS,YACT,UAAW,QACX,UAAW,GACX,MAAO,QACP,WAAY,CACR,MAAO,CAAC,CAAE,IAAK,OAAO,CAAE,CAC3B,EACD,WAAW,CAAE,KAAA76B,EAAM,eAAA4H,GAAkB,CACjC,KAAM,CAAE,SAAAmyB,EAAU,WAAAiB,EAAY,cAAAC,CAAe,EAAGH,GAAe96B,EAAM,KAAK,QAAQ,YAAY,EAW9F,MAVc,CACV,QACAnB,EAAgB,KAAK,QAAQ,eAAgB+I,EAAgB,CACzD,MAAOozB,EACD,UAAUA,CAAU,GACpB,cAAcC,CAAa,EACjD,CAAa,EACDlB,EACA,CAAC,QAAS,CAAC,CACvB,CAEK,EACD,aAAc,CACV,MAAO,CACH,YAAa,CAAC,CAAE,KAAAgC,EAAO,EAAG,KAAAhB,EAAO,EAAG,cAAAW,EAAgB,EAAM,EAAG,CAAE,IAAK,CAAC,CAAE,GAAAn/B,EAAI,SAAAW,EAAU,OAAAb,CAAM,IAAO,CAC9F,MAAM2D,EAAOu7B,GAAYl/B,EAAO,OAAQ0/B,EAAMhB,EAAMW,CAAa,EACjE,GAAIx+B,EAAU,CACV,MAAMghB,EAAS3hB,EAAG,UAAU,KAAO,EACnCA,EAAG,qBAAqByD,CAAI,EACvB,eAAgB,EAChB,aAAa0K,EAAAA,cAAc,KAAKnO,EAAG,IAAI,QAAQ2hB,CAAM,CAAC,CAAC,CAC/D,CACD,MAAO,EACV,EACD,gBAAiB,IAAM,CAAC,CAAE,MAAAriB,EAAO,SAAAqB,CAAQ,IAC9Bm/B,EAAe,gBAACxgC,EAAOqB,CAAQ,EAE1C,eAAgB,IAAM,CAAC,CAAE,MAAArB,EAAO,SAAAqB,CAAQ,IAC7Bo/B,EAAc,eAACzgC,EAAOqB,CAAQ,EAEzC,aAAc,IAAM,CAAC,CAAE,MAAArB,EAAO,SAAAqB,CAAQ,IAC3Bq/B,EAAY,aAAC1gC,EAAOqB,CAAQ,EAEvC,aAAc,IAAM,CAAC,CAAE,MAAArB,EAAO,SAAAqB,CAAQ,IAC3Bs/B,EAAY,aAAC3gC,EAAOqB,CAAQ,EAEvC,YAAa,IAAM,CAAC,CAAE,MAAArB,EAAO,SAAAqB,CAAQ,IAC1Bu/B,EAAW,YAAC5gC,EAAOqB,CAAQ,EAEtC,UAAW,IAAM,CAAC,CAAE,MAAArB,EAAO,SAAAqB,CAAQ,IACxBw/B,EAAS,UAAC7gC,EAAOqB,CAAQ,EAEpC,YAAa,IAAM,CAAC,CAAE,MAAArB,EAAO,SAAAqB,CAAQ,IAC1By/B,EAAW,YAAC9gC,EAAOqB,CAAQ,EAEtC,WAAY,IAAM,CAAC,CAAE,MAAArB,EAAO,SAAAqB,CAAQ,IACzB0/B,EAAU,WAAC/gC,EAAOqB,CAAQ,EAErC,UAAW,IAAM,CAAC,CAAE,MAAArB,EAAO,SAAAqB,CAAQ,IACxB2/B,EAAS,UAAChhC,EAAOqB,CAAQ,EAEpC,mBAAoB,IAAM,CAAC,CAAE,MAAArB,EAAO,SAAAqB,CAAQ,IACjC4/B,EAAY,aAAC,QAAQ,EAAEjhC,EAAOqB,CAAQ,EAEjD,gBAAiB,IAAM,CAAC,CAAE,MAAArB,EAAO,SAAAqB,CAAQ,IAC9B4/B,EAAY,aAAC,KAAK,EAAEjhC,EAAOqB,CAAQ,EAE9C,iBAAkB,IAAM,CAAC,CAAE,MAAArB,EAAO,SAAAqB,CAAQ,IAC/B6/B,EAAgB,iBAAClhC,EAAOqB,CAAQ,EAE3C,aAAc,IAAM,CAAC,CAAE,MAAArB,EAAO,SAAAqB,CAAQ,IAC9B0/B,EAAU,WAAC/gC,EAAOqB,CAAQ,EACnB,GAEJ2/B,EAAS,UAAChhC,EAAOqB,CAAQ,EAEpC,iBAAkB,CAACV,EAAM2C,IAAU,CAAC,CAAE,MAAAtD,EAAO,SAAAqB,KAClC8/B,EAAAA,YAAYxgC,EAAM2C,CAAK,EAAEtD,EAAOqB,CAAQ,EAEnD,aAAc,IAAM,CAAC,CAAE,MAAArB,EAAO,SAAAqB,CAAQ,IAC3B+/B,EAAY,aAAC,CAAC,EAAEphC,EAAOqB,CAAQ,EAE1C,iBAAkB,IAAM,CAAC,CAAE,MAAArB,EAAO,SAAAqB,CAAQ,IAC/B+/B,EAAY,aAAC,EAAE,EAAEphC,EAAOqB,CAAQ,EAE3C,UAAW,IAAM,CAAC,CAAE,MAAArB,EAAO,SAAAqB,CAAQ,KAC3BA,GACAggC,EAAS,UAACrhC,CAAK,EAEZ,IAEX,iBAAkB+Q,GAAY,CAAC,CAAE,GAAArQ,EAAI,SAAAW,CAAQ,IAAO,CAChD,GAAIA,EAAU,CACV,MAAMnB,EAAYkgC,gBAAc,OAAO1/B,EAAG,IAAKqQ,EAAS,WAAYA,EAAS,QAAQ,EAErFrQ,EAAG,aAAaR,CAAS,CAC5B,CACD,MAAO,EACV,CACb,CACK,EACD,sBAAuB,CACnB,MAAO,CACH,IAAK,IACG,KAAK,OAAO,SAAS,aAAY,EAC1B,GAEN,KAAK,OAAO,IAAK,EAAC,YAAW,EAG3B,KAAK,OAAO,MAAO,EAAC,YAAW,EAAG,aAAY,EAAG,MAF7C,GAIf,YAAa,IAAM,KAAK,OAAO,SAAS,iBAAkB,EAC1D,UAAWmgC,GACX,gBAAiBA,GACjB,OAAQA,GACR,aAAcA,EAC1B,CACK,EACD,uBAAwB,CAEpB,MAAO,CACH,GAFgB,KAAK,QAAQ,WAAa,KAAK,OAAO,WAGhD,CACEiB,iBAAe,CACX,YAAa,KAAK,QAAQ,YAC1B,aAAc,KAAK,QAAQ,aAC3B,KAAM,KAAK,QAAQ,KACnB,oBAAqB,KAAK,QAAQ,mBAC1D,CAAqB,CACJ,EACC,GACNC,eAAa,CACT,wBAAyB,KAAK,QAAQ,uBACtD,CAAa,CACb,CACK,EACD,iBAAiB7/B,EAAW,CACxB,MAAME,EAAU,CACZ,KAAMF,EAAU,KAChB,QAASA,EAAU,QACnB,QAASA,EAAU,OAC/B,EACQ,MAAO,CACH,UAAWoC,EAAarC,EAAkBC,EAAW,YAAaE,CAAO,CAAC,CACtF,CACK,CACL,CAAC,EChVK4/B,GAAYrc,EAAK,OAAO,CAC1B,KAAM,YACN,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,CAC9B,CACK,EACD,QAAS,SACT,eAAgB,CACZ,MAAO,CACH,QAAS,CACL,QAAS,CACZ,EACD,QAAS,CACL,QAAS,CACZ,EACD,SAAU,CACN,QAAS,KACT,UAAWoC,GAAW,CAClB,MAAMsX,EAAWtX,EAAQ,aAAa,UAAU,EAIhD,OAHcsX,EACR,CAAC,SAASA,EAAU,EAAE,CAAC,EACvB,IAET,CACJ,CACb,CACK,EACD,UAAW,OACX,UAAW,GACX,WAAY,CACR,MAAO,CACH,CAAE,IAAK,IAAM,CACzB,CACK,EACD,WAAW,CAAE,eAAA9yB,GAAkB,CAC3B,MAAO,CAAC,KAAM/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAChF,CACL,CAAC,ECtCK01B,GAActc,EAAK,OAAO,CAC5B,KAAM,cACN,YAAa,CACT,MAAO,CACH,eAAgB,CAAE,CAC9B,CACK,EACD,QAAS,SACT,eAAgB,CACZ,MAAO,CACH,QAAS,CACL,QAAS,CACZ,EACD,QAAS,CACL,QAAS,CACZ,EACD,SAAU,CACN,QAAS,KACT,UAAWoC,GAAW,CAClB,MAAMsX,EAAWtX,EAAQ,aAAa,UAAU,EAIhD,OAHcsX,EACR,CAAC,SAASA,EAAU,EAAE,CAAC,EACvB,IAET,CACJ,CACb,CACK,EACD,UAAW,cACX,UAAW,GACX,WAAY,CACR,MAAO,CACH,CAAE,IAAK,IAAM,CACzB,CACK,EACD,WAAW,CAAE,eAAA9yB,GAAkB,CAC3B,MAAO,CAAC,KAAM/I,EAAgB,KAAK,QAAQ,eAAgB+I,CAAc,EAAG,CAAC,CAChF,CACL,CAAC","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41]}
|